机器学习中级教程
正文
前言
本文是 kaggle上机器学习中级课程,学习大约为 4 个小时,共七部分,除第一部分介绍外,每部分包括辅导和练习。
此为第一部分,原文链接
如果你是入门者,建议先看之前的文章《sklearn快速入门教程》
介绍
如果你有一些机器学习的背景,并且你想学习如何快速提高模型的质量,那你就来对地方了!在本课程中,您将学到以下相关知识:
- 处理现实世界数据集中常见的数据类型(缺失值、分类变量)
- 设计管道以提高机器学习代码的质量
- 使用先进技术进行模型验证(交叉验证)
- 建立最先进的模型,广泛用于赢得Kaggle竞赛(XGBoost)
- 避免常见和重要的数据科学错误(数据泄漏)
在此过程中,你将运用你的知识,用每个新主题的真实数据完成一个实践练习。实践练习使用 Kaggle Learn 用户住房价格竞赛的数据,你将使用79个不同的解释变量(如屋顶类型、卧室数量和浴室数量)来预测房价。你将通过向本次比赛提交预测并观察自己在排行榜上的排名上升来衡量自己的进步!
先决条件
如果你以前建立过机器学习模型,并且熟悉模型验证、欠拟合和过拟合以及随机森林等主题,那么你已经准备好学习本课程了。
如果你对机器学习完全陌生,请查看我们的机器学习入门课程,它涵盖了你为本课程所需准备的一切。
轮到你了
继续第一个练习,学习如何向Kaggle竞赛提交预测,并确定在开始之前可能需要回顾的内容。
练习部分
作为热身赛,你将复习一些机器学习基础知识,并将初步成绩提交给Kaggle竞赛。
设置
下面的问题将为你的工作提供反馈。运行以下单元格设置反馈系统。
# Set up code checking
import os
if not os.path.exists("../input/train.csv"):
os.symlink("../input/home-data-for-ml-course/train.csv", "../input/train.csv")
os.symlink("../input/home-data-for-ml-course/test.csv", "../input/test.csv")
from learntools.core import binder
binder.bind(globals())
from learntools.ml_intermediate.ex1 import *
print("Setup Complete")
Setup Complete
您将使用 Kaggle Learn 用户的住房价格竞赛数据,使用79个特征(几乎)房屋各个方面的解释变量预测爱荷华州的房价。
在不做任何更改的情况下运行下一个代码单元,以加载X_train和X_valid中的训练和验证功能,以及y_train和y_valid中的预测目标。测试功能在X_test中加载。(如果您需要查看功能和预测目标,请查看本简短教程。要阅读有关模型验证的内容,请查看此处。)
import pandas as pd
from sklearn.model_selection import train_test_split
# Read the data
X_full = pd.read_csv('../input/train.csv', index_col='Id')
X_test_full = pd.read_csv('../input/test.csv', index_col='Id')
# Obtain target and predictors
y = X_full.SalePrice
features = ['LotArea', 'YearBuilt', '1stFlrSF', '2ndFlrSF', 'FullBath', 'BedroomAbvGr', 'TotRmsAbvGrd']
X = X_full[features].copy()
X_test = X_test_full[features].copy()
# Break off validation set from training data
X_train, X_valid, y_train, y_valid = train_test_split(X, y, train_size=0.8, test_size=0.2,
random_state=0)
使用下一个单元格打印数据的前几行。这是一个很好的方法来获得你将在价格预测模型中使用的数据的概述。
X_train.head()
'''
LotArea YearBuilt 1stFlrSF 2ndFlrSF FullBath BedroomAbvGr TotRmsAbvGrd
Id
619 11694 2007 1828 0 2 3 9
871 6600 1962 894 0 1 2 5
93 13360 1921 964 0 1 2 5
818 13265 2002 1689 0 2 3 7
303 13704 2001 1541 0 2 3 6
'''
下一个代码单元定义了五种不同的随机森林模型。运行此代码单元,不做任何更改。(要查看随机森林,请查看此处。)
from sklearn.ensemble import RandomForestRegressor
# Define the models
model_1 = RandomForestRegressor(n_estimators=50, random_state=0)
model_2 = RandomForestRegressor(n_estimators=100, random_state=0)
model_3 = RandomForestRegressor(n_estimators=100, criterion='mae', random_state=0)
model_4 = RandomForestRegressor(n_estimators=200, min_samples_split=20, random_state=0)
model_5 = RandomForestRegressor(n_estimators=100, max_depth=7, random_state=0)
models = [model_1, model_2, model_3, model_4, model_5]
为了从五个模型中选择最佳模型,我们在下面定义了一个函数score_model()。此函数返回验证集的平均绝对误差(MAE)。回想一下,最好的模型将获得最低的MAE。(要查看平均绝对误差(MAE),请查看此处。)
运行代码单元,不做任何更改。
from sklearn.metrics import mean_absolute_error
# Function for comparing different models
def score_model(model, X_t=X_train, X_v=X_valid, y_t=y_train, y_v=y_valid):
model.fit(X_t, y_t)
preds = model.predict(X_v)
return mean_absolute_error(y_v, preds)
for i in range(0, len(models)):
mae = score_model(models[i])
print("Model %d MAE: %d" % (i+1, mae))
第1步:评估几个模型
使用以上结果填写下一行。哪种型号最好?你的答案应该是model_1
、model_2
、model_3
、model_4
或model_5
中的一个。
# Fill in the best model
# 填写最佳模型
best_model = ____
# Check your answer
step_1.check()
第2步:生成测试预测
太棒了你知道如何评估一个精确的模型。现在是时候完成建模过程并做出预测了。在下一行中,创建一个随机森林模型,变量名为my_model。
# Define a model
# 定义模型
my_model = ____ # Your code here
# Check your answer
step_2.check()
运行下一个代码单元,不做任何更改。代码将模型与训练和验证数据相匹配,然后生成测试预测,并保存到CSV文件中。这些测试预测可以直接提交给比赛!
# Fit the model to the training data
my_model.fit(X, y)
# Generate test predictions
preds_test = my_model.predict(X_test)
# Save predictions in format used for competition scoring
output = pd.DataFrame({'Id': X_test.index,
'SalePrice': preds_test})
output.to_csv('submission.csv', index=False)
提交你的结果
一旦你成功完成了第二步,你就可以将结果提交到排行榜了!首先,如果你还没有参加比赛,你需要参加。所以点击这个链接打开一个新窗口。然后点击“加入竞争”按钮。(如果您看到的是“提交预测”按钮而不是“加入竞争”按钮,则表明您已加入竞争,无需再次加入。)
接下来,按照以下说明操作:
- 首先单击窗口右上角的“保存版本”按钮。这将生成一个弹出窗口。
- 确保选择了“全部保存并运行”选项,然后单击“保存”按钮。
这将在笔记本的左下角生成一个窗口。完成运行后,单击“保存版本”按钮右侧的数字。这会在屏幕右侧显示一个- - 版本列表。点击省略号(…)在最新版本的右侧,选择“在查看器中打开”。这将使您进入同一页面的查看模式。您需要向下滚动才能返回这些说明。 - 单击屏幕右侧的“输出”选项卡。然后,点击你想提交的文件,点击提交按钮,将结果提交到排行榜。
您现在已成功提交竞赛!
如果您想继续工作以提高性能,请选择屏幕右上角的编辑按钮。然后您可以更改代码并重复该过程。还有很大的改进空间,你的成绩将登上排行榜。
继续努力
你做了第一个模型。但是,你如何才能快速地让它变得更好呢?
了解如何通过合并缺失值的列来提高竞赛成绩。
答案
python
# step 1
best_model = model_3
# step 2
# Define a model
my_model = best_model