Kaggle、Python机器学习教程(三):建立第一个机器学习模型

@高效码农  July 8, 2019

选择建模数据

您的数据集有太多的变量,以至于您无法理解,甚至无法很好地打印出来。如何将如此庞大的数据压缩到您能够理解的程度?

我们先用直觉选择几个变量。稍后的课程将向您展示自动对变量进行优先排序的统计技术。

要选择变量/列,我们需要看到数据集中所有列的列表。这是通过DataFrame的columns属性完成的。

#!/usr/bin/python3
# -*- coding: utf-8 -*-


import pandas as pd

# 将文件路径保存到变量以便于访问
melbourne_file_path = 'melb_data.csv'
melbourne_data = pd.read_csv(melbourne_file_path) 
print(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')
# 墨尔本的数据有一些缺失的值(有些房子没有记录一些变量)。
# 我们将在后面的教程中学习如何处理缺失的值。 
# 您的Iowa数据在您使用的列中没有缺失的值。
# 所以现在我们将采用最简单的方法,从数据中删除有空值的房屋。
# 现在不要太担心这个,尽管代码是:
# dropna删除丢失的值(认为na是“不可用的”)
# 通常情况下删除行,使用参数axis = 0,删除列的参数axis = 1,通常不会这么做,那样会删除一个变量。
melbourne_data = melbourne_data.dropna(axis=0)

有许多方法可以选择数据的子集。pandas微课程将更深入地介绍这些内容,但目前我们将重点介绍两种方法。

  • 点符号,用来选择"预测目标"
  • 选择列表中的一列,我们用它来作为“特性”

选择预测目标

您可以使用点符号来提取变量。 这一列存储在一个Series中,它大致类似于只有一列数据的DataFrame。

我们将使用点符号来选择我们想要预测的列,这称为预测目标。 按照惯例,预测目标称为y。 因此,我们需要在墨尔本数据中保存房价的代码是:

y = melbourne_data.Price

选择特征

输入到我们模型中的列(后来用于进行预测)被称为“特征”。 在我们的例子中,那些将是用于确定房价的列。 有时,您将使用除目标之外的所有列作为要素。

目前,我们将构建一个只有少数功能的模型。 稍后您将看到如何迭代和比较使用不同功能构建的模型。

我们通过在括号内提供列名列表来选择多个功能。 该列表中的每个项目都应该是一个字符串(带引号)。

举例:

melbourne_features = ['Rooms', 'Bathroom', 'Landsize', 'Lattitude', 'Longtitude']

按照惯例,这个数据称为X.

X = melbourne_data[melbourne_features]

让我们使用describe方法和head方法快速查看我们将用于预测房价的数据,该方法显示前几行。

print(X.describe())

输出:
2019-07-06T01:23:56.png

print(X.head())

输出:
2019-07-06T01:25:29.png
使用这些命令目视检查数据是数据科学家工作的重要组成部分。 您经常会在数据集中发现值得进一步检查的惊喜。

建立你的模型

您将使用scikit-learn库来创建模型。 Scikit-learn是最常用的库,通常用于对存储在DataFrame中的数据类型进行建模。

构建和使用模型的步骤如下:

  • 定义:它将是什么类型的模型? 决策树? 其他一些型号? 还指定了模型类型的一些其他参数。
  • 调试:从提供的数据中捕获模式。 这是建模的核心。
  • 预测:预计是什么样的
  • 评估:确定模型预测的准确程度。

下面是使用scikit-learn定义决策树模型并将其与特征和目标变量拟合的示例。

# 导入scikit-learn库
from sklearn.tree import DecisionTreeRegressor

# 定义模型。 为random_state指定一个数字,以确保每次运行的结果相同
melbourne_model = DecisionTreeRegressor(random_state=1)

# 调试 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.]

全部代码:

#!/usr/bin/python3
# -*- coding: utf-8 -*-


import pandas as pd
from sklearn.tree import DecisionTreeRegressor

# 将文件路径保存到变量以便于访问
melbourne_file_path = 'melb_data.csv'
melbourne_data = pd.read_csv(melbourne_file_path) 
# print(melbourne_data.columns)

# 墨尔本的数据有一些缺失的值(有些房子没有记录一些变量)。
# 我们将在后面的教程中学习如何处理缺失的值。 
# 您的Iowa数据在您使用的列中没有缺失的值。
# 所以现在我们将采用最简单的方法,从数据中删除有空值的房屋。
# 现在不要太担心这个,尽管代码是:
# dropna删除丢失的值(认为na是“不可用的”)
# 通常情况下删除行,使用参数axis = 0,删除列的参数axis = 1,通常不会这么做,那样会删除一个变量。
melbourne_data = melbourne_data.dropna(axis=0)

y = melbourne_data.Price

melbourne_features = ['Rooms', 'Bathroom', 'Landsize', 'Lattitude', 'Longtitude']

X = melbourne_data[melbourne_features]

# print(X.describe())

# print(X.head())

# 定义模型。 为random_state指定一个数字,以确保每次运行的结果相同
melbourne_model = DecisionTreeRegressor(random_state=1)

# 调试 model
print(melbourne_model.fit(X, y))

print("Making predictions for the following 5 houses:")
print(X.head())
print("The predictions are")
print(melbourne_model.predict(X.head()))


评论已关闭