Sklearn 与 TensorFlow 机器学习实用指南——第二章总结
本章主要讲解了一个完整的机器学习项目的构建过程,参考 地址
1.使用真实的数据
学习机器学习时,最好使用真实数据,而不是人工数据集。幸运的是目前有许多开源的数据集可以进行选择,涵盖多个领域。比如:
流行的开源数据仓库:
http://archive.ics.uci.edu/ml/index.php
https://www.kaggle.com/datasets
https://registry.opendata.aws/
准入口(提供开源数据列表)
http://dataportals.org/
https://opendatamonitor.eu/frontend/web/index.php?r=dashboard%2Findex
https://www.quandl.com/
2.项目概述
根据项目要求确定任务目标(回归还是分类),查看数据类型等等。
3.规划问题
确定此项目的用途背景,更近一步的理解模型要学习的内容以及工作要求,并给出一个参考性能。最后需要确定使用什么学习方法,什么学习模式等等。
4.选择性能指标
常见的有,均方根误差(RMSE):
平均绝对误差(Mean Absolute Error,也称作平均绝对误差:
还有一些其他的性能指标定义,针对不同的问题,性能指标也有所不同。
5.核实假设
列出所有的假设进行分析核实,讨论每一个假设是否合理。
6.快速查看数据结构
使用DataFrame的head()方法查看该数据集的前5行,使用value_counts()方法查看该项中都有哪些类别,describe()方法展示了数值属性的概括。
7.创建测试集合
为了在选择训练模型时不那么刻意的考虑测试集,需要创建测试集放在一边,直到我们的模型训练完成。
创建测试集很简单:只要随机挑选一些实例,一般是数据集的 20%,放到一边。
8.数据探索和可视化、发现规律
常用的技术有:
可视化
标准相关系数(皮尔逊相关系数)pd.corr()
尝试将某些单位或者量纲相同的属性进行组合
9.为机器学习算法准备数据
数据清洗
针对一些确实项:去掉整个属性;去掉对应数据;进行复制(0,平均值,中位数等等)
处理文本和类别属性
特征缩放:线性函数归一化(Min-Max scaling)和标准化(standardization)
转换流水线:利用Scikit-Learn提供的类Pipeline来实现一个数据转换流水线。
10.选择并训练模型
在训练集上训练和评估
在这里我们已经完成了数据的整理与特征的提取,接下来只需要选择几个模型进行多次尝试。
11.使用交叉验证做更佳的评估
通常在模型上线之前,使用验证集对其进行验证,一个较好的方法是使用Scikit-Learn的交叉验证功能。
12.模型微调
使用 Scikit-Learn 的GridSearchCV进行网格搜索可以确定超参数,另外当超参数组合比较多时,可以使用随机搜索RandomizedSearchCV。
还有就是将表现最好的模型组合起来,集成之后的性能通常比单个模型要好。
13.分析最佳模型和它们的误差
查看每个属性对准确预测的相对重要性,可以丢弃一些那么重要的特征。
应该看一下系统犯的误差,搞清为什么会有些误差,以及如何改正问题(添加更多的特征,或相反,去掉没有什么信息的特征,清洗异常值等等)。
14.用测试集评估系统
调节完系统之后,就有了一个性能足够好的系统。现在就可以用测试集评估最后的模型了。这个过程没有什么特殊的:从测试集得到预测值和标签,运行full_pipeline转换数据(调用transform(),而不是fit_transform()!),再用测试集评估最终模型。