有時候,數據集中的某一個特征,方差非常小,非常接近,這樣導致的結果就是,沒有區分度,那么這個特征其實就不是一個好的特征,因此方差過濾的思想就是,找到那些有區分度的特征(方差大)
from sklearn.feature_selection import VarianceThreshold
X = VairanceThreshold().fit_transform(X) # VarianceThreshold 默認參數為0
X_var0
如果一個特征服從伯努利分布,也就是說,這個特征只有兩個類別。這個時候,也可以進行方差過濾,伯努利分布的方差計算公式為:\(\sigma = p(1-p)\), 其中\(p\)為莫一個類別的占比。
例如,一個特征\(x_1\),其中一個類別數量為80,另外一個類別數量為20,這個時候,這個特征的方差為:
\(0.8(1-0.8)\) , 在sklearn中,也可以直接使用方差過濾函數來對這類特征進行篩選。
X_bvar = VarianceThreshold(.8 * (1 - .8)).fit_transform(X)
X_bvar
方差過濾的目的主要是在維持算法表現的前提下,幫助算法刷選出更有分辨的特征,從而減輕計算成本,但是方差過濾不保證能夠實現預期效果,所以在實踐中,需要進行各種實驗,通過真實實驗效果去靈活的應用。