数据处理III:无量纲化

下列data数据来源Kaggle的Titanic题目

  • 特征的规格不一样,不能够放在一起比较。
  • 无量纲化可将不同规格的数据转化为同一规格的数据。
# 测试数据:
na = np.asarray([
  [1., 10., -100.],
  [2., 20., -200.],
  [3., 30., -300.]
])

标准化:StandardScaler

前提:特征值服从正态分布。

from sklearn.preprocessing import StandardScaler
print StandardScaler().fit_transform(na)

[[-1.22474487 -1.22474487  1.22474487]
 [ 0.          0.          0.        ]
 [ 1.22474487  1.22474487 -1.22474487]]
data[['Age', 'Fare']] = StandardScaler().fit_transform(data[['Age', 'Fare']])

# 或者
data['Age_scaled'] = scaler.fit_transform(data['Age']) # 年龄
data['Fare_scaled'] = scaler.fit_transform(data['Fare']) # 票价

由于版本不同,有时传入1维数组时会报错:Expected 2D array, got 1D array instead,我们可以暂用data.Age.values.reshape(-1,1)进行处理。

data['Age_scaled'] = scaler.fit_transform(data['Age'].values.reshape(-1,1))
data['Fare_scaled'] = scaler.fit_transform(data['Fare'].values.reshape(-1,1))

numpy.reshape

Expected 2D array, got 1D array instead


区间放缩

  • MinMaxScaler 将数据缩放至[0,1]的区间
# MinMaxScaler = (x - X.min) / (X.max - X.min)

from sklearn.preprocessing import MinMaxScaler
print MinMaxScaler().fit_transform(na)

[[ 0.   0.   1. ]
 [ 0.5  0.5  0.5]
 [ 1.   1.   0. ]]
  • MaxAbsScaler 将最大的绝对值缩放至单位大小
# MaxAbsScaler = x / np.absolute(X).max

from sklearn.preprocessing import MaxAbsScaler
print MaxAbsScaler().fit_transform(na)

[[ 0.33333333  0.33333333 -0.33333333]
 [ 0.66666667  0.66666667 -0.66666667]
 [ 1.          1.         -1.        ]]

归一化:Normalizer

归一化与上两者的区别

  • 上两者按特征矩阵的处理数据,归一化按特征矩阵的处理数据;
  • 上两者让列与列进行向量运算时具有同一标准,归一化让行与行进行向量运算时具有统一标准。
from sklearn.preprocessing import Normalizer
print Normalizer().fit_transform(na)

[[ 0.00994988  0.09949879 -0.99498793]
 [ 0.00994988  0.09949879 -0.99498793]
 [ 0.00994988  0.09949879 -0.99498793]]

你可能感兴趣的:(数据处理III:无量纲化)