本篇中将分4步介绍一个简单的决策树预测模型的构建过程,让你对建模过程有初步了解。
你的数据集中变量太多了,让人摸不着头脑,即便是打印出来也看不清楚。怎样才能把这些庞大的数据集简化为能看得懂的东西呢?
在这篇中我们先依据直觉选择几个变量。稍后的篇章中将介绍如何利用统计类技巧优化变量。
为了挑选一些特征变量,我们先要看一下数据集中有哪些字段。通过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
返回的结果为:
Melbourne数据集中有一些缺失值,即有一些房子的特征值没有被记录。在后面的章节中将介绍如何处理缺失值,此处我们采取最简单的操作,即剔除数据中的缺失值。代码如下所示:
melbourne_data = melbourne_data.dropna(axis=0)
需要注意的是参数:axis=0表示的是删除含有缺失值的行记录。
选择数据子集的方法有多种,通常使用的是以下两种操作:
你可以使用点操作来提取变量。一个单一的数据列被存储在一种叫Series的结构中,Series结构与DataFrame类似,你可以将其理解为一种特殊的,只有一列数据的Dataframe。
我们将利用点操作来选择即将要预测的数据列,即预测目标。一般来说,预测目标变量被称为y。因此利用以下代码来将Melbourne数据集中的房价预测字段存储在变量y中。
y = melbourne_data.Price
这些被输入到模型中用来实现预测的变量就叫做“特征”。在我们的案例中,被用来预测房价的数据列就是特征。有些时候,你可以将数据集中除了预测目标之外的数据列都作为特征,而有些时候可能使用较少一些的特征,模型表现的会更好。
这次,我们只选择几个特征来构建模型。稍后,你将学习如何选用不同的特征进行模型的迭代。
以下代码中,我们将通过在一个方括号里输入多个列名的方式提供多个特征值。
melbourne_features = ['Rooms', 'Bathroom', 'Landsize', 'Lattitude', 'Longtitude']
通常来说,选定的特征变量集被记为X。如下所示:
X = melbourne_data[melbourne_features]
接下来我们通过describe方法和head方法来快速浏览以下特征变量中的数据,如下所示:
X.describe()
X.head()
使用这些命令来目视检查数据是数据科学家工作的重要组成部分,在检查数据集时可能会发现惊喜。
你将利用scikit-learn库来创建模型。在编码过程中,这个库通常被简写为sklearn,如以下代码中所示。Scikit-learn是对存储在Dataframe中的数据进行建模的简单常用工具库。
构建和使用模型一般分为4步:
代码如下所示:
from sklearn.tree import DecisionTreeRegressor
# 定义一个决策树模型,设置随机参数
melbourne_model = DecisionTreeRegressor(random_state=1)
# 拟合模型
melbourne_model.fit(X, y)
许多机器学习模型在模型训练时都是具有随机性的。对参数random_state赋予一个特定的值可以让模型每次运行的结果都是一致的。这被认为是一种很好的做法。你可以对它赋予任何数值,因为无论你选择什么数值,都不会对模型的质量产生本质影响。
通过以上我们已经拟合好了一个模型,可以直接用来预测。
在实践中,你将用模型来预测市场上新的房子的价格,而不是用来预测那些我们已经知道它价格的房子。以下对训练数据中前几行数据的预测,只是为了让你看一下模型是如何工作的。
print("Making predictions for the following 5 houses:")
print(X.head())
print("The predictions are")
print(melbourne_model.predict(X.head()))
至此,一个完整的建模过程就完成了。下次再见。