之前写过一篇《一个框架解决几乎所有机器学习问题》但没具体的例子和代码,今天看到一个不错的 kaggle 上的 codeExploratory Tutorial - Titanic来解析一下,源码可以直接点这个链接。
在这篇文章中能学到一个完整的运用机器学习解决分析问题的过程,它包括了解决实际问题的一般流程,描述性统计的常用方法,数据清洗的常用方法,如何由给定的普通变量启发式思考其他影响因素,sklearn 建立模型的一般流程,以及很火的 ensemble learning 怎么用。
在Titanic: Machine Learning from Disaster这样的一个问题中,要解决的是根据所提供的 age,sex 等因素的数据,判断哪些乘客更有可能生存下来,所以这是一个分类问题。
这部分先导入常用的 Numpy,Pandas,Matplotlib 等包,导入训练集和测试集:
然后对缺失部分做处理,如果是连续变量,能够使用预测模型,例如 Age,如果是离散的变量,能够找到类似的数据群体,然后取最多的,或者最多群体的平均值。eg,Embarked 这两个缺失值,可以看 Pclass 1 and Fare 80 时,最多的情况是 Embarked=C。
之前有过一篇特征工程怎么做,只是介绍了一些概念,这个例子就是比较具有启发性,看看怎么通过给定的几个变量,去拓展成更有一定的影响力的 feature,如何结合真实的情况联想新的因素,并转化成数字的形式表达出来。
除了性别,年龄等明显的因素,社会地位等也可能会影响着谁会优先乘坐救生艇,或被救助而生存下来。例如,
在这个环节中,还有必要把类别数据变换成 dummy variable 的形式,也就是变换成向量格式,属于第几类就在第几个位置上为 1,其余位置为 0.
连续数据做一下归一化,即把大范围变化的数据范围缩小至 0~1 或者 -1~1 之间。然后把不相关的变量 drop 掉。
首先就是把数据分为训练集和测试集,用到 train_test_split,
因为后面会用到很多模型,所以能把 cross validation 和 fit 的部分写入一个函数,这样每次把分类器投入到函数中训练,最后返回训练好的模型即可。
接下来用训练好的模型去预测测试集的数据,并得到 accuracy_score,
采用上面的方式,尝试多种模型,并打印出它们的 accuracy_score:
用最后训练好的 model 去预测给出的测试集文件,并把数据按照指定格式做好,存进 csv 提交即可。