选择建模数据
您的数据集包含太多变量,难以理解,甚至无法很好地打印出来。您该如何将这大量的数据精简到您能够理解的程度?
我们将首先使用直觉选择一些变量。以后的课程将向您展示如何使用统计技术自动优先考虑变量。
为了选择变量/列,我们需要查看数据集中所有列的列表。可以使用 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')
墨尔本数据中有一些缺失值(一些房屋的一些变量没有记录)。我们将在以后的教程中学习如何处理缺失值。不过,您的爱荷华数据在您使用的列中没有缺失值。因此,我们将采取最简单的选择,即从我们的数据中删除房屋。现在不用太担心这一点,尽管代码如下:
# dropna drops missing values (think of na as "not available")
melbourne_data = melbourne_data.dropna(axis=0)
有很多方法可以选择数据的子集。Pandas 课程更详细地介绍了这些内容,但我们现在将专注于两种方法。
- 使用点符号进行选择,用于选择“预测目标”。
- 使用列列表进行选择,用于选择“特征”。
选择预测目标
您可以使用点符号提取一个变量。这个单独的列存储在一个 Series 中,它在很大程度上类似于只有单列数据的 DataFrame。
我们将使用点符号选择我们要预测的列,称为预测目标。按照惯例,预测目标被称为 y。因此,我们需要保存墨尔本数据中房价的代码如下:
y = melbourne_data.Price
选择“特征”
输入我们的模型(以及后来用于预测的)的列称为“特征”。在我们的情况下,这些将是用于确定房屋价格的列。有时,您将使用除目标以外的所有列作为特征。其他时候,使用较少的特征可能更好。
现在,我们将构建一个仅包含几个特征的模型。稍后,您将看到如何迭代并比较使用不同特征构建的模型。
我们通过在括号内提供列名的列表来选择多个特征。该数据按照惯例称为 X。
melbourne_features = ['Rooms', 'Bathroom', 'Landsize', 'Lattitude', 'Longtitude']
X = melbourne_data[melbourne_features]
让我们快速查看我们将用于预测房价的数据,使用 describe 方法和 head 方法,它们分别显示数据的统计信息和前几行。
X.describe()
Rooms Bathroom Landsize Lattitude Longtitude count 6196.000000 6196.000000 6196.000000 6196.000000 6196.000000 mean 2.931407 1.576340 471.006940 -37.807904 144.990201 std 0.971079 0.711362 897.449881 0.075850 0.099165 min 1.000000 1.000000 0.000000 -38.164920 144.542370 25% 2.000000 1.000000 152.000000 -37.855438 144.926198 50% 3.000000 1.000000 373.000000 -37.802250 144.995800 75% 4.000000 2.000000 628.000000 -37.758200 145.052700 max 8.000000 8.000000 37000.000000 -37.457090 145.526350
X.head()
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
这些命令的视觉检查是数据科学家工作中的重要部分。您经常会在数据集中发现值得进一步检查的惊喜。
构建您的模型
您将使用 scikit-learn 库来创建模型。在编码时,该库被写为 sklearn,正如您将在示例代码中看到的那样。Scikit-learn 是对通常存储在 DataFrame 中的数据建模的最流行的库。
构建和使用模型的步骤如下:
- 定义:它将是什么类型的模型?决策树?某种其他类型的模型?还规定了模型类型的一些其他参数。
- 拟合:从提供的数据中捕捉模式。这是建模的核心。
- 预测:就像听起来的那样
- 评估:确定模型预测的准确性。
以下是使用 scikit-learn 定义决策树模型并使用特征和目标变量进行拟合的示例。
from sklearn.tree import DecisionTreeRegressor
# 定义模型。为确保每次运行都获得相同的结果,指定 random_state 的数字
melbourne_model = DecisionTreeRegressor(random_state=1)
# 拟合模型
melbourne_model.fit(X, y)
DecisionTreeRegressor(random_state=1)
许多机器学习模型允许在模型训练中引入一些随机性。指定 random_state 的数字确保您在每次运行时都获得相同的结果。这被认为是一种良好的做法。您可以使用任何数字,模型质量不会实质性地取决于您选择的确切值。
现在,我们有了一个已拟合的模型,我们可以用来进行预测。
实际上,您将希望为新上市的房屋进行预测,而不是我们已经有价格的房屋。但我们将为训练数据的前几行进行预测,以了解 predict 函数的工作原理。
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.]
以上是对前5行房屋进行预