分享

带你一起机器学习:第一个机器学习模型

pig2 2018-8-29 20:14:08 发表于 实操演练 [显示全部楼层] 回帖奖励 阅读模式 关闭右栏 2 5916
问题导读

1.如何选择建模数据?
2.什么是特征?
3.本文使用什么建模?

关注最新经典文章,欢迎关注公众号




机器学习,人工智能在我们看来是非常神秘,并且是非常难学的,在你有一定的了解后,发现原来没有想象的那么难,跟我们的普通编程,唯一不同的地方就是使用了数学公式。但是并不是上来我们就需要数学的,我们可以循序渐进的学习。下面是第一个机器学习模型。


选择建模数据
数据集有太多的变量,你怎么能把这些压倒性的数据减到你能理解的内容?

我们首先使用我们的直觉选择一些变量。 后面将展示自动确定变量优先级的统计技巧。

要选择变量/列,我们需要查看数据集中所有列的列表。 这是通过DataFrame的columns属性(下面的代码底部行)完成的。


In:
[mw_shl_code=python,true]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[/mw_shl_code]

Out:
[mw_shl_code=bash,true]Index(['Suburb', 'Address', 'Rooms', 'Type', 'Price', 'Method', 'SellerG',
       'Date', 'Distance', 'Postcode', 'Bedroom2', 'Bathroom', 'Car',
       'Landsize', 'BuildingArea', 'YearBuilt', 'CouncilArea', 'Lattitude',
       'Longtitude', 'Regionname', 'Propertycount'],
      dtype='object')[/mw_shl_code]

In[2]
[mw_shl_code=python,true]# The Melbourne data has some missing values (some houses for which some variables weren't recorded.)
# We'll learn to handle missing values in a later tutorial.  
# Your Iowa data doesn't have missing values in the columns you use.
# So we will take the simplest option for now, and drop houses from our data.
# Don't worry about this much for now, though the code is:

# dropna drops missing values (think of na as "not available")
melbourne_data = melbourne_data.dropna(axis=0)[/mw_shl_code]
有很多方法可以选择数据的子集。 我们现在将重点关注两种方法。
  • Dot notation,我们用它来选择“预测目标”
  • 选择列列表,我们用它来选择



选择预测目标
您可以使用dot-notation来提取变量。 这一列存储在一个Series中,它大致类似于只有一列数据的DataFrame。

我们将使用dot notation来选择我们想要预测的列,这称为预测目标。 按照惯例,预测目标称为y。 因此,我们需要在墨尔本数据中保存房价的代码是
in[3]
[mw_shl_code=python,true]y = melbourne_data.Price
[/mw_shl_code]

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

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

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

例子:
[mw_shl_code=python,true]melbourne_features = ['Rooms', 'Bathroom', 'Landsize', 'Lattitude', 'Longtitude']
[/mw_shl_code]
按照惯例,这个数据称为X.

[mw_shl_code=python,true]X = melbourne_data[melbourne_features]
[/mw_shl_code]
让我们使用describe方法和head方法快速查看我们将用于预测房价的数据,该方法显示前几行。
[mw_shl_code=python,true]X.describe()
[/mw_shl_code]
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

[mw_shl_code=python,true]X.head()
[/mw_shl_code]

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中的数据类型进行建模。

构建和使用模型的步骤如下:
定义:它是什么类型的模型? 决策树? 其他类型的模型? 还指定了模型类型的一些其他参数。
fit:从提供的数据中匹配模式。 这是建模的核心。
预测:看起来是什么样的
评估:确定模型预测的准确程度。


下面是使用scikit-learn定义决策树模型并将其与特征和目标变量拟合的示例。
[mw_shl_code=python,true]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)[/mw_shl_code]

[mw_shl_code=bash,true]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')[/mw_shl_code]
许多机器学习模型允许模型训练中的一些随机性。 为random_state指定一个数字可确保在每次运行中获得相同的结果。 这被认为是一种很好的做法。 使用任何数字,模型质量不依赖于选择的确切值。

我们现在有一个可以用来进行预测的拟合模型。

在实践中,你会想要对市场上的新房子进行预测,而不是对我们已经有价格的房屋进行预测。 但是我们将对训练数据的前几行进行预测,以了解预测函数的工作原理。

[mw_shl_code=python,true]print("Making predictions for the following 5 houses:")
print(X.head())
print("The predictions are")
print(melbourne_model.predict(X.head()))[/mw_shl_code]
[mw_shl_code=bash,true]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.][/mw_shl_code]


已有(2)人评论

跳转到指定楼层
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条