1. 程式人生 > >機器學習——資料降維

機器學習——資料降維

特徵選擇

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

主要方法(三大武器):Filter(過濾器):VarianceThreshold

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

                         

       包裝(包裹式)

sklearn特徵選擇API:sklearn.feature_selection.VarianceThreshold

  • VarianceThreshold(閾值= 0.0)

        刪除所有低方差特徵

  • Variance.fit_transform(X)

         X:numpy陣列格式的資料[n_samples,n_features]

        返回值:訓練集差異低於閾值的特徵將被刪除

        預設值是保留所有非零方差特徵,即刪除所有樣本中具有相同值的特徵

下面程式碼實現:

from sklearn.feature_selection import VarianceThreshold
def var():
    """
    特徵選擇-刪除低方差的特徵
    return:
    """
    var=VarianceThreshold(threshold=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.0表示刪除相同特徵

執行效果如下:

PCA

特徵數量達到上百的時候考慮使用PCA

本質:PCA是一種分析,簡化資料集的技術

目的:是資料維度壓縮,儘可能降低原資料的維度(複雜度),損失少量資訊。

作用:可以削減迴歸分析或者聚類分析中特徵的數量

PCA(n_components =無)

將資料分解為較低維度空間

PCA.fit_transform(X)

          X:numpy陣列格式的資料[n_samples,n_features]

          返回值:轉換後指定維度的陣列

下面使用程式碼實現:

from sklearn.decomposition import PCA
def pac():
    """
    主成分分析進行特徵降維
    :return:
    """
    pac= PCA(n_components=0.9)
    data=pac.fit_transform([[2,8,4,5],[6,3,0,8],[5,4,9,1]])
    print(data)
    return None
if __name__=="__main":
    pac()

執行結果如下:

案例演示

探究使用者對物品類別的喜歡細分降維

資料:

  • products.csv     商品資訊
  • order_products_prior.csv  訂單與商品資訊
  • ordes.csv              使用者的訂單資訊
  • aisles.csv             商品所屬具體物品類別

下面是部分資料截圖如下:

如果想要資料的話留言私聊小文

程式碼執行結果如下(讀取表的時候注意資料大小): 

import pandas as pd
from sklearn.decomposition import PCA
#讀取四張表的資料
prior=pd.read_csv("./all/order_products__prior.csv")
products=pd.read_csv("./all/products.csv")
orders=pd.read_csv("./all/orders.csv")
aisles=pd.read_csv("./all/aisles.csv")
#合併四張表到一張表(使用者-物品類別)
_mg=pd.merge(prior,products,on=['product_id','product_id'])
_mg=pd.merge(_mg,orders,on=['order_id','order_id'])
_mg=pd.merge(_mg,aisles,on=['aisle_id','aisle_id'])
_mg.head(10)
cross=pd.crosstab9_mg['user_id'],_mg['aisle'])
corss.head(10)
pca=PCA(n_components=0.9)
data=pca.fit_transform(cross)
print(data)

 執行結果如下: