特徵選取1-from sklearn.feature_selection import SelectKBest

 


轉載:https://www.zhihu.com/question/28641663/answer/41653367
特徵選擇是特徵工程中的重要問題(另外一個重要的問題是特徵提取),坊間常說:數據和特徵決定了機器學習的上限,而模型和算法只是逼近這個上限而已。因而可知,特徵工程尤爲是特徵選擇在機器學習中佔有至關重要的地位。
一般而言,特徵選擇是指選擇得到相應模型和算法最好性能的特徵集,工程上經常使用的方法有如下:
1. 計算每個特徵與響應變量的相關性:工程上經常使用的手段有計算皮爾遜係數和互信息係數,皮爾遜係數只能衡量線性相關性而互信息係數可以很好地度量各類相關性,可是計算相對複雜一些,好在不少toolkit裏邊都包含了這個工具(如sklearn的MINE),獲得相關性以後就能夠排序選擇特徵了;
2. 構建單個特徵的模型,經過模型的準確性爲特徵排序,藉此來選擇特徵,另外,記得JMLR'03上有一篇論文介紹了一種基於決策樹的特徵選擇方法,本質上是等價的。當選擇到了目標特徵以後,再用來訓練最終的模型;
3. 經過L1正則項來選擇特徵:L1正則方法具備稀疏解的特性,所以自然具有特徵選擇的特性,可是要注意,L1沒有選到的特徵不表明不重要,緣由是兩個具備高相關性的特徵可能只保留了一個,若是要肯定哪一個特徵重要應再經過L2正則方法交叉檢驗;
4. 訓練可以對特徵打分的預選模型:RandomForest和Logistic Regression等都能對模型的特徵打分,經過打分得到相關性後再訓練最終模型;
5. 經過特徵組合後再來選擇特徵:如對用戶id和用戶特徵最組合來得到較大的特徵集再來選擇特徵,這種作法在推薦系統和廣告系統中比較常見,這也是所謂億級甚至十億級特徵的主要來源,緣由是用戶數據比較稀疏,組合特徵可以同時兼顧全局模型和個性化模型,這個問題有機會能夠展開講。
6. 經過深度學習來進行特徵選擇:目前這種手段正在隨着深度學習的流行而成爲一種手段,尤爲是在計算機視覺領域,緣由是深度學習具備自動學習特徵的能力,這也是深度學習又叫 unsupervised feature learning的緣由。從深度學習模型中選擇某一神經層的特徵後就能夠用來進行最終目標模型的訓練了。
總體上來講,特徵選擇是一個既有學術價值又有工程價值的問題,目前在研究領域也比較熱,值得全部作機器學習的朋友重視。

 

http://blog.csdn.net/ae5555/article/details/49534263python

去除方差小的特徵

設置一個方差閾值,沒有達到這個方差閾值的特徵都會被丟棄。 
VarianceThreshold,算法輸入只要求特徵(X),不須要輸入結果(Y)。算法

from sklearn.feature_selection import VarianceThreshold 
X=[[feature1,feature2,…],…] 
sel=VarianceThreshold(threshold=xx) 
print(sel.fit_transform(X))數組

單變量特徵選取

單變量特徵提取的原理是分別計算每一個特徵的某個統計指標,根據該指標來選取特徵。 
SelectKBest、SelectPercentile,前者選擇排名前k個的特徵,後者選擇排名在前k%的特徵。選擇的統計指標須要指定,對於regression問題,使用f_regression指標;對於classification問題,可使用chi2或者f_classif指標。markdown

from sklearn.feature_selection import SelectKBest,chi2 
X_new=SelectKBest(chi2,k=2).fit_transform(test_X,test_Y)dom

  1. False Positive Rate,假陽性率
  2. chi2,卡方統計量,X中特徵取值必須非負。卡方檢驗用來測度隨機變量之間的依賴關係。經過卡方檢驗獲得的特徵之間是最可能獨立的隨機變量,所以這些特徵的區分度很高。
循環特徵選取

不單獨地檢驗某個特徵的價值,而是檢驗特徵集的價值。對於一個數量爲n的特徵集合,子集的個數爲2的n次方減一。經過指定一個學習算法,經過算法計算全部子集的error,選擇error最小的子集做爲選取的特徵。機器學習

RFE

 


  1. 對初始特徵集合中每一個特徵賦予一個初始權重。
  2. 訓練,將權重最小的特徵移除。
  3. 不斷迭代,直到特徵集合的數目達到預約值。 

 

from sklearn.svm import SVC 
from sklearn.feature_selection import RFE 
//X爲樣本集合,每一個樣本爲一個數組,數組元素爲各個特徵值,Y樣本的評分 
svc=SVC(kernel=」linear」,C=1) 
rfe=RFE(estimator=svc,n_features_to_select=5,step=1) 
X_new=rfe.fit_transform(X,Y)
RFECV

在RFE訓練時,增長交叉驗證。ide

L1-base

在線性迴歸模型中,每個特徵表明一個w,若獲得的w係數等於或接近0,則說明這些特徵不重要。 
LinearSVC 
參數C控制特徵係數稀疏度,C的值越小,選擇的特徵數越少。工具

from sklearn.svm import LinearSVC 
X_new=LinearSVC(C=0.01,penalty=」l1」,dual=False).fit_transform(x,y)post

決策樹特徵選取

經過決策樹能夠計算特徵的重要性,拋棄不過重要的特性。性能

from sklearn.ensemble import ExtraTreesClassifier 
clf=ExtraTreesClassifier() 
X_new=clf.fit(x,y).transform(x) 
//各個特徵重要性 
print(clf.feature_importances)

sklearn分類數據

sklearn.datasets.make_classification用來隨機產生一個多分類問題。 
n_features=n_informative+n_redundant+n_repeated。 
n_clusters_per_class 每一個分類的集羣數

import sklearn.datasets 
(x,y)=make_classification(n_samples=, 
n_features=, 
n_informative=, 
n_redundant=, 
n_repeated=, 
n_classes=, 
random_state=, 
shuffle=False 
)

 

 

 

 https://study.163.com/provider/400000000398149/index.htm?share=2&shareId=400000000398149( 歡迎關注博主主頁,學習python視頻資源,還有大量免費python經典文章)


相關文章
相關標籤/搜索