第一次学习如何完成一个机器学习的整体工程,借鉴的是寒小阳关于kaggle上的一个新手初级赛题--泰坦尼克沉船事件。原文链接戳泰坦尼克沉船事件分析--logistic回归。
文章中博主提到:
- 『对数据的认识太重要了!』
- 『数据中的特殊点/离群点的分析和处理太重要了!』
- 『特征工程(feature engineering)太重要了!在很多Kaggle的场景下,甚至比model本身还要重要』
- 『要做模型融合(model ensemble)啊啊啊!』
1.首先对数据进行初步分析,比如属性之间的分布,属性与获救情况之间的关联分布等等。从中我们可以初步了解到哪些特征对最终的结果拟合是起到关键性作用的。
2.分析数据中所有特性:除去PassengerID,survived之外,共有10个特征,分别是四个数值型特征:Age,Fare,Parch,Sibsip,三个类目特征:Sex,Pclass,Embarked,加上三个文本型:Cabin,Name,Ticket.
数据预处理:
第一步对缺省数据进行处理,数值型数据可以利用其他特征进行拟合,比如说这里的Age就是利用随机森林拟合的,使用describe可以看到数值型数据的状态,看到其他用于拟合的缺省数据有多少;
类目性数据可以直接将Nan作为一种新的特征处理,比如这里的Cabin;
第二步将类目型特征因子化,因为逻辑回归中所使用的特征数据都是数值型数据。因此将Cabin分为Cabin_Yes,Cabin_No,Embark分为Embark_C,Embark_Q,Embark_S,Sex分为Sex_famale,Sex_male,Pclass分为Pclass_1,Pclass_2,Pclass_3,这里注意虽然Pclass的取值是1,2,3,但它并不是数值型数据而是类目型数据!
第三步去掉我们认为不重要或者不能帮助分类的特征,比如这里的Name,Ticket.
第四步对数据值偏大的特征,比如这里的Age,Fare做归一化处理。
因此,经过处理之后的特征属性有:
Age_scaled,Cabin_Yes,Cabin_No,Embark_C,Embark_Q,Embark_S,Fare_scaled,Parch,Sibsip,Sex_famale,Sex_male,Pclass_1,Pclass_2,Pclass_3.
3.建模
做好数据预处理之后,选择逻辑回归模型进行模型拟合并对测试数据进行预测,这里注意,在对测试数据进行处理的时候,应该采用对训练数据的处理方式和参数(考虑到训练数据比较多)。
4.系统优化
得到一个初始模型及结果之后,我们需要对该模型进行分析,比如利用Learning curve判断它是处于欠拟合还是过拟合状态,以此来判断我们应该增加/减少特征,增加数据还是选择更高项的多项式。具体操作是:
1)模型属性与结果关联性分析:从中可以看出哪些属性与获救结果的关联性大,说明这些属性对判断结果产生了多大的作用。对一些关联性数据与实际我们观察到的关联性不符的特征,考虑去掉它们。
2) 利用learning curve判断模型是处于过拟合还是欠拟合状态,从而采用相对应的方法来优化模型。
3)利用交叉检验baseline model找出其中判断出错的样例,通过分析这些样例来看我们应该加强对那些特征的优化;
5.模型融合
可以采用不同的模型进行融合,也可以采用同一个模型但不同的数据集来进行融合。
这个例子中采用的是后者,利用ensemble里面的模型融合方法,对训练集中的数据每次抽取出不同的一小部分数据集来做得到不同的逻辑回归模型,再将这些模型结合起来。
最终文章给出了答题的框图: