通过一个kaggle实例学习解决机器学习问题
来源:互联网 发布:期货 可用资金算法 编辑:程序博客网 时间:2024/06/06 13:25
之前写过一篇 一个框架解决几乎所有机器学习问题 但是没有具体的例子和代码,今天看到一个不错的 kaggle 上的 code Exploratory Tutorial - Titanic 来解析一下,源码可以直接点这个链接。
在这篇文章中可以学到一个完整的运用机器学习解决分析问题的过程,它包括了解决问题的一般流程,描述性统计的常用方法,数据清洗的常用方法,如何由给定的普通变量启发式思考其他影响因素,sklearn 建立模型的一般流程,以及很火的 ensemble learning 怎么用。
下面进入正题:
在 Titanic: Machine Learning from Disaster 这个问题中,要解决的是根据所提供的 age,sex 等因素的数据,判断哪些乘客更有可能生存下来,所以这是一个分类问题。
在解决机器学习问题时,一般包括以下流程:
- Data Exploration
- Data Cleaning
- Feature Engineering
- Model Building
- Ensemble Learning
- Predict
1. Data Exploration
这部分先导入常用的 Numpy,Pandas,Matplotlib 等包,导入训练集和测试集:
- 1
- 2
- 3
- 4
- 1
- 2
- 3
- 4
- 1
- 2
- 1
- 2
之后,可以用下面的命令先观察一下数据表的结构:
- 1
- 2
- 3
- 1
- 2
- 3
接下来,可以观察各个变量的分布情况:
各个变量在测试集和训练集的分布差不多一致。
然后看一下各个变量对分类标签的影响:
例如,性别的影响,通过可视化可以发现,生还的乘客中女性多于男性.
或者 Pclass 的影响。
2. Data Cleaning
这个部分,可以统计一下各个变量的缺失值情况:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
然后对缺失部分进行处理,如果是连续变量,可以采用预测模型,例如 Age,如果是离散的变量,可以找到类似的数据群体,然后取最多的,或者最多群体的平均值。
eg,Embarked 这两个缺失值,可以看 Pclass 1 and Fare 80 时,最多的情况是 Embarked=C。
3. Feature Engineering
之前有过一篇 特征工程怎么做 只是介绍了一些概念,这个例子就是比较具有启发性,看看怎么通过给定的几个变量,去拓展成更有影响力的 feature,如何结合实际情况联想新的因素,并转化成数字的形式表达出来。
下面是数据中的原始变量,看看由它们可以联想到什么因素。
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
除了性别,年龄等明显的因素,社会地位等也可能影响着谁会优先乘坐救生艇,或被救助而生存下来。例如,
- Name 里可以抓取到这样的字眼,来反映出乘客的职场地位: [‘Capt’, ‘Col’, ‘Major’, ‘Dr’, ‘Officer’, ‘Rev’]。
- Cabin 里的 [a-zA-Z] 也许可以反映出社会地位。
- Cabin 里的 [0-9] 可能代表船舱的地理位置。
- SibSp 可以算出乘客中同一家庭成员人数的大小。
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 1
- 2
- 3
- 4
- 5
- 6
- 7
在这个环节中,还有必要把类别数据变换成 dummy variable 的形式,也就是变换成向量格式,属于第几类就在第几个位置上为 1,其余位置为 0.
连续数据做一下归一化,即把大范围变化的数据范围缩小至 0~1 或者 -1~1 之间。
然后把不相关的变量 drop 掉。
- 1
- 2
- 3
- 4
- 5
- 1
- 2
- 3
- 4
- 5
4. Model Building
首先就是把数据分为训练集和测试集,用到 train_test_split
,
- 1
- 2
- 3
- 1
- 2
- 3
因为后面会用到很多模型,所以可以把 cross validation 和 fit 的部分写入一个函数,这样每次把分类器投入到函数中训练,最后返回训练好的模型即可。
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
以一个 KNN 为例,来看一下建立 训练 并用模型预测的过程,
- 从
sklearn
导入分类器模型后,定义一个 KNN, - 定义合适的参数集
parameters
, - 然后用
get_model
去训练 KNN 模型, - 接下来用训练好的模型去预测测试集的数据,并得到
accuracy_score
, - 然后画出
learning_curve
。
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 1
- 2
- 3
- 4
- 5
- 6
- 7
采用上面的方式,尝试多种模型,并打印出它们的 accuracy_score
:
- 1
- 2
- 3
- 4
- 5
- 6
- 1
- 2
- 3
- 4
- 5
- 6
5. Ensemble
接下来把前面训练好的几个分类器用 VotingClassifier 集成起来再 fit 训练一下,打印 accuracy_score
并画出 learning_curve
。
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 1
- 1
6. Prediction
用最后训练好的 model 去预测给出的测试集文件,并把数据按照指定格式做好,存进 csv 提交即可。
- 通过一个kaggle实例学习解决机器学习问题
- 通过一个kaggle实例学习解决机器学习问题
- Kaggle爆文:一个框架解决几乎所有机器学习问题
- 一步一步解决一个机器学习问题
- 一个框架解决机器学习大部分问题!
- 机器学习-Kaggle竞赛-Titanic
- 一个框架解决kaggle问题
- kaggle实例学习-Titanic(1)
- kaggle实例学习-Titanic(2)
- kaggle实例学习-Titanic(3)
- kaggle实例学习-Titanic(4)
- 一个框架解决几乎所有机器学习问题
- 一个框架解决几乎所有机器学习问题
- 一个框架解决几乎所有机器学习问题
- 一个框架解决几乎所有机器学习问题
- 机器学习-Kaggle竞赛-Digit recognizer
- kaggle机器学习教程(Python实现)
- Python机器学习实践与Kaggle实战
- vue2.0 页面在华为自带浏览器里无法打开。
- 软件测试员如何提升自己
- 如何使用ProgressBar动态设置进度条渐变
- spring事务五种配置方式
- 【Git】Git常用命令清单
- 通过一个kaggle实例学习解决机器学习问题
- 安卓学习
- d3画树形图
- webview网页加载为加载完成引起的崩溃
- 20个android开源项目
- matlab guide未定义与 'matlab.ui.control.UIControl' 类型的输入参数相对应的函数
- 时间序列之AR(自回归模型)
- thinkphp5学习入门
- python 安装PIL Python Imaging Library