专题一:预处理数据(使用sklearn-preprocessing)
環(huán)境:Python3.6.5
編譯器:jupyter notebook
注:這篇文章會(huì)不斷更新…
1. 標(biāo)準(zhǔn)化
數(shù)據(jù)集的標(biāo)準(zhǔn)化(Standardization)對(duì)scikit-learn中實(shí)現(xiàn)的大多數(shù)機(jī)器學(xué)習(xí)算法來說是常見的要求 。如果個(gè)別特征或多或少看起來不是很像標(biāo)準(zhǔn)正態(tài)分布(具有零均值和單位方差),那么這些機(jī)器學(xué)習(xí)算法的表現(xiàn)可能會(huì)比較差。
在機(jī)器學(xué)習(xí)算法的目標(biāo)函數(shù)(例如SVM的RBF內(nèi)核或線性模型的l1和l2正則化) 中有很多地方都假定了所有特征都是以0為中心而且它們的方差也具有相同的階數(shù)。 如果某個(gè)特征的方差比其他特征大幾個(gè)數(shù)量級(jí),那么它就會(huì)在學(xué)習(xí)算法的目標(biāo)函數(shù)中占據(jù)主導(dǎo)位置, 導(dǎo)致學(xué)習(xí)器并不能像我們所期望的那樣,從其他特征中學(xué)習(xí)。
函數(shù)scale提供了一個(gè)快速簡(jiǎn)單的方法來在單個(gè)array-like數(shù)據(jù)集上執(zhí)行上述標(biāo)準(zhǔn)化操作
from sklearn import preprocessing import numpy as np #創(chuàng)建一組特征數(shù)據(jù),每一行表示一個(gè)樣本,每一列表示一個(gè)特征 X_train = np.array([[ 1., -1., 2.],[ 2., 0., 0.],[ 0., 1., -1.]]) #將每一列特征標(biāo)準(zhǔn)化為標(biāo)準(zhǔn)正太分布,注意,標(biāo)準(zhǔn)化是針對(duì)每一列而言的 X_scaled = preprocessing.scale(X_train) X_scaled """ 輸出: array([[ 0. , -1.22474487, 1.33630621],[ 1.22474487, 0. , -0.26726124],[-1.22474487, 1.22474487, -1.06904497]]) """被縮放的數(shù)據(jù)具有零均值和單位方差:
X_scaled.mean(axis=0) """ 輸出:array([0., 0., 0.]) """ X_scaled.std(axis=0) """ 輸出:array([1., 1., 1.]) """preprocessing模塊還提供了一個(gè)工具類StandardScaler,它實(shí)現(xiàn)了Transformer的API來計(jì)算訓(xùn)練集上的平均值和標(biāo)準(zhǔn)偏差,以便以后能夠在測(cè)試集上重新應(yīng)用相同的變換。
scaler = preprocessing.StandardScaler().fit(X_train) #將每一列特征標(biāo)準(zhǔn)化為標(biāo)準(zhǔn)正太分布,注意,標(biāo)準(zhǔn)化是針對(duì)每一列而言的 scaler.transform(X_train) """ 輸出: array([[ 0. ..., -1.22..., 1.33...],[ 1.22..., 0. ..., -0.26...],[-1.22..., 1.22..., -1.06...]]) """(本文參考官網(wǎng)文檔)
《新程序員》:云原生和全面數(shù)字化實(shí)踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀總結(jié)
以上是生活随笔為你收集整理的专题一:预处理数据(使用sklearn-preprocessing)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 机器学习-学习资源整理
- 下一篇: 逻辑回归实例--乳腺癌肿瘤预测