機器學習--標准化和缺失值處理、數據降維


標准化和缺失值的處理

標准化 : 

  特點 : 通過對原始數據進行變換把數據變換到均值為0, 標准差為1的范圍內.

 

 ## 對於歸一化來說:如果出現異常點,影響了大值和小值,那么結果顯然會發生改變 對於標准化來說:如果出現異常點,由於具有一定數據量,少量的異常點對於平均值的影響並不大,從 而方差改變較小。在已有樣本足夠多的情況下比較穩定,適合現代嘈雜的大數據場景。 ##

標准化API :

 

API : sklearn.preprocessing.StandarScaler
StandardScaler() 
    處理之后每列所有數據都聚集在均值為0標准差為1附近
    StandarScaler.fit_transform(x) 
        x:numpy array格式的數據(n_samples,n_features) 
        返回值:轉換后的形狀相同的array 
    StandarScaler.mean_ 
        原始數據中每列的平均值中位數 
    StandarScaler.std_ 
        原始主句每列特征的方差 
步驟 
    實例化 StandarScaler 
    通過 fit_transform 轉換 

 

案例 :案例 :案例 :案例 :

import numpy as np
from sklearn.preprocessing import StandardScaler
ss = StandardScaler()  # 實例化
data = np.array([[5000,2,10,40],[6000,3,15,45],[50000,5,15,40]])  # 數據
res = ss.fit_transform(data)
print(res)

 


 缺失值的處理方法 : 

  刪除 : 如果每列或者行數據達到一定比例, 建議放棄整行或整列 .

  插補 : 可以通過缺失值每行或每列的平均值/中位數來填充.

缺失值處理API :

 

sklearn缺失值接口 : sklearn.impute.SimpleImputer
   SimpleImputer(missing_values='NaN',strategy='mean',axis=0) 
       完成缺失值插補
   SimpleImputer.fit_transform(x)  x:numpy array格式的數據 
        返回值:轉換后形狀相同也即是的array 
步驟
    初始化SimpleImputer,指定缺失值,指定填補策略,指定行或列 注:缺失值也可以是別的指定要替換的值 
    調用 fit_transform  

 

案例:案例:案例:案例:

import numpy as np
from sklearn.impute import SimpleImputer
data = np.array([[1,2],[np.NaN,3],[7,6]])
si = SimpleImputer()
# si = SimpleImputer(missing_values=6,strategy='most_frequent')  
# missing_values : 指定值填充,默認為NaN. 
# strategy : 填充數值計算方法  ['mean', 'median', 'most_frequent', 'constant']
res = si.fit_transform(data)
print(res)

  ## 👉  列avg,不包含NaN,不計算NaN行 ## 

 



數據降維

數據降維 :這里的維度指定是特征數量,這里的降維是指減少特征的數量。

數據降維有2種,分別是特征選擇 和 主成分分析.


特征選擇

  特征選擇的原因 :

    冗余 : 部分特征的相關度搞,容易消化計算性能.

    噪聲 : 部分特征對預測結果有影響.

  概念 :

    特征選擇就是指 單純的從提取到的所有特征選擇部分特征作為訓練集特征, 特征在選擇前和選擇后可以改變值,也可以不改變值.但是選擇后的特征維數肯定比選擇前小,畢竟我們只選擇了其中的一部分.

  主要方法:

    Filter(過濾式): VarianceThreshold

    Embedded(嵌入式): 正則化 , 決策樹

特征選擇API (降維):

 

類:sklearn.feature_selection.VarianceThreshold 
VarianceThreshold(threshold=0.0) 
    刪除所有低方差特征 
Variance.fit_transform(x) 
    x:numpy array格式的數據 
    返回值:刪除方差低於threshold的特征之后的數據集 
    默認值是保留所有非零方差特征,即刪除所有樣本中具有相同值的特征 
流程 
    初始化VarianceThreshold,指定閾值方差
    調用 fit_transform

 

案例:案例:案例:案例:

# 案例演示
import numpy as np
from sklearn.feature_selection import VarianceThreshold
data = np.array([[0,2,0,3],[0,1,4,3],[0,1,2,3]])
print('降維前:',data)
vt = VarianceThreshold(threshold=0.0)  #過濾方差為0 , 數據不變
res = vt.fit_transform(data)   # 少部分數據
print('降維后:',res)


主成分分析 :

  本質 : PCA是一種分析,簡化數據集的技術.

  目的 : 是數據維度壓縮,盡可能降低原數據的維數(復雜度),盡可能的減少損失信息

  作用 : 可以消減回歸分析或者聚類分析中特征的數量

  使用場景 : 特征數量達到上百的時候,考慮數據的簡化.

主成分分析API(降維) :

類 sklearn.decompositon.PCA
PCA(n_componets=
None) 將數據分解為較低維數據 PCA.fit_transform(x) x:numpy array格式 返回值:轉換后降低維度的array n_componets參數: 小數:表示將信息保存到原信息的百分比,例如0.95表示降維后信息量是原來的95%。一般制定到0.9-0.95 整數:較少到的特征數量,一般不使用 流程 實例化 PCA 調用 fit_transform

案例:案例:案例:案例: 

from sklearn.decomposition import PCA
pca = PCA(n_components=0.95)
data = np.array([[2,8,4,5],[6,3,0,8],[5,4,9,1]])
print('主成分分析降維前:\n',data)
res = pca.fit_transform(data)
print('主成分分析降維后:\n',res)
# 維度下降,不損失信息

 

 


真實案例演示 :

 

 案例代碼 :

# 代碼
import pandas as pd from sklearn.decomposition import PCA 
# 讀取四張表的數據 
prior = pd.read_csv(r'D:\dataanalysis\Felix\week7\instacart\order_products__prior.csv')   # 沒有數據,只有代碼.....
product = pd.read_csv(r'D:\dataanalysis\Felix\week7\instacart\products.csv') 
orders = pd.read_csv(r'D:\dataanalysis\Felix\week7\instacart\orders.csv') 
aisles = pd.read_csv(r'D:\dataanalysis\Felix\week7\instacart\aisles.csv')
# 合並四張表到一張表,(用戶-物品類別) 
data = pd.merge(prior, product, on='product_id') 
data = pd.merge(data, orders, on='order_id' ) 
data = pd.merge(data, aisles, on='aisle_id')
# 建立一個以用戶為行,產品為列的表 # 即用戶和產品進行交叉
table = pd.crosstab(data['user_id'], data['aisle'])
# 數據結構為(206209, 134),需要做主成分分析,進行降維 
pca = PCA(n_components=0.9)

res = pca.fit_transform(table)  
# 最后降維成: (206209, 27)

API總結 :

  1. fit_transform() : 輸入數據直接轉換

  2. fit() : 輸入數據,計算一些中間值,但是不能轉換

  3. transform() : 進行數據轉換

  4. fit_transform() = fit() + transform()


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM