当您的数据具有不同的值,甚至不同的测量单位时,可能很难对它们进行比较。千克与米相比是多少?或者海拔高度与时间的比较?
这个问题的答案是扩展。我们可以将数据扩展为更容易比较的新值。
看一下下表,它与我们在中使用的数据集相同多元回归章节,但这一次体积列包含以下值升代替厘米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,缩放后的值为:
现在您可以比较 -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]
截取页面反馈部分,让我们更快修复内容!也可以直接跳过填写反馈内容!