1、方差篩選法
移除低方差的特徵。低方差說明特徵比較均勻,區分度低。如,一列數值全為1,則這列數值的方差為0。這一列特徵對於訓練模型是沒有意義的。
使用方差篩選法的**:
from sklearn.feature_selection import variancethreshold
# 6個樣本,3維的特徵向量
x =[[0
,0,1
],[0
,1,0
],[1
,0,0
],[0
,1,1
],[0
,1,0
],[0
,1,1
]]# 根據方差.對於布林值型別的資料,刪除80%的值都為1或都為0的特徵。所以下面使用0.8
# 由於特徵是伯努利隨機變數(兩個取值),方差計算公式:var_thresh = p(1-p)
df=pd.dataframe(x,columns=
['age'
,'***'
,'level'])
sel = variancethreshold(threshold=(.8
*(1-
.8)))
feature=sel.fit_transform(x)
## feature 的值如下:
array([[
0,1]
,[1,
0],[
0,0]
,[1,
1],[
1,0]
,[1,
1]])
這裡篩選之後,變成了array型別,丟失了特徵名稱,如果想要知道保留的是哪些特徵,可以如下操作
chosed_feat=
all_columns=df.columns.tolist(
)feat_index=sel.get_support(indices=
true
)for i in feat_index:
)## chosed_feat 為 ['***', 'level']
方差分析法可以作為初級的特徵篩選方法,一般可以先將閾值設定大一些(如0.95),先刪除那些取值過於均勻的特徵。
2、基於單變數統計特徵進行選擇
2.1 使用卡方統計量
import numpy as np
from sklearn.datasets import load_iris
from sklearn.feature_selection import selectkbest
from sklearn.feature_selection import chi2
# 載入資料集
iris = load_iris(
)x, y = iris.data, iris.target
data=pd.dataframe(np.array(x)
,columns=
['a'
,'b'
,'c'
,'d'])
print
('原始特徵:'
)print
(x.shape)
print
(x[:10,
:])# 使用卡方分布選擇2個維度的變數
# x_new = selectkbest(chi2, k=2).fit_transform(x, y)
selector = selectkbest(chi2, k=2)
.fit(data, y)
x_new=selector.transform(data)
#fit_transform()就是將fit和transform兩個結合起來了
print
('選取之後:'
)print
(x_new[:10
])fea_index=selector.get_support(indices=
true
)#得到篩選的特徵的index
columns=data.columns.tolist(
) fea=
for i in fea_index:
)print
('篩選的特徵為:'
)print
(fea)
結果如下:
當然,除了卡方(chi),我們也可以使用其他單變數方法。如:
只需要改變selectkbest 中的引數就可以了。如我們可以使使用者資訊方法。
參考的部落格:
1、特徵選擇selectkbest
2、python 特徵選擇
特徵選擇方法總結
摘要 1.特徵選擇的功能 3.過濾特徵選擇 filter feature select 4.嵌入特徵選擇 embeding feature select 內容 1.特徵選擇的功能 減少特徵數量 降維,使模型泛化能力更強,減少過擬合 增強對特徵和特徵值之間的理解 特徵選擇的目標是尋找最優特徵子集。特徵...
特徵選擇 常見方法總結
特徵選擇方法 目的 減少特徵數量 降維,使模型泛化能力更強,減少過擬合增強對特徵和特徵值之間的理解 方法 一 方差選擇法。from sklearn.feature selection import variancethreshold a.特徵值需為離散型變數,若是連續型,需要連續變數離散化。b.最簡...
特徵選擇方法
特徵獲取過程 特徵獲取定義的角度 特徵獲取要解決的兩個問題 啟發式方法為一種近似演算法,具有很強的主觀傾向。隨機方法是一種相對較新的方法,細分為完全隨機方法和概率隨機方法兩種。總的說來,上述三類中只有窮舉法能保證最優,但耗時並且計算複雜度很高,後兩者以效能為代價換取簡單 快速的實現,但不能保證最優。...