第一次参加DC比赛,选择一个不太难的“游戏玩家付费金额预测大赛”进行,虽说看了各种’top 1%’、’top 10%’、’top 5%’等文章,成绩依然还是不理想。总结原因发现还是在对数据的了解和特征工程技巧上没有下足功夫或者没有足够的经验,下面就细节问题和环节作简要总结。

对于数据的了解

数据的第一映像非常重要,决定了下一步数据处理和特征工程的方向,所以一定要详细充分的查看数据后再下手。
熟悉数据分为两步:
1. 数据形态(均值、最值、分布等),数据某些特征的有哪些有意思的信息(时间、坐标)
2. 数据有哪些特征(高维度、稀疏),是否需要预处理(nan、inf、离群点)
这里有个浅显的例子,适合初学者入门:

【半程彩蛋】选手分享,思路解答!

感兴趣的特征都有哪些信息,几个特征放一起能够发现什么,特征之间有无关联,最好能画张图,更加清晰直观些。这些都是需要在了解数据时有一个初步分认识。

特征工程的技巧

对于时间特征的处理技巧:

  1. 熟悉数据类型转换
    float转datatime,datatime转string,string转float
  2. 特征切片,一转多

创建特征常用方法小结

  1. 经纬度坐标转极坐标(以某一点为圆心)
  2. 统计某一特征在参考下的数量,作为新特征。以‘>某阈值’得到布尔型数据,再用values_counts()合成新特征。
  3. 特征之间通过运算得到新的特征,比如资源获取量除以在线时长得到单位时间获取速率。在特征作除法容易产生NAN\INF,要注意作筛选:
data['pve_win_percent']=data.apply(lambda x:x['pve_win_count']/x['pve_lanch_count'] if x['pve_lanch_count']!=0 else 0, axis=1)

特征选择

利用模型自带的feature_importance_,写出一个特征选择函数:

#alg:模型,columns:特征集合
def select_important_features(alg,columns): importances=zip(map(lambda x: round(x, 4), alg.feature_importances_), columns)importance=[]sum=0for i in importances:if i[0]>0.008:importance.append(i[1]) sum=sum+i[0]print("Num : %f | Sum: %3f" % (len(importance), sum))return importance
importance=select_important_features(rfr,x_train.columns)

利用r2找出各个特征与自变量y值相关性大小

# 模型挑选随机森林,参数默认
rfr=RandomForestRegressor()
#将特征按评分排序,存入scores中
scores = []
for i in range(x_train.shape[1]):#分别让每个特征与响应变量做模型分析并得到误差率#R2_score score = cross_val_score(rfr, x_train.values[:, i:i+1], y_train, scoring="r2",cv=ShuffleSplit(len(x_train), 3, .3))scores.append((round(np.mean(score), 3), x_train.columns[i]))
print(sorted(scores, reverse=True))#对每个特征的分数排序

关于特征选择,方法还有很多,这里有比较全面的总结:
结合Scikit-learn介绍几种常用的特征选择方法

模型的评价指标

模型按照分类和回归不同,评价指标不同。
分类:混合矩阵、f1_score
回归:rmse、rmae、r2_score
sklearn库里有专门计算评价指标的函数:
from sklearn.metrics import r2_score, mean_squared_error, mean_absolute_error用法也很简单,就是将预测值和真实值两个数组作为参数传入函数中,就能得到对应的指标值。

针对数据选择模型

稀疏数据——稀疏模型Lasso

线性模型试水:high bias,low variance

参数解释: alpha:正则化强度; 必须是正浮点数

  1. 套索(适合稀疏数据集)

Lasso:使用结构风险最小化=损失函数(平方损失)+正则化(L1范数)

alphaalphaalpha在调参时,可以使用LassoCV尝试尽可能多的值,因为在其他条件不变的情况下,alpha与loss变化是一条凹曲线,存在一个极值点。如图:


缺点:
L1正则化像非正则化线性模型一样也是不稳定的,如果特征集合中具有相关联的特征,当数据发生细微变化时也有可能导致很大的模型差异。

  1. 岭回归:Ridge

L2惩罚项中系数是二次方的,L2正则化会让系数的取值变得平均。
对于关联特征,这意味着他们能够获得更相近的对应系数,对于特征选择来说一种稳定的模型,不像L1正则化那样,系数会因为细微的数据变化而波动。
L2正则化对于特征理解来说更加有用:表示能力强的特征对应的系数是非零。

  1. 使用结构风险最小化=损失函数(平方损失)+正则化(L2范数)
  2. Ridge:固定阿尔法,求出最佳w,阿尔法与w的范数成反比
  3. RidgeCV:多个阿尔法,得出多个对应最佳的w,然后得到最佳的w及对应的阿尔法

带CV和不带CV

带CV的模型(留一交叉验证)形如RidgeCV、LassoCV,使用非常简单直观,但是之前一直不确定带CV为什么能调参,通过阅读发现,带CV的可以快速找到最佳参数,不像gridSearchCV那样可以同时调多个参数,但是速度上占优明显。

这里有一篇将CV训练过程可视化的文章:
优化岭回归参数alpha优化

随机森林试水

随机森林固有缺陷
1. 随机森林在解决回归问题时并没有像它在分类中表现的那么好,这是因为它并不能给出一个连续型的输出。当进行回归时,随机森林不能够作出超越训练集数据范围的预测,这可能导致在对某些还有特定噪声的数据进行建模时出现过度拟合。
2. 对于许多统计建模者来说,随机森林给人的感觉像是一个黑盒子——你几乎无法控制模型内部的运行,只能在不同的参数和随机种子之间进行尝试。

stacking最终要用到

先前多试验几种模型,其目的有三,一是熟悉模型,二来可以进一步加深对数据的理解,三是为最后的模型堆叠做准备工作。

stacking的基模型、目标模型的选择?
mlxtend库,stackingCVRegressor方法,调参时目标模型参数前加’meta-‘

工作环境比较

spyder的布局、使用方法习惯都是模仿的matlab,几乎继承了MATLAB的“工作空间”的功能所有优点:可以很方便地观察变量的值,可以开多个consoles同时执行。
Jupyternotebook嵌入了markdown\Raw NBconvert\Heading不同的编写文档类型,他的核心竞争力在于“文学编程”的思想。用之可以很方便、快捷地写一份说明文档,将说明文字、代码、图表、公式、结论都整合在一个文档中。
这次的比赛,我的工作环境是从notebook转到Spyder的,我觉得从生产效率的角度出发,Spyder要明显更胜一筹,用之一鼓作气的完成数据挖掘,一直使用编程思维而不用担心思维切换和跳转不适等问题。

第一次参加DC比赛总结相关推荐

  1. 第一次参加kaggle比赛的一些收获与心得,记录一下

    #摘要 虽然陆陆续续接触过深度学习的一些相关知识,但是从来没有系统地学习和总结过.加上之前研究的领域是SLAM(实时建图和定位),没有很好的机会直接应用深度学习技术,实践深度学习的机会也比较少.近段时 ...

  2. 记人生第一次参加Codeforces比赛

    2022年4月30日14:33分,距离Codeforces Round #785 (Div. 2)开始还有两分钟.我在谷歌浏览器里面打开了网页,一个字都看不懂, 用nb的谷歌翻译搞出来以后是这样的: ...

  3. 第一次参加创业比赛有感——老人异常行为检测

    首先想说明的是,结局是失败的. 不过,的确是一次很好的体验和尝试.做了一段时间风投,用投资人的眼光评判了许许多多创业项目,但是再换种视角,从创业者的角度来思考,是不是会有不同的启发呢? 这次的经历是, ...

  4. 【第一次参加kaggle比赛记录-Quora Insincere Questions Classification】- Word Embedding

    In summary, word embeddings are a representation of the *semantics* of a word, efficiently encoding ...

  5. 第一次参加亚洲区域赛(广州赛区):倒数第一

    题记:这篇文章,记录了我从学校去广州这6天所发生的事情,庆幸的是我的脸皮比想象中的厚,没有因为这次丢人而自暴自弃,而是,明白了自己到底是多么的弱,希望可以藉此激发我最大的潜能和勤勉,在接下来的大学生活 ...

  6. 第一次参加学校的ACM比赛所学及感想

    第一次写博客!还很不熟练嘻嘻,不过很开心自己有想写下来的东西,以后会一直坚持写的? 高考报志愿的时候不知道自己抽了什么疯,选择了计算机专业,有一部分原因是因为之前看了微微一笑很倾城?觉得女生搞IT很帅 ...

  7. 第一次参加CTF线下比赛的三剑客,都经历了....

    前言 赛事名称:第三届广东省强网杯 参赛人员:破壳学员-罗(我).破壳学员-香.破壳学员-白 单纯给大家分享第一次参加ctf线下比赛的过程以及总结的经验 启程:深圳-广州 21日的下午2点,因为日常拖 ...

  8. 业余无线电通信_登山与业余无线电的完美结合,便携式电台参加VHF比赛心得体会...

    2020 VHF QSO PARTY 了,我们来看看 KDØMFO 是如何把登山和业余无线电比赛完美地结合在一起. KDØMFO 我喜欢徒步背包旅行,为此,我把家搬到落基山脉附近.几年前,因为爬山的时 ...

  9. 第一次参加数学建模竞赛如何夺取一等奖

    以各种竞赛为线索的回忆录/经验贴,没写算法啥的,就是记比赛过程,本科除了看的那几本书,打的那十几场竞赛,寝室那几个人,几位恩师的脸,很多都记不清了. Blog里我化名小羊 这次记录的比赛是:2016年 ...

最新文章

  1. 题目1171:C翻转
  2. C#以post方式调用struts rest-plugin service的问题
  3. (回文串)Manacher算法
  4. VB:如何隐藏/显示treeview的ToolTips
  5. 攻防世界Reverse第七题simple-unpack
  6. 感谢CSDN赠送的2021年新年礼物
  7. rsync+lsyncd实现(本地以及远程)文件实时同步
  8. 【记录】利用jar包制作docker镜像
  9. TTS技术简单介绍和Ekho(余音)TTS的安装与编程
  10. VMware 虚拟机如何连接网络,且远程可连接
  11. 深圳宝安图书馆官网错误 HTTP Status 500 - Servlet.init() for servlet spring threw exception...
  12. 手机App都在偷听我说话?窃听疑云全球密布,科技公司连连喊冤
  13. CalendarDemo Calendar 类的创建及用法
  14. 数学建模案例【人口模型 】(马尔萨斯人口模型,Logistic模型)
  15. psp用ps1模拟器_PSP模拟运行PS游戏下载-PS模拟器(popsloader v4g)下载v6.61 官方版-西西软件下载...
  16. 机器学习 扬帆起航004-02评估假设与比较检验
  17. android scrollview 设置高度,Android创建显示区高度可以调整的ScrollView
  18. 做自己的神——极高自由度的功能游戏:我的世界
  19. 微服务项目-常见问题-启动前端renrenfast报错
  20. 文件对比工具(做软件版本)

热门文章

  1. window.onunload和window.onbeforeunload事件
  2. linux内核配置与调优与shell
  3. wsl 模式 max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
  4. C语言用户自定义标识符的命名规则,c语言中用户标识符的命名规则介绍
  5. 指数爆炸 体验幂的可怕
  6. Android--LayoutAnimation介绍
  7. 企业宣传片的摄制注意事项
  8. 快速发布windows上的web项目【免费内网穿透】
  9. P40 M40魔改问题集锦+温控散热方案【文末】
  10. iphone版 天行skyline_‎App Store 上的“KB SKyline”