P12 資料的降維及特徵選擇
阿新 • • 發佈:2020-12-30
https://www.bilibili.com/video/BV184411Q7Ng?p=12
註解:
- 這裡了的降維不是指陣列的維度,不是1維、2維、3維那個維。
註解:
- 這個是3維的特徵轉換為2維的特徵。
- 降維就是把樣本的特徵的數量減少,比如在分辨男女的時候,把每個樣本里面的特徵膚色去掉。
註解:
- 特徵2和特徵3是可與去掉的,不然突然增加訓練成本。
註解:
- 過濾式就是把低方差的特徵通過設定方差閾值過濾掉。
註解:
- 如果方差為0或者接近於0,則考慮把這個特徵拿掉,因為它沒有波動,反映不出樣本之間的差別,區分不開不同的樣本。
註解:
- 呼叫函式,把第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()
執行結果:
註解:
- 把相同的特徵都刪掉了,刪掉了特徵向量[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,則特徵向量[2,1,1]也被去掉了。
- 一般方差的閾值可以是[0,10]之間。
註解:
- 一張圖片的特徵向量是可能達到上萬的。
註解:
- 用2維表示3維的東西。
- 圖片1和2看不出來是灑水壺,圖片3勉強能看出來,圖片4(二維)最能表示灑水壺。
註解:
- 如果特徵向量本來就很少,比如10個左右,是沒有必要使用PCA進行特徵壓縮的。
註解:
- 特徵向量1和特徵向量50存在一個大約2倍的關係,這就是特徵向量之間的相關性。
註解:
- 如果要壓縮成一維的話,可以向x軸或者y軸投影,這樣資料點就會由於5個變成3個,這個不是PCA。
- PCA是找到一個直線,讓樣本點投影到這條直線上,切儘可能的減少樣本量的損失。如,可以找到一條斜線,投影后,5個樣本點還是5個樣本點,只不過資料發生了變化,資料量沒有發生變化。
註解:
- 引數n_components一般填90%~95%之間的一個數字,表示用PCA(主成分分析)進行特徵壓縮的時候,保留95%的特徵量,一般沒有一個最優值,需要不斷的除錯才能得出最優值。
- 引數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()
執行結果:
註解:
- 4個樣本3個特徵,變成了3個樣本2個特徵。
- 當然這兩個特徵沒有實際意義,只是舉的數字例子。
- 特徵數量還剩大約90%,因為呼叫主成分分析函式的時候,引數選擇的就是保留90%的特徵數。