1、数据归一化
当您的数据具有不同的值,甚至具有不同的度量单位时,可能很难比较它们。与米相比,公斤是多少?还是海拔比时间?
这个问题的答案是扩展。我们可以将数据缩放为易于比较的新值。
看看下表,它与我们在多元回归一章中使用的数据集相同,但是这次,volume列包含的单位是升,而不是立方米(1.0而不是1000)。
CarModelVolumeWeightCO2ToyotaAygo1.079099
MitsubishiSpace Star1.2116095
SkodaCitigo1.092995
Fiat5000.986590
MiniCooper1.51140105
VWUp!1.0929105
SkodaFabia1.4110990
MercedesA-Class1.5136592
FordFiesta1.5111298
AudiA11.6115099
HyundaiI201.198099
SuzukiSwift1.3990101
FordFiesta1.0111299
HondaCivic1.6125294
HundaiI301.6132697
OpelAstra1.6133097
BMW11.6136599
Mazda32.21280104
SkodaRapid1.61119104
FordFocus2.01328105
FordMondeo1.6158494
OpelInsignia2.0142899
MercedesC-Class2.1136599
SkodaOctavia1.6141599
VolvoS602.0141599
MercedesCLA1.51465102
AudiA42.01490104
AudiA62.01725114
VolvoV701.61523109
BMW52.01705114
MercedesE-Class2.11605115
VolvoXC702.01746117
FordB-Max1.61235104
BMW21.61390108
OpelZafira1.61405109
MercedesSLK2.51395120
很难将体积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对象。
例如:
缩放“重量”和“体积”列中的所有值:请注意,前两个值为-2.1和-1.59,与我们的计算相对应:运行示例»import pandas
from sklearn import linear_model
from sklearn.preprocessing import StandardScaler
scale = StandardScaler()
df = pandas.read_csv("cars2.csv")
X = df[['Weight', 'Volume']]
scaledX = scale.fit_transform(X)
print(scaledX)
Result:
[[-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]]
2、预测CO2值
“多元回归”一章的任务是在仅知道汽车的重量和体积的情况下预测其排放的二氧化碳。
缩放数据集后,在预测值时必须使用缩放比例:
例如:
预测1.3升重2300公斤的汽车的二氧化碳排放量:运行示例»import pandas
from sklearn import linear_model
from sklearn.preprocessing import StandardScaler
scale = StandardScaler()
df = pandas.read_csv("cars2.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)
Result:[107.2087328]