個人理解這里的規范化處理指對提取后的特征集進行處理,不是對原始的數據信號進行處理,包括 歸一化 和 標準化。
規范化的原因: 不同特征具有不同量級時會導致:a.數量級的差異將導致量級較大的特征占據主導地位;b.數量級的差異將導致迭代收斂速度減慢;c.依賴于樣本距離的算法對于數據的數量級非常敏感。
歸一化:
,也就是原數據減去該特征列最小值,再除以該特征列的極差,將屬性縮放到[0,1]之間。
標準化:
,也就是原數據減去該特征列的均值,再除以該特征列的標準差。
注意:
1.所謂規范化是對特征列的規范化,不是對樣本的特征向量規范化(如將一個人身高、年齡、體重等屬性規范化沒有意義);
2.應將訓練集和測試集分開后再規范化處理,測試集使用的是訓練集保留下的參數(歸一化的max、min,標準化的mean、std),也就是訓練集規范化時使用自己的最大值最小值、均值方差,測試集規范化計算時仍使用訓練集的最大值最小值、均值方差。
【例】
訓練集兩個樣本,含三個特征,
,測試集也是兩個樣本,三個特征,
。
歸一化: 由訓練集得到參數 min=(1,2,3),max=(2,3,4),則
?訓練集第一維特征的第一個數據1的計算為
,測試集第二維特征的第一個數據1的計算為
.
標準化: 由訓練集得到參數 mean=(3/2, 5/2, 7/2), std=(1/2, 1/2, 1/2),則
訓練集第一維特征的第一個數據1的計算為
,測試集第二維特征的第一個數據1的計算為
.
?
python實現:
可由 sklearn.preprocessing.MinMaxScaler 和 sklearn.preprocessing.StandardScaler 實現,訓練集使用函數 fit_transform(),測試集使用函數?transform()。示例如下:
import numpy as np
from sklearn.preprocessing import MinMaxScaler #歸一化:最值
from sklearn.preprocessing import StandardScaler #標準化:均值方差
#訓練集,兩行三列,兩個樣本、三個特征
x_train = np.array([[1.0,2.0,3.0],
[2.0,3.0,4.0]])
#測試集,兩行三列,兩個樣本、三個特征
x_test = np.array([[1.0,1.0,1.0],
[2.0,2.0,2.0]])
# 特征縮放:歸一化
mms = MinMaxScaler()
x_train_norm = mms.fit_transform(x_train)
x_test_norm = mms.transform(x_test)
print('\n歸一化:\n')
print('x_train_norm:\n',x_train_norm)
print('\nx_test_norm:\n',x_test_norm, "\n")
# 特征縮放:標準化
stdsc = StandardScaler()
x_train_std = stdsc.fit_transform(x_train)
x_test_std = stdsc.transform(x_test)
print('\n標準化:\n')
print('x_train_std:\n',x_train_std)
print('x_test_std:\n',x_test_std)
運行結果:
參考
1.https://blog.csdn.net/zwqjoy/article/details/81182102
2.https://www.cnblogs.com/dearL/p/9532288.html
3.https://blog.csdn.net/anecdotegyb/article/details/74857055
4.https://www.cnblogs.com/dan-baishucaizi/p/9107858.html
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
