机器学习(下)多元回归、缩放、训练测试、决策树

大数据实验室学习记录第9次打卡

上一期机器学习(上)链接如下:
机器学习(上)线性回归、多项式回归、标准差、百分位数、数据分布、散点图

十、多元回归

多元回归(Multiple Regression)
多元回归就像线性回归一样,但是具有多个独立值,这意味着我们试图基于两个或多个变量来预测一个值。
比如:我们可以根据发动机排量的大小预测汽车的二氧化碳排放量,但是通过多元回归,我们可以引入更多变量,例如汽车的重量,以使预测更加准确。
请看下面的数据集,其中包含了一些有关汽车的信息。
在这里插入图片描述
工作原理
在 Python 中,我们拥有可以完成这项工作的模块。首先导入 Pandas 模块:

import pandas

Pandas 模块允许我们读取 csv 文件并返回一个 DataFrame 对象。

此cars.csv文件仅用于测试目的。

df = pandas.read_csv("cars.csv")

然后列出独立值,并将这个变量命名为 X。

将相关值放入名为 y 的变量中。

X = df[['Weight', 'Volume']]
y = df['CO2']

提示:通常,将独立值列表命名为大写 X,将相关值列表命名为小写 y。

我们将使用 sklearn 模块中的一些方法,因此我们也必须导入该模块:

from sklearn import linear_model

在 sklearn 模块中,我们将使用 LinearRegression() 方法创建一个线性回归对象。

该对象有一个名为 fit() 的方法,该方法将独立值和从属值作为参数,并用描述这种关系的数据填充回归对象:

扫描二维码关注公众号,回复: 11374162 查看本文章
regr = linear_model.LinearRegression()
regr.fit(X, y)

现在,我们有了一个回归对象,可以根据汽车的重量和排量预测 CO2 值:
预测重量为 2300kg、排量为 1300ccm 的汽车的二氧化碳排放量:

predictedCO2 = regr.predict([[2300, 1300]])

测试如下:
在这里插入图片描述
预测出配备 1.3 升发动机,重量为 2300 千克的汽车,每行驶 1 公里,就会释放约 107 克二氧化碳。

系数
系数是描述与未知变量的关系的因子。

例如:如果 x 是变量,则 2x 是 x 的两倍。x 是未知变量,数字 2 是系数。

在这种情况下,我们可以要求重量相对于 CO2 的系数值,以及体积相对于 CO2 的系数值。我们得到的答案告诉我们,如果我们增加或减少其中一个独立值,将会发生什么。

实例
打印回归对象的系数值:
在这里插入图片描述
结果解释
结果数组表示重量和排量的系数值。

Weight: 0.00755095
Volume: 0.00780526
这些值告诉我们,如果重量增加 1g,则 CO2 排放量将增加 0.00755095g。

如果发动机尺寸(容积)增加 1 ccm,则 CO2 排放量将增加 0.00780526g。

我认为这是一个合理的猜测,但还是请进行测试!

我们已经预言过,如果一辆配备 1300ccm 发动机的汽车重 2300 千克,则二氧化碳排放量将约为 107 克。

如果我们增加 1000g 的重量会怎样?

实例
复制之前的例子,但是将车重从 2300 更改为 3300:
在这里插入图片描述
之前已经预测,配备 1.3 升发动机,重量为 3.3 吨的汽车,每行驶 1 公里,就会释放约 115 克二氧化碳。

这表明 0.00755095 的系数是正确的:

107.2087328 + (1000 * 0.00755095) = 114.75968

十一、缩放

特征缩放(Scale Features)
当您的数据拥有不同的值,甚至使用不同的度量单位时,可能很难比较它们。与米相比,公斤是多少?或者海拔比较时间呢?

这个问题的答案是缩放。我们可以将数据缩放为易于比较的新值。

请看下表,它与我们在多元回归一章中使用的数据集相同,但是这次,Volume 列包含的单位是升,而不是 ccm(1.0 而不是 1000)。
在这里插入图片描述
很难将排量 1.0 与车重 790 进行比较,但是如果将它们都缩放为可比较的值,我们可以很容易地看到一个值与另一个值相比有多少。

缩放数据有多种方法,在本教程中,我们将使用一种称为**标准化(standardization)**的方法。

标准化方法使用以下公式:

z = (x - u) / s

其中 z 是新值,x 是原始值,u 是平均值,s 是标准差。

如果从上述数据集中获取 weight 列,则第一个值为 790,缩放后的值为:

(790 - 1292.23) / 238.74 = -2.1

如果从上面的数据集中获取 volume 列,则第一个值为 1.0,缩放后的值为:

(1.0 - 1.61) / 0.38 = -1.59

现在,您可以将 -2.1 与 -1.59 相比较,而不是比较 790 与 1.0。

您不必手动执行此操作,Python sklearn 模块有一个名为 StandardScaler() 的方法,该方法返回带有转换数据集方法的 Scaler 对象。

实例
缩放 Weight 和 Volume 列中的所有值:
在这里插入图片描述
预测 CO2 值
多元回归一章的任务是在仅知道汽车的重量和排量的情况下预测其排放的二氧化碳。

缩放数据集后,在预测值时必须使用缩放比例:

实例
预测一辆重 2300 公斤的 1.3 升汽车的二氧化碳排放量:
在这里插入图片描述

十二、训练/测试

什么是训练/测试
训练/测试是一种测量模型准确性的方法。

之所以称为训练/测试,是因为我们将数据集分为两组:训练集和测试集。

80% 用于训练,20% 用于测试。

您可以使用训练集来训练模型。

您可以使用测试集来测试模型。

训练模型意味着创建模型。

测试模型意味着测试模型的准确性。

从数据集开始
从要测试的数据集开始。

我们的数据集展示了商店中的 100 位顾客及其购物习惯。

实例(x 轴表示购买前的分钟数。y 轴表示在购买上花费的金额。)
在这里插入图片描述
拆分训练/测试
训练集应该是原始数据的 80% 的随机选择。

测试集应该是剩余的 20%。

train_x = x[:80]
train_y = y[:80]

test_x = x[80:]
test_y = y[80:]

显示训练集
显示与训练集相同的散点图:

plt.scatter(train_x, train_y)
plt.show()

在这里插入图片描述
显示测试集
为了确保测试集不是完全不同,我们还要看一下测试集。
在这里插入图片描述
拟合数据集
数据集是什么样的?我认为最合适拟合的是多项式回归,因此让我们画一条多项式回归线。

要通过数据点画一条线,我们使用 matplotlib 模块的 plott() 方法:

实例
绘制穿过数据点的多项式回归线:
在这里插入图片描述
R2
R2,也称为 R平方(R-squared)

它测量 x 轴和 y 轴之间的关系,取值范围从 0 到 1,其中 0 表示没有关系,而 1 表示完全相关。

sklearn 模块有一个名为 rs_score() 的方法,该方法将帮助我们找到这种关系。

在这里,我们要衡量顾客在商店停留的时间与他们花费多少钱之间的关系。

实例
我们的训练数据在多项式回归中的拟合度如何?
在这里插入图片描述
引入测试集
现在,至少在训练数据方面,我们已经建立了一个不错的模型。

然后,我们要使用测试数据来测试模型,以检验是否给出相同的结果。

实例
让我们在使用测试数据时确定 R2 分数:
在这里插入图片描述
实例
如果购买客户在商店中停留 5 分钟,他/她将花费多少钱?
在这里插入图片描述

十三、决策树

决策树(Decision Tree)
在本章中,将展示如何制作“决策树”。决策树是一种流程图,可以帮助根据以前的经验进行决策。

在这个例子中,一个人将尝试决定他/她是否应该参加喜剧节目。

幸运的是,我们的例中人物每次在镇上举办喜剧节目时都进行注册,并注册一些关于喜剧演员的信息,并且还登记了他/她是否去过。
在这里插入图片描述
在这里插入图片描述
如需制作决策树,所有数据都必须是数字。

我们必须将非数字列 “Nationality” 和 “Go” 转换为数值。

Pandas 有一个 map() 方法,该方法接受字典,其中包含有关如何转换值的信息。

{‘UK’: 0, ‘USA’: 1, ‘N’: 2}

表示将值 ‘UK’ 转换为 0,将 ‘USA’ 转换为 1,将 ‘N’ 转换为 2。

实例
将字符串值更改为数值:
在这里插入图片描述
然后,我们必须将特征列与目标列分开。

特征列是我们尝试从中预测的列,目标列是具有我们尝试预测的值的列。

实例
X 是特征列,y 是目标列:
在这里插入图片描述
现在,我们可以创建实际的决策树,使其适合我们的细节,然后在计算机上保存一个 .png 文件:

实例
创建一个决策树,将其另存为图像,然后显示该图像:
在这里插入图片描述
结果解释
决策树使用您先前的决策来计算您是否愿意去看喜剧演员的几率。

让我们阅读决策树的不同方面:

在这里插入图片描述Rank
Rank <= 6.5 表示排名在 6.5 以下的喜剧演员将遵循 True 箭头(向左),其余的则遵循 False 箭头(向右)。

gini = 0.497 表示分割的质量,并且始终是 0.0 到 0.5 之间的数字,其中 0.0 表示所有样本均得到相同的结果,而 0.5 表示分割完全在中间进行。

samples = 13 表示在决策的这一点上还剩下 13 位喜剧演员,因为这是第一步,所以他们全部都是喜剧演员。

value = [6, 7] 表示在这 13 位喜剧演员中,有 6 位将获得 “NO”,而 7 位将获得 “GO”。

Gini
分割样本的方法有很多,我们在本教程中使用 GINI 方法。

基尼方法使用以下公式:

Gini = 1 - (x/n)2 - (y/n)2

其中,x 是肯定答案的数量 (“GO”),n 是样本数量,y 是否定答案的数量 (“NO”),使用以下公式进行计算:

1 - (7 / 13)2 - (6 / 13)2 = 0.497
在这里插入图片描述

下一步包含两个框,其中一个框用于喜剧演员,其 ‘Rank’ 为 6.5 或更低,其余为一个框。

True - 5 名喜剧演员在这里结束
gini = 0.0 表示所有样本均得到相同的结果。

samples = 5 表示该分支中还剩下 5 位喜剧演员(5 位的等级为 6.5 或更低的喜剧演员)。

value = [5, 0] 表示 5 得到 “NO” 而 0 得到 “GO”。

False - 8 位戏剧演员继续:
Nationality(国籍)
Nationality <= 0.5 表示国籍值小于 0.5 的喜剧演员将遵循左箭头(这表示来自英国的所有人),其余的将遵循右箭头。

gini = 0.219 意味着大约 22% 的样本将朝一个方向移动。

samples = 8 表示该分支中还剩下 8 个喜剧演员(8 个喜剧演员的等级高于 6.5)。

value = [1, 7] 表示在这 8 位喜剧演员中,1 位将获得 “NO”,而 7 位将获得 “GO”。
在这里插入图片描述

True - 4 名戏剧演员继续:
Age(年龄)

Age <= 35.5 表示年龄在 35.5 岁或以下的喜剧演员将遵循左箭头,其余的将遵循右箭头。

gini = 0.375 意味着大约 37.5% 的样本将朝一个方向移动。

samples = 4 表示该分支中还剩下 4 位喜剧演员(来自英国的 4 位喜剧演员)。

value = [1, 3] 表示在这 4 位喜剧演员中,1 位将获得 “NO”,而 3 位将获得 “GO”。

False - 4 名喜剧演员到这里结束:
gini = 0.0 表示所有样本都得到相同的结果。

samples = 4 表示该分支中还剩下 4 位喜剧演员(来自英国的 4 位喜剧演员)。

value = [0, 4] 表示在这 4 位喜剧演员中,0 将获得 “NO”,而 4 将获得 “GO”。
在这里插入图片描述

True - 2 名喜剧演员在这里结束:
gini = 0.0 表示所有样本都得到相同的结果。

samples = 2 表示该分支中还剩下 2 名喜剧演员(2 名 35.5 岁或更年轻的喜剧演员)。

value = [0, 2] 表示在这 2 位喜剧演员中,0 将获得 “NO”,而 2 将获得 “GO”。

False - 2 名戏剧演员继续:
Experience(经验)
Experience <= 9.5 表示具有 9.5 年或以上经验的喜剧演员将遵循左侧的箭头,其余的将遵循右侧的箭头。

gini = 0.5 表示 50% 的样本将朝一个方向移动。

samples = 2 表示此分支中还剩下 2 个喜剧演员(2 个年龄超过 35.5 的喜剧演员)。

value = [1, 1] 表示这两个喜剧演员中,1 将获得 “NO”,而 1 将获得 “GO”。
在这里插入图片描述

True - 1 名喜剧演员在这里结束:
gini = 0.0 表示所有样本都得到相同的结果。

samples = 1 表示此分支中还剩下 1 名喜剧演员(1 名具有 9.5 年或以下经验的喜剧演员)。

value = [0, 1] 表示 0 表示 “NO”,1 表示 “GO”。

False - 1 名喜剧演员到这里为止:
gini = 0.0 表示所有样本都得到相同的结果。

samples = 1 表示此分支中还剩下 1 位喜剧演员(其中 1 位具有超过 9.5 年经验的喜剧演员)。

value = [1, 0] 表示 1 表示 “NO”,0 表示 “GO”。

预测值
我们可以使用决策树来预测新值。

例如:我是否应该去看一个由 40 岁的美国喜剧演员主演的节目,该喜剧演员有 10 年的经验,喜剧排名为 7?

实例
使用 predict() 方法来预测新值:

print(dtree.predict([[40, 10, 7, 1]]))

在这里插入图片描述
不同的结果
如果运行足够多次,即使您输入的数据相同,决策树也会为您提供不同的结果。

这是因为决策树无法给我们 100% 的肯定答案。它基于结果的可能性,答案会有所不同。


如果有喜欢好看的各种类型的壁纸、头像、朋友圈背景图、QQ名片背景图的朋友可以关注我个人公众号呀

每天分享超好看的各种风格类型 头像!壁纸!朋友圈背景图!嘿嘿!

关注我的公众号:壁纸头像爱好家

猜你喜欢

转载自blog.csdn.net/EMIvv/article/details/106885275