1. 程式人生 > 實用技巧 >P12 資料的降維及特徵選擇

P12 資料的降維及特徵選擇

https://www.bilibili.com/video/BV184411Q7Ng?p=12

註解:

  1. 這裡了的降維不是指陣列的維度,不是1維、2維、3維那個維。

註解:

  1. 這個是3維的特徵轉換為2維的特徵。
  2. 降維就是把樣本的特徵的數量減少,比如在分辨男女的時候,把每個樣本里面的特徵膚色去掉。

註解:

  1. 特徵2和特徵3是可與去掉的,不然突然增加訓練成本。

註解:

  1. 過濾式就是把低方差的特徵通過設定方差閾值過濾掉。

註解:

  • 如果方差為0或者接近於0,則考慮把這個特徵拿掉,因為它沒有波動,反映不出樣本之間的差別,區分不開不同的樣本。

註解:

  1. 呼叫函式,把第1列特徵和第3列特徵去掉。
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()

執行結果:

註解:

  1. 把相同的特徵都刪掉了,刪掉了特徵向量[0,0,0]和特徵向量[3,3,3].
from sklearn.feature_selection import VarianceThreshold









def var():
    """
    刪除低方差的特徵
    :return:
    """
    var=VarianceThreshold(threshold=1.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()

執行結果:

註解:

  1. 如果是方差閾值設為1,則特徵向量[2,1,1]也被去掉了。
  2. 一般方差的閾值可以是[0,10]之間。

註解:

  1. 一張圖片的特徵向量是可能達到上萬的。

註解:

  1. 用2維表示3維的東西。
  2. 圖片1和2看不出來是灑水壺,圖片3勉強能看出來,圖片4(二維)最能表示灑水壺。

註解:

  1. 如果特徵向量本來就很少,比如10個左右,是沒有必要使用PCA進行特徵壓縮的。

註解:

  1. 特徵向量1和特徵向量50存在一個大約2倍的關係,這就是特徵向量之間的相關性。

註解:

  1. 如果要壓縮成一維的話,可以向x軸或者y軸投影,這樣資料點就會由於5個變成3個,這個不是PCA。
  2. PCA是找到一個直線,讓樣本點投影到這條直線上,切儘可能的減少樣本量的損失。如,可以找到一條斜線,投影后,5個樣本點還是5個樣本點,只不過資料發生了變化,資料量沒有發生變化。

註解:

  1. 引數n_components一般填90%~95%之間的一個數字,表示用PCA(主成分分析)進行特徵壓縮的時候,保留95%的特徵量,一般沒有一個最優值,需要不斷的除錯才能得出最優值。
  2. 引數n_components也可以填一個整數,表示減少到的特徵數量,但是一般並不知道需要減少到多少個特徵數。

程式碼演示:

from sklearn.decomposition import PCA




def pca():
    """
    主成分分析
    :return:
    4個樣本,每個樣本3個特徵
    """
    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. 4個樣本3個特徵,變成了3個樣本2個特徵。
  2. 當然這兩個特徵沒有實際意義,只是舉的數字例子。
  3. 特徵數量還剩大約90%,因為呼叫主成分分析函式的時候,引數選擇的就是保留90%的特徵數。