1. 程式人生 > >【特征選擇】過濾式特征選擇法

【特征選擇】過濾式特征選擇法

ont topk 泛化能力 cccccc 大於 pre 定性 輸出 eat

# 過濾式特征選擇法的原理

使用發散性或相關性指標對各個特征進行評分,選擇分數大於閾值的特征或者選擇前K個分數最大的特征。

# 過濾式特征選擇法的特點

特征選擇過程與學習器無關,相當於先對初始特征進行過濾,再用過濾後的特征訓練學習器。過濾式特征選擇法簡單、易於運行、易於理解,通常對於理解數據有較好的效果,但對特征優化、提高模型泛化能力來說效果一般。

# 常用的過濾式特征選擇法

  • 方差選擇法

使用方差作為特征評分標準,如果某個特征的取值差異不大,通常認為該特征對區分樣本的貢獻度不大,因此在構造特征過程中去掉方差小於閾值的特征。註意:

方差選擇法適用於離散型特征,連續型特征需要須離散化後使用;方差較小的特征很少,方差選擇法簡單但不好用,一般作為特征選擇的預處理步驟,先去掉方差較小的特征,然後使用其他特征選擇方法選擇特征。

# -*- coding: utf-8 -*-
# 載入數據
from sklearn.datasets import load_iris
iris = load_iris()
print("iris特征名稱\n",iris.feature_names)
print("iris特征矩陣\n",iris.data)

# 特征選擇--方差選擇法
from sklearn.feature_selection import VarianceThreshold
vt 
= VarianceThreshold(threshold = 1) # threshold為方差的閾值,默認0 vt = vt.fit_transform(iris.data) # 函數返回值為特征選擇後的特征 print("方差選擇法選擇的特征\n",vt)
  • 卡方檢驗法(分類問題)

使用統計量卡方檢驗作為特征評分標準,卡方檢驗值越大,相關性越強(卡方檢驗是評價定性自變量對定性因變量相關性的統計量)

# -*- coding: utf-8 -*-
# 載入數據
from sklearn.datasets import load_iris
iris = load_iris()

# 特征選擇
from sklearn.feature_selection import SelectKBest # 移除topK外的特征 from sklearn.feature_selection import chi2 # 卡方檢驗 skb = SelectKBest(chi2,k=2) new_data = skb.fit_transform(iris.data,iris.target)
  • 皮爾森相關系數法法(回歸問題)

使用pearson系數作為特征評分標準,相關系數絕對值越大,相關性越強(相關系數越接近於1或-1時,相關性越強;相關系數越接近於0時,相關性越弱)。

# -*- coding: utf-8 -*-
# 載入數據
from sklearn.datasets import load_iris
irisdata = load_iris()

# 特征選擇(pearson相關系數法)
from sklearn.feature_selection import SelectKBest  # 移除topK外的特征
from scipy.stats import pearsonr                   # 計算皮爾森相關系數
from numpy import array

"""
# 函數返回值:保留topk特征,移除topk外特征
# 第一個參數:皮爾森相關系數(輸入特征矩陣和目標向量,輸出二元組(評分,P),二數組第i項為第i個特征的評分和p值
# 第二個參數:topK個數
"""
skb = SelectKBest(lambda X, Y: tuple(map(tuple,array(list(map(lambda x:pearsonr(x, Y), X.T))).T)), k=3)
skb = skb.fit_transform(irisdata.data, irisdata.target)

【特征選擇】過濾式特征選擇法