sklearn快速入门教程
导言
机器学习竞赛是提高数据科学技能和衡量进步的好方法。
在下一个练习中,您将为Kaggle Learn用户创建并提交房价竞争预测
轮到你了
利用你在课程中学到的知识,创建一份提交给Kaggle竞赛的报告!
以下为练习部分
介绍
在本练习中,您将创建并提交Kaggle竞赛的预测。然后,您可以改进您的模型(例如,通过添加功能),以应用您学到的知识,并在排行榜上排名靠前。
# Set up code checking
from learntools.core import binder
binder.bind(globals())
from learntools.machine_learning.ex7 import *
# Set up filepaths
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")
# Import helpful libraries
import pandas as pd
from sklearn.ensemble import RandomForestRegressor
from sklearn.metrics import mean_absolute_error
from sklearn.model_selection import train_test_split
# Load the data, and separate the target
iowa_file_path = '../input/train.csv'
home_data = pd.read_csv(iowa_file_path)
y = home_data.SalePrice
# Create X (After completing the exercise, you can return to modify this line!)
features = ['LotArea', 'YearBuilt', '1stFlrSF', '2ndFlrSF', 'FullBath', 'BedroomAbvGr', 'TotRmsAbvGrd']
# Select columns corresponding to features, and preview the data
X = home_data[features]
X.head()
# Split into validation and training data
train_X, val_X, train_y, val_y = train_test_split(X, y, random_state=1)
# Define a random forest model
rf_model = RandomForestRegressor(random_state=1)
rf_model.fit(train_X, train_y)
rf_val_predictions = rf_model.predict(val_X)
rf_val_mae = mean_absolute_error(rf_val_predictions, val_y)
print("Validation MAE for Random Forest Model: {:,.0f}".format(rf_val_mae))
Validation MAE for Random Forest Model: 21,857
为比赛创建一个模型
上面的代码单元在X列和y列上训练一个随机森林模型。
使用下面的代码单元构建一个随机森林模型,并在所有X和y上对其进行训练。
# To improve accuracy, create a new Random Forest model which you will train on all training data
rf_model_on_full_data = ____
# fit rf_model_on_full_data on all data from the training data
____
现在,阅读“测试”数据文件,并应用模型进行预测。
# path to file you will use for predictions
test_data_path = '../input/test.csv'
# read test data file using pandas
test_data = ____
# create test_X which comes from test_data but includes only the columns you used for prediction.
# The list of columns is stored in a variable called features
test_X = ____
# make predictions which we will submit.
test_preds = ____
提交前,请进行检查,确保您的测试pred的格式正确。
生成提交
运行下面的代码单元格,生成一个CSV文件,其中包含您的预测,可用于提交竞赛。
output = pd.DataFrame({'Id': test_data.Id,
'SalePrice': test_preds})
output.to_csv('submission.csv', index=False)
提交竞赛
为了测试你的成绩,你需要参加比赛(如果你还没有参加的话)。所以点击这个链接打开一个新窗口。然后点击“加入竞争”按钮。
接下来,按照以下说明操作:
首先单击窗口右上角的“保存版本”按钮。这将生成一个弹出窗口。
确保选择了“全部保存并运行”选项,然后单击“保存”按钮。
这将在笔记本的左下角生成一个窗口。完成运行后,单击“保存版本”按钮右侧的数字。这会在屏幕右侧显示一个版本列表。点击省略号(…)在最新版本的右侧,选择“在查看器中打开”。这将使您进入同一页面的查看模式。您需要向下滚动才能返回这些说明。
单击屏幕右侧的“输出”选项卡。然后,点击你想提交的文件,点击提交按钮,将结果提交到排行榜。
您现在已成功提交竞赛!
如果您想继续工作以提高性能,请选择屏幕右上角的编辑按钮。然后您可以更改代码并重复该过程。还有很大的改进空间,你将在工作中登上排行榜。
继续你的进步
有很多方法可以改进你的模型,在这一点上,实验是一个很好的学习方式。
改进模型的最佳方法是添加功能。要向数据中添加更多功能,请重新访问第一个代码单元,并将这行代码更改为包含更多列名:
features = ['LotArea', 'YearBuilt', '1stFlrSF', '2ndFlrSF', 'FullBath', 'BedroomAbvGr', 'TotRmsAbvGrd']
由于缺少值或非数字数据类型等问题,某些功能将导致错误。以下是您可能希望使用的、不会引发错误的潜在列的完整列表:
- ‘MSSubClass’
- ‘LotArea’
- ‘OverallQual’
- ‘OverallCond’
- ‘YearBuilt’
- ‘YearRemodAdd’
- ‘1stFlrSF’
- ‘2ndFlrSF’
- ‘LowQualFinSF’
- ‘GrLivArea’
- ‘FullBath’
- ‘HalfBath’
- ‘BedroomAbvGr’
- ‘KitchenAbvGr’
- ‘TotRmsAbvGrd’
- ‘Fireplaces’
- ‘WoodDeckSF’
- ‘OpenPorchSF’
- ‘EnclosedPorch’
- ‘3SsnPorch’
- ‘ScreenPorch’
- ‘PoolArea’
- ‘MiscVal’
- ‘MoSold’
- ‘YrSold’
查看列列表,思考可能影响房价的因素。要了解这些功能的更多信息,请查看**[竞赛页面]上的数据说明(https://www.kaggle.com/c/home-data-for-ml-course/data)**.
更新上面定义功能的代码单元后,重新运行所有代码单元以评估模型并生成新的提交文件。
#接下来呢?
如上所述,如果您试图使用某些功能来训练模型,它们将抛出错误。中间机器学习本课程将教你如何处理这些类型的功能。您还将学习使用xgboost,这是一种比随机森林更精确的技术。
**熊猫**本课程将为您提供数据操作技能,使您能够在数据科学项目中快速从概念构思到实施。
你也为**[深度学习]做好了准备(https://kaggle.com/Learn/intro-to-Deep-Learning)**当然,你将在计算机视觉任务中建立比人类水平性能更好的模型。
练习答案
# In previous code cell
rf_model_on_full_data = RandomForestRegressor()
rf_model_on_full_data.fit(X, y)
# Then in last code cell
test_data_path = '../input/test.csv'
test_data = pd.read_csv(test_data_path)
test_X = test_data[features]
test_preds = rf_model_on_full_data.predict(test_X)
output = pd.DataFrame({'Id': test_data.Id,
'SalePrice': test_preds})
output.to_csv('submission.csv', index=False)