泰坦尼克的进一步学习---特征工程到底怎么做?

这几天又看了泰坦尼克项目中最popular的两个kernals,一个是利用ensembling+stacking,在我看来主要是模型优化,先利用了五种算法:RandomForestClassifier, ExtraTreesClassifier, AdaBoostClassifier, GradientBoostingClassifier, SVC得出初步结果(五种算法中前面四种都是从sklearn.ensamble中导入的),然后利用xgboost模型对初步结果进行stacking得到最终结果,这种stacking操作效果很好。另外一个是利用kernals主要侧重于如何对数据进行全面的分析,介绍了从零开始的分析大法。现在主要介绍后一种方法的答题思路及我自己的心得体会。

整个过程分为以下几个阶段

1.分析问题,留心看一下题目介绍中给出的信息;
2.得到训练数据和测试数据;
3.对数据进行初步的分析,观察哪些特征有作用,哪些可以去掉,哪些特征有缺省值需要补充以及如何补充等等
4.建模,给出初步的结果
5.利用可视化的效果来分析最终的结果,并提出改进
6.得到最终的结果并提交。
对数据进行处理的过程又可以分为以下几种:
1.使用特征对样本点进行分类
2.观察特征之间的相关性,这一点可以用于提取新的特征或者根据某几个特征推导出另外一个特征的缺省值
3.将类别特征转换为可以处理的数字
4.补充缺省值
5.丢弃某些特征,有时候是因为这些特征可能不可靠,有时候是因为缺省值太多或者无法得到信息
6.产生新的特征
7.利用可视化图表分析特征
下面举几个例子来说明:
1)初步分析数据:一共有哪些特征?哪些是类目特征,它的大致分布(使用describe(include=’O’))?数值特征及大致分布?哪些特征有缺省值?哪些特征含有文本和数字不好处理?
这一步之后我们可以大胆猜想要对数据进行哪些处理,这些可能的处理需要通过后面的分析来确定哪些可做。
2)将类别特征和数值特征与标签label做相关,确定哪些特征与label之间的相关度高,说明这些特征可能对结果比较重要
3)通过可视化图片或者表格来分析特征,我们可以将label与连续数值型特征关联起来分析,看是否需要划分区域块,比如这里的Age特征;也可以将数值型特征和有序性特征都与label关联起来分析。
但在第一篇kernals中可以使用seaborn实现所有特征之间,特征与标签之间的相关度可视化,这样会不会更简便一些。
4)确定猜想之后进行相关处理。

自己的心得:

1.怎么判断需不需要划分区域块呢?
可以根据划分区域之后,各区域内的标签分布情况来确定,比如
AgeBand Survived
0 (-0.08, 16.0] 0.550000
1 (16.0, 32.0] 0.337374
2 (32.0, 48.0] 0.412037
3 (48.0, 64.0] 0.434783
4 (64.0, 80.0] 0.090909
说明划分有意义。
2.缺省数据怎么补充?
可以根据数据的均值和方差来随机补充,也可以根据其他特征来得到,主要看与年龄特征相关度比较高的其他特征,可以考虑通过它们得到,比如这里使用的是Pclass和Sex这两个特征来推测Age缺省值。
3.如何确定是否保留新增的特征呢?
观察相关度,相关度高的特征保留,低的可以考虑去掉。
4.如何判断使用哪个模型呢?
可以利用问题的场景来减小模型的选取,然后在缩小范围的模型中挑选出cross-validation交叉验证效果最好的模型。

你可能感兴趣的:(泰坦尼克的进一步学习---特征工程到底怎么做?)