sklearn第十七講 特徵選擇

2021-08-21 08:12:43 字數 2408 閱讀 6136

sklearn.feature_selection模組裡的類能被用來在樣本集上作特徵選擇、或者叫維數降低,改善估計量的準確性、在高維空間的表現。下面我們介紹幾種常用的特徵選擇方法。

variancethreshold是乙個簡單的特徵選擇基準方法。它刪除所有方差小於某閾值的特徵。預設刪除所有0方差特徵,即,特徵在所有樣本裡有相同的值。舉乙個例子,假設我們有乙個布林特徵資料集,我們想刪除在超過80%的樣本裡值都是1或都是0的特徵。布林特徵是bernoulli型隨機變數,它的方差是

v ar

(x)=

p(1−

p)var(x)=p(1-p)

var(x)

=p(1

−p)因此我們選擇閾值0.8×(

variancethreshold刪除了第一列,這列包含0的概率 p=5

/6>.8

p=5/6>.8

p=5/

6>.8

單變數特徵選擇,是根據單變數的統計學檢驗選擇最好的特徵。它可以視為估計前的預處理步, scikit-learn執行transform方法作特徵選擇。

例如,我們能作乙個樣本的 χ

2\chi^2

χ2檢驗,只選擇兩個最好的特徵。

這些物件取乙個分數函式作為輸入,返回單變數分數和p值。

基於f檢驗的方法可以估計兩個隨機變數的線性關係。另一方面,互資訊的方法能夠捕捉任何型別的統計關係。

給定乙個外部估計量,分派權給特徵(比如說,乙個線性模型的係數)。遞迴特徵排除(recursive feature elimination, rfe), 是遞迴地選擇越來越小的特徵集。首先,在初始特徵集上訓練估計量,由coef_feature_importances_屬性獲得每個特徵的重要性。然後,最不重要的特徵被從當前特徵集中排除。重複特徵排除過程,直到達到想要的特徵數。

rfecv在乙個交叉驗證的迴圈裡作rfe, 找到最優的特徵數。

selectfrommodel是乙個元轉換器,它可以結合任何在擬合後有coef_ and feature_importances_的估計量使用。由引數threshold指定閾值,如果coef_ and feature_importances_的值低於這個閾值,那麼對應的特徵被認為不重要而排除。除了指定閾值,還可以使用乙個字串引數啟發式尋找閾值。可利用的啟發式方法有 「mean」, 「median」, 浮點值乘均值或中位數,例如,「0.1*mean」

l1範數懲罰的線性模型有稀疏解,即,它估計的係數裡很多是0. 當我們的目標是降低資料的維數時,可以配合feature_selection.selectfrommodel選擇這些模型裡的非零係數。特別指出,有用的稀疏估計量有linear_model.lasso回歸、svm.linearsvc分類。

在svm和logistic回歸裡,引數c控制稀疏性,即,c值越小,選擇的特徵就越少。在lasso裡,引數 α

\alpha

α 越大,選擇的特徵越少。

基於樹的估計量能被用來計算特徵重要性,然後丟棄不相關的特徵。

特徵選擇通常作為實際學習前的資料預處理步。在scikit-learn裡,推薦的方法是使用sklearn.pipeline.pipeline:

clf = pipeline([

('feature_selection', selectfrommodel(linearsvc(penalty="l1"))),

('classification', randomforestclassifier())

])clf.fit(x, y)

在以上**片裡,我們使用了sklearn.svm.linearsvcandsklearn.ensemble.randomforestclassifier訓練轉換後的輸出上,即,只使用相關的特徵。你也可以用其它特徵選擇方法,或提供特徵重要性的分類器作類似的操作。

C 銳利體驗 第十七講 異常處理

c 銳利體驗 南京郵電學院李建忠 lijianzhong 263.第十七講異常處理 異常處理 結構化異常處理是現代分布式環境下元件設計的乙個必要的環節,通用語言執行時從底層構造給予異常處理以堅實的支援。在c 中,異常物件被設計為封裝了各種異常資訊的類 system.exception及其繼承子類,和...

第十七周總結

周工作總結及計畫表 部 門 理工大學 姓 名 冉濤 入 職 時 間 2015.7.5 本週已完成工作內容及總結 1 基本完成課程設計要求的三道題目,但還有一些小地方沒有做好,主要是在一些異常處理方面,主要是從控制台輸入時的型別轉換異常,以及gui介面的輸入為空的異常和型別轉換異常。2 課程設計的第四...

JAVA第十七課

一 序列化與反序列化 序列化是將物件的狀態寫入特定的流中的過程 反序列化則是從特定的流中獲取資料重新構建物件的過程 二 實現序列化的步奏 1 實現serilizable介面。2 建立物件輸出流 3 呼叫writeobject 方法將物件寫入檔案 4 關閉物件輸出流 三 常見異常 notseriali...