最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python 機器學習的標準化、歸一化、正則化、離散化和白化

 更新時間:2021年04月15日 14:50:10   作者:天元浪子  
這篇文章主要介紹了聊聊機器學習的標準化、歸一化、正則化、離散化和白化,幫助大家更好的理解和學習使用python進行機器學習,感興趣的朋友可以了解下

       機器學習的本質是從數(shù)據(jù)集中發(fā)現(xiàn)數(shù)據(jù)內在的特征,而數(shù)據(jù)的內在特征往往被樣本的規(guī)格、分布范圍等外在特征所掩蓋。數(shù)據(jù)預處理正是為了最大限度地幫助機器學習模型或算法找到數(shù)據(jù)內在特征所做的一系列操作,這些操作主要包括標準化、歸一化、正則化、離散化和白化等。

1 標準化

       假定樣本集是二維平面上的若干個點,橫坐標 x 分布于區(qū)間 [0,100] 內,縱坐標 y 分布于區(qū)間 [0,1] 內。顯然,樣本集的 x 特征列和 y 特征列的動態(tài)范圍相差巨大,對于機器學習模型(如k-近鄰或 k-means 聚類)的影響也會有顯著差別。標準化處理正是為了避免某一個動態(tài)范圍過大的特征列對計算結果造成影響,同時還可以提升模型精度。標準化的實質是對樣本集的每個特征列減去該特征列均值進行中心化,再除以標準差進行縮放。
       Scikit-learn的預處理子模塊preprocessing提供了一個快速標準化函數(shù)scale(),使用該函數(shù)可以直接返回標準化后的數(shù)據(jù)集,其代碼如下。

>>> import numpy as np
>>> from sklearn import preprocessing as pp
>>> d = np.array([[ 1., -5., 8.], [ 2., -3., 0.], [ 0., -1., 1.]])
>>> d_scaled = pp.scale(d) # 對數(shù)據(jù)集d做標準化
>>> d_scaled
array([[ 0. , -1.22474487, 1.40487872],
 [ 1.22474487, 0. , -0.84292723],
 [-1.22474487, 1.22474487, -0.56195149]])
>>> d_scaled.mean(axis=0) # 標準化以后的數(shù)據(jù)集,各特征列的均值為0
array([0., 0., 0.])
>>> d_scaled.std(axis=0) # 標準化以后的數(shù)據(jù)集,各特征列的標準差為1
array([1., 1., 1.])

       預處理子模塊 preprocessing 還提供了一個實用類 StandardScaler,它保存了訓練集上各特征列的平均值和標準差,以便以后在測試集上應用相同的變換。此外,實用類StandardScaler 還可以通過 with_mean 和 with_std 參數(shù)指定是否中心化和是否按標準差縮放,其代碼如下。

>>> import numpy as np
>>> from sklearn import preprocessing as pp
>>> X_train = np.array([[ 1., -5., 8.], [ 2., -3., 0.], [ 0., -1., 1.]])
>>> scaler = pp.StandardScaler().fit(X_train)
>>> scaler
StandardScaler(copy=True, with_mean=True, with_std=True)
>>> scaler.mean_ # 訓練集各特征列的均值
array([ 1., -3., 3.])
>>> scaler.scale_ # 訓練集各特征列的標準差
array([0.81649658, 1.63299316, 3.55902608])
>>> scaler.transform(X_train) # 標準化訓練集
array([[ 0. , -1.22474487, 1.40487872],
 [ 1.22474487, 0. , -0.84292723],
 [-1.22474487, 1.22474487, -0.56195149]])
>>> X_test = [[-1., 1., 0.]] # 使用訓練集的縮放標準來標準化測試集
>>> scaler.transform(X_test)
array([[-2.44948974, 2.44948974, -0.84292723]])

2 歸一化

       標準化是用特征列的均值進行中心化,用標準差進行縮放。如果用數(shù)據(jù)集各個特征列的最小值進行中心化后,再按極差(最大值-最小值)進行縮放,即數(shù)據(jù)減去特征列的最小值,并且會被收斂到區(qū)間 [0,1] 內,這個過程就叫作數(shù)據(jù)歸一化。
       Scikit-learn的預處理子模塊 preprocessing 提供 MinMaxScaler 類來實現(xiàn)歸一化功能。MinMaxScaler 類有一個重要參數(shù) feature_range,該參數(shù)用于設置數(shù)據(jù)壓縮的范圍,默認是 [0,1]。

>>> import numpy as np
>>> from sklearn import preprocessing as pp
>>> X_train = np.array([[ 1., -5., 8.], [ 2., -3., 0.], [ 0., -1., 1.]])
>>> scaler = pp.MinMaxScaler().fit(X_train) # 默認數(shù)據(jù)壓縮范圍為[0,1]
>>> scaler
MinMaxScaler(copy=True, feature_range=(0, 1))
>>> scaler.transform(X_train)
array([[0.5 , 0. , 1. ],
 [1. , 0.5 , 0. ],
 [0. , 1. , 0.125]])
>>> scaler = pp.MinMaxScaler(feature_range=(-2, 2)) # 設置數(shù)據(jù)壓縮范圍為[-2,2]
>>> scaler = scaler.fit(X_train)
>>> scaler.transform(X_train)
array([[ 0. , -2. , 2. ],
 [ 2. , 0. , -2. ],
 [-2. , 2. , -1.5]])

       因為歸一化對異常值非常敏感,所以大多數(shù)機器學習算法會選擇標準化來進行特征縮放。在主成分分析(Principal Components Analysis,PCA)、聚類、邏輯回歸、支持向量機、神經(jīng)網(wǎng)絡等算法中,標準化往往是最好的選擇。歸一化在不涉及距離度量、梯度、協(xié)方差計算,以及數(shù)據(jù)需要被壓縮到特定區(qū)間時被廣泛使用,如數(shù)字圖像處理中量化像素強度時,都會使用歸一化將數(shù)據(jù)壓縮在區(qū)間 [0,1] 內。

3 正則化

       歸一化是對數(shù)據(jù)集的特征列的操作,而正則化是將每個數(shù)據(jù)樣本的范數(shù)單位化,是對數(shù)據(jù)集的行操作。如果打算使用點積等運算來量化樣本之間的相似度,那么正則化將非常有用。

       Scikit-learn的預處理子模塊preprocessing提供了一個快速正則化函數(shù)normalize(),使用該函數(shù)可以直接返回正則化后的數(shù)據(jù)集。normalize()函數(shù)使用參數(shù)norm指定I1范式或I2范式,默認使用I2范式。I1 范式可以理解為單個樣本各元素的絕對值之和為 1;I2 范式可理解為單個樣本各元素的平方和的算術根為 1,相當于樣本向量的模(長度)。

>>> import numpy as np
>>> from sklearn import preprocessing as pp
>>> X_train = np.array([[ 1., -5., 8.], [ 2., -3., 0.], [ 0., -1., 1.]])
>>> pp.normalize(X_train) # 使用I2范式正則化,每行的范數(shù)為1
array([[ 0.10540926, -0.52704628, 0.84327404],
 [ 0.5547002 , -0.83205029, 0. ],
 [ 0. , -0.70710678, 0.70710678]])
>>> pp.normalize(X_train, norm='I1') # 使用I1范式正則化,每行的范數(shù)為1
array([[ 0.07142857, -0.35714286, 0.57142857],
 [ 0.4 , -0.6 , 0. ],
 [ 0. , -0.5 , 0.5 ]])

4 離散化

       離散化(Discretization)是將連續(xù)特征劃分為離散特征值,典型的應用是灰度圖像的二值化。如果使用等寬的區(qū)間對連續(xù)特征離散化,則被稱為 K-bins 離散化。Scikit-learn的預處理子模塊preprocessing提供了Binarizer類和KbinsDiscretizer類來進行離散化,前者用于二值化,后者用于 K-bins 離散化。

>>> import numpy as np
>>> from sklearn import preprocessing as pp
>>> X = np.array([[-2,5,11],[7,-1,9],[4,3,7]])
>>> bina = pp.Binarizer(threshold=5) # 指定二值化閾值為5
>>> bina.transform(X)
array([[0, 0, 1],
 [1, 0, 1],
 [0, 0, 1]])
>>> est = pp.KBinsDiscretizer(n_bins=[2, 2, 3], encode='ordinal').fit(X)
>>> est.transform(X) # 三個特征列離散化為2段、2段、3段
array([[0., 1., 2.],
 [1., 0., 1.],
 [1., 1., 0.]])

5 白化

       白化一詞是從whitening翻譯過來的,難以望文生義,只能從白化后的效果去理解。數(shù)據(jù)白化有兩個目的,一是去除或降低特征列之間的相關性,二是使得每個特征列的方差為1。顯然,白化的第一個目標就是主成分分析(PCA),通過主成分分析降維,消除方差占比較小的特征維;白化的第二個目標就是標準化。

       白化分為PCA白化和ZCA白化兩種。PCA 白化將原數(shù)據(jù)各個特征維變換到主成分軸上,消除了特征之間的相關性,并使得各個主成分的方差為1。ZCA白化則是將PCA 白化的結果反變換到原數(shù)據(jù)的各個特征維軸上,因為ZCA白化過程中通常不會降維。

       Scikit-learn沒有提供專用的白化方法,不過借助成分分析子模塊decomposition提供的PCA 類可以輕松實現(xiàn)PCA白化。PCA類的參數(shù)whiten用于設置是否移除特征間的線性關聯(lián),默認值為False。

       假如一位姑娘手頭有一堆相親資料,每位帥哥的信息由年齡、身高、體重、年薪、房產(chǎn)數(shù)量、汽車數(shù)量等多個特征項組成。通過白化操作,能夠生成一個特征維較小、且可以直接比較樣本間差距的數(shù)據(jù)集。

>>> import numpy as np
>>> from sklearn import preprocessing as pp
>>> from sklearn.decomposition import PCA
>>> ds = np.array([
    [25, 1.85, 70, 50, 2, 1], 
    [22, 1.78, 72, 22, 0, 1], 
    [26, 1.80, 85, 25, 1, 0],
    [28, 1.70, 82, 100, 5, 2]
]) # 4個樣本,6個特征列
>>> m = PCA(whiten=True) # 實例化主成分分析類,指定白化參數(shù)
>>> m.fit(ds) # 主成分分析
PCA(whiten=True)
>>> d = m.transform(ds) # 返回主成分分析結果
>>> d # 特征列從6個降至4個
array([[ 0.01001541, -0.99099492, -1.12597902, -0.03748764],
       [-0.76359767, -0.5681715 ,  1.15935316,  0.67477757],
       [-0.65589352,  1.26928222, -0.45686577, -1.8639689 ],
       [ 1.40947578,  0.28988421,  0.42349164,  1.2724972 ]])
>>> d.std(axis=0) # 顯示各特征列方差
array([0.8660254 , 0.8660254 , 0.8660254 , 1.17790433])
>>> d = pp.scale(d) # 標準化
>>> d.std(axis=0) # 標準化后的各特征列方差均為1
array([1., 1., 1., 1.])

       GitHub上有人提供了ZCA白化的代碼,如果需要,請訪問(https://github.com/mwv/zca)。

以上就是聊聊python 機器學習的標準化、歸一化、正則化、離散化和白化的詳細內容,更多關于python 機器學習的資料請關注腳本之家其它相關文章!

相關文章

  • Python使用re模塊實現(xiàn)信息篩選的方法

    Python使用re模塊實現(xiàn)信息篩選的方法

    這篇文章主要介紹了Python使用re模塊實現(xiàn)信息篩選的方法,結合實例形式分析了Python正則re模塊進行信息篩選操作的相關實現(xiàn)技巧及相關函數(shù)使用技巧,需要的朋友可以參考下
    2018-04-04
  • Python實現(xiàn)統(tǒng)計文本中字符的方法小結

    Python實現(xiàn)統(tǒng)計文本中字符的方法小結

    在計算機編程中,經(jīng)常需要對文本數(shù)據(jù)進行處理和分析,字符統(tǒng)計是其中一個常見任務,本文將詳細介紹如何使用Python進行字符統(tǒng)計,希望對大家有所幫助
    2024-01-01
  • Python實現(xiàn)通過解析域名獲取ip地址的方法分析

    Python實現(xiàn)通過解析域名獲取ip地址的方法分析

    這篇文章主要介紹了Python實現(xiàn)通過解析域名獲取ip地址的方法,結合實例形式總結分析了兩種比較常見的解析域名對應IP地址相關操作技巧,需要的朋友可以參考下
    2019-05-05
  • 計算Python Numpy向量之間的歐氏距離實例

    計算Python Numpy向量之間的歐氏距離實例

    這篇文章主要介紹了計算Python Numpy向量之間的歐氏距離實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-05-05
  • python實現(xiàn)堆和索引堆的代碼示例

    python實現(xiàn)堆和索引堆的代碼示例

    本篇文章主要介紹了python實現(xiàn)堆和索引堆的代碼示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-03-03
  • pandas采樣的實現(xiàn)方法

    pandas采樣的實現(xiàn)方法

    pandas提供了多種方法進行隨機采樣,包括指定數(shù)量、按比例、設置隨機種子、有無放回抽樣及按列和分層抽樣,下面就來介紹一下,感興趣的可以了解一下
    2024-12-12
  • python encode和decode的妙用

    python encode和decode的妙用

    做網(wǎng)絡編程的時候,經(jīng)常需要把接收到的數(shù)據(jù)用16進制的方式打印出來,方便查看。今天發(fā)現(xiàn)在Python下有這樣一個簡單的方法。
    2009-09-09
  • 基于python的七種經(jīng)典排序算法(推薦)

    基于python的七種經(jīng)典排序算法(推薦)

    本篇文章主要介紹基于python的七種經(jīng)典排序算法(推薦),具有一定的參考價值,這里整理了詳細的代碼,有需要的小伙伴可以參考下。
    2016-12-12
  • Python中docx2txt庫的使用說明

    Python中docx2txt庫的使用說明

    這篇文章主要介紹了Python中docx2txt庫的使用說明,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-03-03
  • Blender Python編程創(chuàng)建發(fā)光材質示例詳解

    Blender Python編程創(chuàng)建發(fā)光材質示例詳解

    這篇文章主要為大家介紹了Blender Python編程創(chuàng)建發(fā)光材質示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-08-08

最新評論

周口市| 盐亭县| 鄱阳县| 凯里市| 甘肃省| 宜川县| 虎林市| 尼木县| 赤城县| 马山县| 和田县| 鹿邑县| 巴塘县| 伊通| 雷波县| 奉化市| 祥云县| 南宫市| 龙游县| 郸城县| 泽库县| 巴彦县| 临汾市| 香港| 陇南市| 乐安县| 淮滨县| 上高县| 蛟河市| 大港区| 宜宾县| 武穴市| 兴安盟| 马尔康县| 时尚| 白河县| 浦城县| 台北县| 抚顺县| 奎屯市| 滁州市|