使用scikit-learn進行特徵選擇

2021-01-14 藍鯨的商業分析筆記

scikit-learn中提供了用於特徵選擇的模塊feature_selection,主要方法包括方差移除法,卡方檢驗法,基於L1的特徵選擇和基於樹的特徵選擇。

 

開始前的準備工作

首先導入所需的庫文件,這裡只導入numpy和pandas,後面在過程中會陸續導入所需的庫文件。


#導入所需的庫文件

import numpy as np

import pandas as pd


#讀取並設置數據表

data=pd.DataFrame(pd.read_excel('fs.xlsx'))

#設置特徵和目標

X = np.array(data[['loan_amnt', 'funded_amnt_inv', 'installment', 'annual_inc', 'dti','inq_last_6mths', 'open_acc', 'revol_bal', 'revol_util', 'total_acc','total_pymnt', 'total_rec_prncp', 'total_rec_int']])

y = np.array(data['loan_status'])


特徵數據標準化

導入數據預處理庫對特徵進行標準化處理。


#導入數據預處理庫

from sklearn import preprocessing

#範圍0-1縮放標準化

min_max_scaler = preprocessing.MinMaxScaler()

X_scaler=min_max_scaler.fit_transform(X)

#查看特徵的維度

X_scaler.shape

(27, 13)


原始特徵的維度為27行,13列。


移除方差較低的特徵

導入特徵選擇庫中的VarianceThreshold用於通過方差選擇特徵。方差為0的特徵會被自動移除。剩下的特徵按設定的方差的閾值進行選擇。


#導入sklearn庫中的VarianceThreshold 

from sklearn.feature_selection import VarianceThreshold

#設置方差的閾值為0.8

sel = VarianceThreshold(threshold=.08)

#選擇方差大於0.8的特徵

X_sel=sel.fit_transform(X_scaler)

X_sel.shape

(27, 5)


單變量特徵選擇-卡方檢驗

導入特徵選擇庫中的SelectKBest和chi2用來計算特徵與結果間的相關性,並選擇相關性最高的特徵。


#導入sklearn庫中的SelectKBest和chi2

from sklearn.feature_selection import SelectKBest ,chi2

#選擇相關性最高的前5個特徵

X_chi2 = SelectKBest(chi2, k=5).fit_transform(X, y)

X_chi2.shape

(27, 5)


基於L1的特徵選擇

導入LinearSVC和特徵選擇庫中的SelectFromModel,基於L1進行特徵選擇。


#導入sklearn庫中的LinearSVC和SelectFromModel

from sklearn.svm import LinearSVC

from sklearn.feature_selection import SelectFromModel

#基於L1的LinearSVC選擇特徵

lsvc = LinearSVC(C=0.01, penalty="l1", dual=False).fit(X_scaler, y)

model = SelectFromModel(lsvc, prefit=True)

X_lsvc = model.transform(X_scaler)

X_lsvc.shape

(27, 0)


基於樹的特徵選擇

導入SelectFromModel結合ExtraTreesClassifier計算特徵重要性,並按重要性閾值選擇特徵。


#導入sklearn的ExtraTreesClassifier和SelectFromModel

from sklearn.ensemble import ExtraTreesClassifier

from sklearn.feature_selection import SelectFromModel

#基於樹模型進行模型選擇

clf = ExtraTreesClassifier()

clf = clf.fit(X, y)

#特徵重要性(數值越高特徵越重要)

clf.feature_importances_

array([ 0.09125597,  0.08141056,  0.04023573,  0.06036499,  0.05710406,

        0.04654329,  0.00897838,  0.07429618,  0.09712373,  0.07771509,

        0.18477631,  0.10875497,  0.07144073])


#選擇特徵重要性為1.25倍均值的特徵

model = SelectFromModel(clf, threshold='1.25*mean',prefit=True)

#返回所選的特徵

X_trees = model.transform(X)

X_trees.shape

(27, 6)


END


相關焦點

  • Python機器學習5:使用scikit-learn實現三種集成學習Bagging算法
    這三種算法的大致含義為:Bagging:將多種無依賴的弱學習器進行綜合,形成一個強學習器。Boosting: 將多種有相互依賴的弱學習器進行綜合,形成一個強學習器。Majority Voting:通過投票機制,綜合多個弱學習器的預測結果,選擇投票最多的預測結果。在這篇文章中,將主要講解Bagging算法的常見三種模型,並介紹如何使用scikit-learn實現這三種模型。
  • 開源機器學習框架:Scikit-learn API簡介
    目前Scikit-learn已經實現的算法包括:K-均值聚類,譜聚類,均值偏移,分層聚類,DBSCAN聚類等。數據降維:是指使用主成分分析(PCA)、非負矩陣分解(NMF)或特徵選擇等降維技術來減少要考慮的隨機變量的個數,其主要應用場景包括可視化處理和效率提升。
  • Scikit-learn玩得很熟了?這些功能你都知道嗎?
    接下來本文將列舉幾個scikit-learn庫中鮮為人知的方法或接口。管道(Pipeline)這可以用來將多個估計量鏈化合一。因為在處理數據時,通常有著一系列固定的步驟,比如特徵選擇、歸一化和分類,此時這個方法將非常有用。
  • 如何在Apache Pyspark中運行Scikit-learn模型
    在本文中,我們將了解如何在Apache Pyspark中運行Scikit-learn模型,並討論有關每個步驟的細節。如果您已經準備好了機器學習模型,則可以直接跳到「 pyspark wrapper」部分,也可以通過以下步驟創建一個簡單的scikit learn機器學習模型。
  • CDA承接的全球頂級機器學習Scikit-learn 中文社區上線啦!
    (注:scikit-learn的官網是www.scikit-learn.org,CDA承接的中文社區網址是www.scikit-learn.org.cn,這同時也標誌著CDA與全球頂級深度學習和機器學習框架更進一步融合,CDA認證更加得到全球頂級技術框架的認可!
  • 利用Spark 和 scikit-learn 將你的模型訓練加快 100 倍
    當我們使用 Spark 進行數據處理時,我們首選的機器學習框架是 scikit-learn。隨著計算機變得越來越便宜,機器學習解決方案的上市時間變得越來越關鍵,我們探索了加快模型訓練的各種方法。其中一個解決方案是將 Spark 和 scikit-learn 中的元素組合到我們自己的混合解決方案中。
  • Python粉都應該知道的開源機器學習框架:Scikit-learn入門指南
    目前Scikit-learn已經實現的算法包括:K-均值聚類,譜聚類,均值偏移,分層聚類,DBSCAN聚類等。數據降維是指使用主成分分析(PCA)、非負矩陣分解(NMF)或特徵選擇等降維技術來減少要考慮的隨機變量的個數,其主要應用場景包括可視化處理和效率提升。
  • WePay機器學習反欺詐實踐:Python+scikit-learn+隨機森林
    他們常常使用各種各樣的技術來隱藏自己的身份和逃避偵測。由於shellselling是一個普遍的難題,而且很難被發現,所以我們決定建立一個機器學習算法來幫助抓住它。構建機器學習算法注意事項在WePay,我們採用Python建立整個機器學習的流程,採用流行的scikit-learn開源學習機器學習工具包。
  • Scikit-Learn 學得如何?程式設計師不容錯過十大實用功能來襲
    擁有內置的特徵選擇方法提高模型性能的技術之一是僅使用最佳特徵集或通過刪除冗餘特徵來訓練模型。此過程稱為特徵選擇。Scikit-learn擁有許多執行特徵選擇的函數。例如SelectPercentile()。這個方法能夠根據特定的統計方法選擇得分最高的X百分位數特徵。
  • 機器學習的特徵選擇方法要如何選取?
    在本文中,您將發現如何為統計數據和分類數據選擇統計度量,以進行基於過濾器的特徵選擇。閱讀這篇文章後,您將知道:特徵選擇技術主要有兩種類型:包裝器和過濾器方法。基於過濾器的特徵選擇方法使用統計量度對可以過濾以選擇最相關特徵的輸入變量之間的相關性或依賴性進行評分。必須根據輸入變量和輸出或響應變量的數據類型仔細選擇用於特徵選擇的統計量度。
  • 使用Scikit-Learn了解決策樹分類
    創建一個管道,並使用GridSearchCV為分類任務選擇最佳參數。決策樹決策樹(以下簡稱DT)算法的思想是學習一組if/else問題來進行決策。決策樹可以組合數值數據和分類數據。建立決策樹時,我們的想法是選擇具有最少Gini雜質的特徵作為根節點,依此類推。在這裡,我們看到根據4個特徵(Outlook, Temperature, Humidity, Wind),決定是否打網球。那麼根節點將是什麼特徵呢?這將使用基尼雜質。讓我們從「 Outlook」特徵開始。重要的是要注意,當「 Outlook」是overcast時,結果總是Yes。
  • 以鳶尾花數據集為例,用Python對決策樹進行分類
    · 分類樹如何進行預測· 如何使用scikit-learn(Python)製作分類樹· 超參數調整現在,讓我們開始吧!什麼是分類樹?樹深度可以衡量在進行預測之前可以進行多少次分裂。這個過程可以繼續進行更多分裂,直到樹儘可能純淨。分裂過程中的大量重複可能會導致形成擁有很多節點的分類樹。通常會導致訓練數據集過度擬合。幸運的是,實現大多數分類樹支持預剪枝來控制樹的最大深度,從而減少過度擬合。例如,Python的scikit-learn就支持預剪枝。換句話說,你可以設置最大深度以防止決策樹過深。為直觀了解最大深度,可以查看下圖。
  • 使用python+sklearn實現概率PCA和因子分析進行模型選擇
    概率PCA和因子分析都是概率模型,新數據的似然性(likelihood)可用於模型選擇和協方差估計
  • 超參數調整實戰:scikit-learn配合XGBoost的競賽top20策略
    我們將在Hacker Earth挑戰的數據集上使用scikit-learn配合XGBoost。以下我使用的全部代碼。我排除了分析部分和數據處理部分,因為這不是本文的目標。xgb_pipeline, param_distributions=params, n_iter=100, scoring='f1_weighted', n_jobs=4, verbose=3, random_state=1001 )random_search.fit(X_train,y_train)當我們使用
  • 一文概述用 python 的 scikit-image 模塊進行圖像分割
    近日,工程師 Parul Pandey 發表了一篇博文,在博文中,她介紹了用 python 的 scikit-image 庫進行圖像分割的方法。具體涉及 scikit-image 的安裝,圖像導入以及用監督算法和無監督算法進行圖像分割的方法。雷鋒網 AI 科技評論編譯整理如下。
  • 神經網絡初學者指南:基於Scikit-Learn的Python模塊
    Scikit-learn 在 Python 中設置神經網絡的方法,其最新版本現在已經內置支持神經網絡模型。| 數據我們將使用 SciKit Learn 內置的乳腺癌數據集,如果具有腫瘤特徵的樣本均會被標記,並顯示腫瘤為惡性還是良性。 我們將嘗試創建一個神經網絡模型,它可以理解腫瘤的特點,並嘗試預測。讓我們繼續進行,從獲取數據開始吧!這個對象就像字典一樣,包含著數據的描述信息,特點及目標:
  • 在機器學習回歸問題中,你應該使用哪種評估指標?
    如果你像我一樣,你可能會在你的回歸問題中使用R平方(R平方)、均方根誤差(RMSE)和均方根誤差(MAE)評估指標,而不用考慮太多。儘管它們都是通用的度量標準,但在什麼時候使用哪一個並不明顯。R方(R)R代表模型所解釋的方差所佔的比例。R是一個相對度量,所以您可以使用它來與在相同數據上訓練的其他模型進行比較。
  • 如何用Python計算機器學習中特徵的重要程度?
    特徵重要性可用於改進預測模型可以使用的重要性得分來選擇要刪除的特徵(最低得分)或要保留的特徵(最高得分)。這是一種特徵選擇,可以簡化正在建模的問題,加快建模過程(刪除特徵稱為降維),在某些情況下,還可以改善模型的性能。
  • 拓撲機器學習的神聖三件套:Gudhi,Scikit-Learn和Tensorflow(附...
    所以TDA真的儲存了一組你不可能在其他地方找到的數據特徵。現實情況是這類特徵已被證明對提升機器學習預測能力很有用,所以如果你以前還沒見過或聽過這類特徵,我來帶你快速了解一下。我已經寫過很多這個主題的文章,你可以在Medium找到關於TDA的很多其他帖子,所以我不打算浪費時間在數學定義上面,而是通過解釋TDA文獻中的典型例子,來展示如何在你的數據集上應用TDA。