【导读】这是一篇完全手把手进行机器学习项目构建的教程,包含:1. 数据清理和格式化 2. 探索性数据分析 3. 特征工程和特征选择 4. 在性能指标上比较几种机器学习模型 5. 对最佳模型执行超参数调整 6. 在测试集合中评估最佳模型 7. 解释模型结果 8. 得出结论。在第一篇文章中,我们对数据进行了清理和结构化,进行了探索性的数据分析,开发了一组用于我们模型的特征,并建立了一个基准(baseline)来衡量性能。在本文中,我们将讨论如何实现和比较Python中的几种机器学习模型,执行超参数优化,对最佳模型进行优选,并对测试集上的最终模型进行评估。
作者|William Koehrsen
编译 | 专知参与 | Mandy, Xiaowen
用python完成一个完整的机器学习项目:第二部分
——Model Selection, Hyperparameter Tuning, and Evaluation
集合解决问题所需的所有机器学习程序可能是一项艰巨的任务。在本系列文章中,我们将通过使用真实数据集实现机器学习工作流程,以了解各个技术是如何结合在一起的。
此项目的完整代码在GitHub上,并附上与本文相对应的参考笔记。您可以随意使用、共享和修改代码!
第二部分代码:
https://github.com/WillKoehrsen/machine-learning-project-walkthrough/blob/master/Machine%20Learning%20Project%20Part%202.ipynb
模型评估和选择(Model Evaluation and Selection)
作为一个提醒,我们正在研究一个有监督的回归任务(a supervised regression task):利用纽约市建筑能源数据(New York City building energy data),我们想开发一个模型,可以预测建筑物的能源之星得分(Energy Star Score)。我们关注的重点是预测的准确性和模型的可解释性。
有大量的机器学习模型可供选择,这会让你难以决定从哪里开始。虽然有些图表试图告诉你要使用哪种算法,但我更愿意多尝试几种算法,并查看哪种算法效果最好!机器学习仍然是一个主要由经验(实验)而不是理论结果驱动的领域,事先知道哪种模型最好,几乎是不可能的。
一般来说,从简单的可解释模型(如线性回归)开始是一个好办法,如果性能不足,继而转向更复杂但通常更准确的模型。下图显示了一种版本的准确性与可解释性之间的权衡:
我们将评估五种不同的模型:
· 线性回归(Linear Regression)
· K最近邻回归(K-Nearest Neighbors Regression)
· 随机森林回归(Random Forest Regression)
· 梯度增强回归(Gradient Boosted Regression)
· 支持向量机回归(Support Vector Machine Regression)
在这篇文章中,我们将着重于实现这些方法而不是背后的理论。对于想要了解背景知识的人来说,我强烈推荐阅读“An Introduction to Statistical Learning“【1】,或者“Hands-On Machine Learning with Scikit-Learn and TensorFlow”【2】。这两本书都很好地解释了理论,并展示了如何分别有效地使用R和Python中的方法。
填补缺失值(Imputing Missing Values)
虽然我们在处理数据时丢失了超过50%缺失值的列,但仍有不少观察结果丢失。 机器学习模型无法处理任何缺失值,因此我们必须把它们填充进去,这是一个称为Imputing的过程【3】。
首先,我们将读入所有数据并提醒自己这些数据是什么样子的:
importpandas aspd
importnumpy asnp
# Read in data into dataframestrain_features = pd.read_csv('data/training_features.csv')
test_features = pd.read_csv('data/testing_features.csv')
train_labels = pd.read_csv('data/training_labels.csv')
test_labels = pd.read_csv('data/testing_labels.csv')
Training Feature Size: (6622,64)
Testing Feature Size: (2839,64)
Training Labels Size: (6622,1)
Testing Labels Size: