Kaggle 教程3 -- 你的第一个机器学习模型
翻译自 Kaggle
翻译 by Wyatt Huang
转载请著名
选择合适的数据
一个数据集有太多的变量,如果你想在你的模型中全部囊括的话可能会让你疯狂!所以,预处理数据是很重要的,在这篇教程,我们会学习怎么把那些数据削减到你能理解的东西?
我们首先使用直觉选择一些变量。后面的课程将向您展示一些能够自己选择有用数据的算法
要选择对模型有用的变量,我们需要查看数据集中列表的列。这是通过DataFrame的columns属性(下面的代码底部行)完成的。
import pandas as pd
melbourne_file_path = '../input/melbourne-housing-snapshot/melb_data.csv'
melbourne_data = pd.read_csv(melbourne_file_path)
melbourne_data.columns
## 下面是输出:
Index(['Suburb', 'Address', 'Rooms', 'Type', 'Price', 'Method', 'SellerG',
'Date', 'Distance', 'Postcode', 'Bedroom2', 'Bathroom', 'Car',
'Landsize', 'BuildingArea', 'YearBuilt', 'CouncilArea', 'Lattitude',
'Longtitude', 'Regionname', 'Propertycount'],
dtype='object')
#墨尔本数据有一些缺失值(某些房屋没有记录某些变量。)
#我们将学习在后面的教程中处理缺失值。
#您的爱荷华州数据在您使用的列中没有缺失值。
#所以我们现在采取最简单的选择,从我们的数据中删除房屋。
#暂时不要担心这个问题,尽管代码是:
melbourne_data = melbourne_data.dropna(axis=0)
有很多方法可以选择数据的子集。后面关于pandas的课程更深入地介绍了这些内容,但我们现在将重点关注两种方法。
- 点符号(Dot notation),我们用它来选择“预测目标”
- 通过列表的列属性来选择,我们用它来选择数据的特征(feature)
通过点符号来提取
您可以使用点符号来提取变量。,它大致类似于只有一列数据的DataFrame。
我们将使用点符号来选择我们想要预测的列,这称为预测目标。按照惯例,预测目标称为y。因此,我们需要在墨尔本数据中保存房价的代码是
y = melbourne_data.Price
通过选择"特征"(features)来提取
输入到我们模型中的列(比如说:价格、位置...)被称为“特征”。在我们的例子中,那些将是用于确定房价的特征。有时
目前,我们将构建一个只有少数功能的模型。稍后您将看到如何迭代和比较使用不同功能构建的模型。
我们通过在括号内提供列名列表来选择多个功能。该列表中的每个项目都应该是一个字符串(带引号)。
这是一个例子:
melbourne_features = ['Rooms', 'Bathroom', 'Landsize', 'Lattitude', 'Longtitude']
我们有特征后就可以把特征对应的数据提取出来了
X = melbourne_data[melbourne_features]
让我们来看一下我们的 X 里的信息吧!
X.describe()
72483-t2p1zzhn2w.png
# 查看数据头5行的信息
X.head()
29986-dms705n15g.png
使用以上两种方法检查(check)数据是一种很有必要的手段,在以后当你深入学习后就会体会到这种方法的重要性
建立你的模型
您将使用scikit-learn库来创建模型。编程序时,此库编写为sklearn,您将在示例代码中看到。 Scikit-learn是机器学习中最常用的库,用于对通常存储在DataFrame中的数据类型进行建模。
建模的步骤为:
- 定义:它将是什么类型的模型?决策树?其他一些型号?还指定了模型类型的一些其他参数。
- 适合:从提供的数据中捕获模式。这是建模的核心。
- 预测:听起来是什么样的
- 评估:确定模型预测的准确程度。
下面是一个模型的例子:
from sklearn.tree import DecisionTreeRegressor
# Define model. Specify a number for random_state to ensure same results each run
melbourne_model = DecisionTreeRegressor(random_state=1)
# Fit model
melbourne_model.fit(X, y)
## 下面是输出:
DecisionTreeRegressor(criterion='mse', max_depth=None, max_features=None,
max_leaf_nodes=None, min_impurity_decrease=0.0,
min_impurity_split=None, min_samples_leaf=1,
min_samples_split=2, min_weight_fraction_leaf=0.0,
presort=False, random_state=1, splitter='best')
许多机器学习模型允许模型训练中的一些随机性。为random_state
指定一个数字可确保您在每次运行中获得相同的结果。这被认为是一种很好的做法。您使用任何数字,模型质量不会有意义地取决于您选择的确切值。
我们现在有一个可以用来进行预测的拟合模型。
在实践中,你会想要预测市场上的新房,而不是我们已经有价格的房屋。但是在以下的例子中,我们将对训练数据的前几行进行预测,以了解预测函数的工作原理。
print("Making predictions for the following 5 houses:")
print(X.head())
print("The predictions are")
print(melbourne_model.predict(X.head()))
## 下面是输出:
Making predictions for the following 5 houses:
Rooms Bathroom Landsize Lattitude Longtitude
1 2 1.0 156.0 -37.8079 144.9934
2 3 2.0 134.0 -37.8093 144.9944
4 4 1.0 120.0 -37.8072 144.9941
6 3 2.0 245.0 -37.8024 144.9993
7 2 1.0 256.0 -37.8060 144.9954
The predictions are
[1035000. 1465000. 1600000. 1876000. 1636000.]
课后作业
用墨尔本的房价数据来建立一个你自己的模型
关键词:
- sklearn
- 构建模型
数据: