ML算法基礎——特徵工程(特徵處理、降維)

1. 數據的特徵處理

1.1 概述

特徵處理
通過特定的統計方法(數學方法)將數據轉換成算法要求的數據

數值型數據
標準縮放:
1、歸一化
2、標準化
3、缺失值
類別型數據:one-hot編碼
時間類型:時間的切分
sklearn特徵處理API
sklearn.preprocessing

1.2 歸一化(MinMaxScaler語法)

1.2.1 概述

特點:通過對原始數據進行變換把數據映射到(默認爲[0,1])之間,使得某⼀個特徵對最終結果不會造成更⼤影響
缺點:異常點對最⼤值最⼩值影響太⼤

公式
image
注:作用於每一列,max爲一列的最大值,min爲一列的最小值,那麼X’’
爲最終結果,mx,mi分別爲指定區間值默認mx爲1,mi爲0

1.2.2 sklearn歸一化API(MinMaxScaler)

sklearn歸一化API: sklearn.preprocessing.MinMaxScaler
MinMaxScaler語法

  • MinMaxScalar(feature_range=(0,1)…)
    • 每個特徵縮放到給定範圍(默認[0,1])
  • MinMaxScalar.fit_transform(X)
    • X:numpy array格式的數據[n_samples,n_features]
    • 返回值:轉換後的形狀相同的array

歸一化步驟

  1. 實例化MinMaxScalar
  2. 通過fit_transform轉換
    實例
from sklearn.preprocessing import MinMaxScaler
def mm():#歸一化處理
    mm=MinMaxScaler()
    data=mm.fit_transform([[90,2,10,40],
[60,4,15,45],
[75,3,13,46]]
)
    print(data)
    return None
mm()
>>>
[[1.         0.         0.         0.        ]
 [0.         1.         1.         0.83333333]
 [0.5        0.5        0.6        1.        ]]

歸一化總結
注意在特定場景下最大值最小值是變化的,另外,最大值與最小值非常容易受異常點影響,所以這種方法魯棒性較差,只適合傳統精確小數據場景

1.3 標準化(StandardScaler語法)

1.3.1 概述

特點:通過對原始數據進行變換把數據變換到均值爲0,標準差爲1範圍內
image
結合歸一化來談標準化
對於歸一化來說:如果出現異常點,影響了最大值和最小值,那麼結果顯然會發生改變

對於標準化來說:如果出現異常點,由於具有一定數據量,少量的異常點對於平均值的影響並不大,從而方差改變較小。

1.3.2 sklearn特徵化API(StandardScaler)

sklearn特徵化API: ``scikit-learn.preprocessing.StandardScaler`
StandardScaler語法

  • StandardScaler(…)
    • 處理之後每列來說所有數據都聚集在均值0附近方差爲1
  • StandardScaler.fit_transform(X,y)
    • X:numpy array格式的數據[n_samples,n_features]
    • 返回值:轉換後的形狀相同的array
  • StandardScaler.mean_
    • 原始數據中每列特徵的平均值
  • StandardScaler.std_
    • 原始數據每列特徵的方差

標準化步驟

  1. 實例化StandardScaler
  2. 通過fit_transform轉換
from sklearn.preprocessing import StandardScaler
def stand():
    std=StandardScaler()
    data=std.fit_transform([[ 1., -1., 3.],
[ 2., 4., 2.],
[ 4., 6., -1.]]
)
    print(data)

if __name__ == "__main__":
   stand()
 
>>>
[[-1.06904497 -1.35873244  0.98058068]
 [-0.26726124  0.33968311  0.39223227]
 [ 1.33630621  1.01904933 -1.37281295]]

1.4 缺失值處理

1.4.1缺失值處理方法

刪除 如果每列或者行數據缺失值達到一定的比例,建議放棄整行或者整列
插補 可以通過缺失值每行或者每列的平均值、中位數來填充

1.4.2 sklearn缺失值API(Imputer)

sklearn.preprocessing.Imputer
Imputer語法

  • Imputer(missing_values='NaN',strategy='mean',axis=0)
    • 完成缺失值插補
  • Imputer.fit_transform(X,y)
    • X:numpy array格式的數據[n_samples,n_features]
    • 返回值:轉換後的形狀相同的array

Imputer流程
1、初始化Imputer,指定”缺失值”,指定填補策略,指定行或列
注:缺失值也可以是別的指定要替換的值
2、調用fit_transform

from sklearn.preprocessing import Imputer
def im():
    im=Imputer(missing_values="NaN",strategy='mean',axis=0)
    data=im.fit_transform([[1, 2],
[np.nan, 3],
[7, 6]])
    print(data)
    return None
>>>
[[1. 2.]
 [4. 3.]
 [7. 6.]]

1.4.3 關於np.nan(np.NaN)

1、 numpy的數組中可以使用np.nan/np.NaN來代替缺失值,屬於float類型
2、如果是文件中的一些缺失值,可以替換成nan,通過np.array轉化成float型的數組即可
缺失值不是nan的時候,需要先轉化成nan
replace(“?”,np.nan)
刪除缺失值所在的行或列:dropna
填充缺失值:fillna

2.數據降維

sklearn降維API
sklearn. decomposition

2.1 數據的特徵選擇

2.1.1 概述

特徵選擇原因

  • 冗餘:部分特徵的相關度高,容易消耗計算性能
  • 噪聲:部分特徵對預測結果有負影響

特徵選擇是什麼
特徵選擇就是單純地從提取到的所有特徵中選擇部分特徵作爲訓練集特徵,
特徵在選擇前和選擇後可以改變值、也不改變值,但是選擇後的特徵維數肯
定比選擇前小,畢竟我們只選擇了其中的一部分特徵。

2.1.2 sklearn特徵選擇API(VarianceThreshold)

sklearn.feature_selection.VarianceThreshold

VarianceThreshold語法
-VarianceThreshold(threshold = 0.0)
- 刪除所有低方差特徵

  • Variance.fit_transform(X,y)
    • X:numpy array格式的數據[n_samples,n_features]
    • 返回值:訓練集差異低於threshold的特徵將被刪除。
    • 默認值是保留所有非零方差特徵,即刪除所有樣本中具有相同值的特徵。

** VarianceThreshold流程(代碼演示)**
1、初始化VarianceThreshold,指定閥值方差
2、調用fit_transform

from sklearn.feature_selection import VarianceThreshold
def var():
    var=VarianceThreshold(threshold=1.0)#默認0.0,刪除相同數據
    data=var.fit_transform([[0, 2, 0, 3],
[0, 1, 4, 3],
[0, 1, 1, 3]]
)
    print(data)
    return None
if __name__ == "__main__":
   var()

>>>
[[0]
 [4]
 [1]]

2.2 PCA(主成分分析)

2.2.1 概述

  • 本質:PCA是一種分析、簡化數據集的技術
  • 目的:是數據維數壓縮,儘可能降低原數據的維數(複雜度),損失少量信息。
  • 作用:可以削減迴歸分析或者聚類分析中特徵的數量

PCA : 特徵數量達到上百的時候考慮數據的簡化數據也會改變特徵數量也會減少

2.2.2 PCA語法

  • PCA(n_components=None)
    • 將數據分解爲較低維數空間
  • PCA.fit_transform(X)
    • X:numpy array格式的數據[n_samples,n_features]
    • 返回值:轉換後指定維度的array

PCA流程(代碼演示)

1、初始化PCA,指定減少後的維度
2、調用fit_transform

from sklearn.decomposition import PCA
def pca():
    pca=PCA(n_components=0.9)
    data=pca.fit_transform([[2,8,4,5],
[6,3,0,8],
[5,4,9,1]]
)
    print(data)
    return  None
if __name__ == "__main__":
   pca()
>>>
[[ 1.22879107e-15  3.82970843e+00]
 [ 5.74456265e+00 -1.91485422e+00]
 [-5.74456265e+00 -1.91485422e+00]]

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章