众所周知机器学习使计算机从研究数据和统计数据中学习机器学习是向人工智能(AI)方向迈进的一步。机器学习是一个分析数据并学习预测结果的程序。此篇文章主要介绍Python机器学习的数据归一。
1、数据归一化
当您的数据具有不同的值,甚至具有不同的度量单位时,可能很难比较它们。与米相比,公斤是多少?还是海拔比时间?
这个问题的答案是扩展。我们可以将数据缩放为易于比较的新值。
看看下表,它与我们在多元回归一章中使用的数据集相同,但是这次,volume列包含的单位是升,而不是立方米(1.0而不是1000)。
这是csv在pycharm中显示的效果如下(该文件命名为cars2.csv):
Car,Model,Volume,Weight,CO2
Toyota,Aygo,1,790,99
Mitsubishi,Space_Star,1.2,1160,95
Skoda,Citigo,1,929,95
Fiat,500,0.9,865,90
Mini,Cooper,1.5,1140,105
VW,Up!,1,929,105
Skoda,Fabia,1.4,1109,90
Mercedes,A-Class,1.5,1365,92
Ford,Fiesta,1.5,1112,98
Audi,A1,1.6,1150,99
Hyundai,I20,1.1,980,99
Suzuki,Swift,1.3,990,101
Ford,Fiesta,1,1112,99
Honda,Civic,1.6,1252,94
Hundai,I30,1.6,1326,97
Opel,Astra,1.6,1330,97
BMW,1,1.6,1365,99
Mazda,3,2.2,1280,104
Skoda,Rapid,1.6,1119,104
Ford,Focus,2,1328,105
Ford,Mondeo,1.6,1584,94
Opel,Insignia,2,1428,99
Mercedes,C-Class,2.1,1365,99
Skoda,Octavia,1.6,1415,99
Volvo,S60,2,1415,99
Mercedes,CLA,1.5,1465,102
Audi,A4,2,1490,104
Audi,A6,2,1725,114
Volvo,V70,1.6,1523,109
BMW,5,2,1705,114
Mercedes,E-Class,2.1,1605,115
Volvo,XC70,2,1746,117
Ford,B-Max,1.6,1235,104
BMW,2,1.6,1390,108
Opel,Zafira,1.6,1405,109
Mercedes,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对象。
例如:
缩放“重量”和“体积”列中的所有值:请注意,前两个值为-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)
运行效果如下:
[[-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)
运行结果如下:
[107.2087328]
有需要数据和代码的同学可以找我。