目录

机器学习 - 缩放


缩放特点

当您的数据具有不同的值,甚至不同的测量单位时,可能很难对它们进行比较。千克与米相比是多少?或者海拔高度与时间的比较?

这个问题的答案是扩展。我们可以将数据扩展为更容易比较的新值。

看一下下表,它与我们在中使用的数据集相同多元回归章节,但这一次体积列包含以下值代替厘米3(1.0 而不是 1000)。

模型 体积 重量 二氧化碳
丰田 艾戈 1.0 790 99
三菱 太空之星 1.2 1160 95
斯柯达 西蒂戈 1.0 929 95
菲亚特 500 0.9 865 90
小型的 库珀 1.5 1140 105
大众汽车 向上! 1.0 929 105
斯柯达 法比亚 1.4 1109 90
奔驰 一类 1.5 1365 92
福特 嘉年华 1.5 1112 98
奥迪 A1 1.6 1150 99
现代 I20 1.1 980 99
铃木 迅速 1.3 990 101
福特 嘉年华 1.0 1112 99
本田 思域 1.6 1252 94
现代 I30 1.6 1326 97
欧宝 阿斯特拉 1.6 1330 97
宝马 1 1.6 1365 99
马自达 3 2.2 1280 104
斯柯达 迅速的 1.6 1119 104
福特 重点 2.0 1328 105
福特 蒙迪欧 1.6 1584 94
欧宝 徽章 2.0 1428 99
奔驰 C级 2.1 1365 99
斯柯达 奥克塔维亚 1.6 1415 99
沃尔沃 S60 2.0 1415 99
奔驰 共轭亚油酸 1.5 1465 102
奥迪 A4 2.0 1490 104
奥迪 A6 2.0 1725 114
沃尔沃 V70 1.6 1523 109
宝马 5 2.0 1705 114
奔驰 E级 2.1 1605 115
沃尔沃 XC70 2.0 1746 117
福特 最大B值 1.6 1235 104
宝马 2 1.6 1390 108
欧宝 扎菲拉 1.6 1405 109
奔驰 SLK 2.5 1395 120

比较体积 1.0 和重量 790 可能很困难,但如果我们将它们都缩放为可比较的值,我们可以很容易地看到一个值与另一个值相比有多少。

缩放数据有不同的方法,在本教程中我们将使用一种称为标准化的方法。

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

z = (x - u) / s

在哪里z是新值,x是原始值,u是平均值和s是标准差。

如果你采取重量上面数据集中的列,第一个值为 790,缩放后的值为:

(790 - 1292.23) / 238.74 = -2.1

如果你采取体积上面数据集中的列,第一个值为 1.0,缩放后的值为:

(1.0 - 1.61) / 0.38 = -1.59

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

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

示例

缩放重量和体积列中的所有值:

import pandas
from sklearn import linear_model
from sklearn.preprocessing import StandardScaler
scale = StandardScaler()

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

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

scaledX = scale.fit_transform(X)

print(scaledX)

结果:

请注意,前两个值是 -2.1 和 -1.59,这对应于我们的计算:

[[-2.10389253 -1.59336644]
 [-0.55407235 -1.07190106]
 [-1.52166278 -1.59336644]
 [-1.78973979 -1.85409913]
 [-0.63784641 -0.28970299]
 [-1.52166278 -1.59336644]
 [-0.76769621 -0.55043568]
 [ 0.3046118  -0.28970299]
 [-0.7551301  -0.28970299]
 [-0.59595938 -0.0289703 ]
 [-1.30803892 -1.33263375]
 [-1.26615189 -0.81116837]
 [-0.7551301  -1.59336644]
 [-0.16871166 -0.0289703 ]
 [ 0.14125238 -0.0289703 ]
 [ 0.15800719 -0.0289703 ]
 [ 0.3046118  -0.0289703 ]
 [-0.05142797  1.53542584]
 [-0.72580918 -0.0289703 ]
 [ 0.14962979  1.01396046]
 [ 1.2219378  -0.0289703 ]
 [ 0.5685001   1.01396046]
 [ 0.3046118   1.27469315]
 [ 0.51404696 -0.0289703 ]
 [ 0.51404696  1.01396046]
 [ 0.72348212 -0.28970299]
 [ 0.8281997   1.01396046]
 [ 1.81254495  1.01396046]
 [ 0.96642691 -0.0289703 ]
 [ 1.72877089  1.01396046]
 [ 1.30990057  1.27469315]
 [ 1.90050772  1.01396046]
 [-0.23991961 -0.0289703 ]
 [ 0.40932938 -0.0289703 ]
 [ 0.47215993 -0.0289703 ]
 [ 0.4302729   2.31762392]]

运行示例 »



预测二氧化碳值

任务在多元回归章节当你只知道汽车的重量和体积时,就可以预测汽车的二氧化碳排放量。

当数据集缩放时,您在预测值时必须使用缩放:

示例

预测一辆重 2300 公斤、排量 1.3 升的汽车的二氧化碳排放量:

import pandas
from sklearn import linear_model
from sklearn.preprocessing import StandardScaler
scale = StandardScaler()

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

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

scaledX = scale.fit_transform(X)

regr = linear_model.LinearRegression()
regr.fit(scaledX, y)

scaled = scale.transform([[2300, 1.3]])

predictedCO2 = regr.predict([scaled[0]])
print(predictedCO2)

结果:

[107.2087328]

运行示例 »