天天看點

機器學習:資料特征預處理歸一化和标準化特征預處理1、歸一化2、标準化

特征預處理

通過特定的統計方法(數學方法)将資料轉換成算法要求的資料

數值型資料:
    -标準縮放
        - 歸一化
        - 标準化
        - 缺失值
類别行資料:
    - one-hot編碼
時間型資料:
    - 時間的切分      

1、歸一化

将原始資料映射到一個區間[0,1]

特征同等重要:歸一化處理

目的:使得某一個特征對最終結果不對造成更大的影響

缺點:對于異常點處理不好,容易影響最大值最小值,魯棒性較差(穩定性),隻适合精确小資料場景

機器學習:資料特征預處理歸一化和标準化特征預處理1、歸一化2、标準化

min為列最小值

max為列最大值

x2 為最終結果

mx ,mi 為指定區間預設[0, 1]

代碼示例

# -*- coding: utf-8 -*-

from sklearn.preprocessing import MinMaxScaler

# 歸一化處理,将資料映射到指定區間
data = [
    [90, 2, 10, 40],
    [60, 4, 15, 45],
    [75, 3, 13, 46]
]

min_max = MinMaxScaler(feature_range=(0, 1))
result = min_max.fit_transform(data)
print(result)
"""
[
    [1.         0.         0.         0.        ]
    [0.         1.         1.         0.83333333]
    [0.5        0.5        0.6        1.        ]
]

計算示例,第一列
90
x1 = (x−min)/(max-min) = (90 - 60)/(90 - 60) = 1
x2 = x1 * (mx - mi)+ mi = 1 * (1 - 0) + 0 = 1

60
x1 = (x−min)/(max-min) = (60 - 60)/(90 - 60) = 0
x2 = x1 * (mx - mi)+ mi = 0 * (1 - 0) + 0 = 0

75
x1 = (x−min)/(max-min) = (75 - 60)/(90 - 60) = 0.5
x2 = x1 * (mx - mi)+ mi = 0.5 * (1 - 0) + 0 = 0.5
"""      

2、标準化

将原始資料變換到均值為0,标準差為1的範圍内

平均值

方差 考量資料穩定性

方差 = 0 所有值都一樣

标準差

異常點:由于具有一定資料量,少量的異常點對于平均值的影響并不大,進而方差改變較小

标準差适用場景:

樣本足夠多且比較穩定,嘈雜大資料

機器學習:資料特征預處理歸一化和标準化特征預處理1、歸一化2、标準化

from sklearn.preprocessing import StandardScaler

# 标準化處理,将資料映射到均值為0,标準差為1
data = [
    [1.0, -1.0, 3.0],
    [2.0, 4.0, 2.0],
    [4.0, 6.0, -1.0]
]

std = StandardScaler()
result = std.fit_transform(data)
print(result)
"""
[
    [-1.06904497 -1.35873244  0.98058068]
    [-0.26726124  0.33968311  0.39223227]
    [ 1.33630621  1.01904933 -1.37281295]
]
"""
      

繼續閱讀