日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【sklearn学习】特征选择

發布時間:2023/12/15 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【sklearn学习】特征选择 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Filter過濾法

過濾方法通常用作預處理步驟根據各種統計檢驗分數或者各項指標來選擇特征

  • 方差過濾

sklearn.feature_selection.VarianceThreshold

通過特征本身的方差來篩選特征的類,比如一個特征本身的方差很小,可能特征中大多數值都一樣,那么這個特征對于樣本的區分沒有什么作用,所以要優先消除方差為0的特征。

VarianceThreshold的參數threshold表示方差的閾值,表示舍棄所有方差小于threshold的特征

>>> from sklearn.feature_selection import VarianceThreshold >>> X = [[0, 2, 0, 3], [0, 1, 4, 3], [0, 1, 1, 3]] >>> selector = VarianceThreshold() >>> selector.fit_transform(X) array([[2, 0],[1, 4],[1, 1]])

過濾法的應用是需要遍歷特征或提升維度的算法,如決策樹、KNN、SVM、神經網絡、回歸算法

過濾法的主要目的是在維持算法表現得前提下,幫助算法降低計算成本

通常情況下,會使用閾值為0或者閾值很小得方差過濾,優先消除明顯用不到得特征,然后用更優得特征選擇方法繼續削減特征數量。

  • 相關性過濾

判斷特征和標簽之間的相關性:卡方、F檢驗、互信息

sklearn.feature_selection.chi2

按照卡方統計量由高到低為特征排名,選出前K個分數最高得特征得類

from sklearn.feature_selection import chi2 from sklearn.feature_selection import SelectKBestX_fschi = SelectKBest(chi2, k=300).fit_transform(X_fsvar, y)sklearn.feature_selection.chi2(X, y)

卡方檢驗得本質是推測兩組數據之間的差異,返回卡方值和p值兩個統計量

,卡方值難以界定有效范圍,一般使用p=0.01或0.05作為顯著性水平

  • F檢驗

sklearn.feature_selection.f_classif

F檢驗分類用于標簽是離散型的數據,F檢驗回歸用于標簽是連續型的數據

需要和類selectKBest連用,在數據服從正態分布時效果會非常穩定

from sklearn.feature_selection import SelectKBest, f_classif from sklearn.pipeline import make_pipeline from sklearn.svm import LinearSVCanova_filter = SelectKBest(f_classif, k=3) clf = LinearSVC() anova_svm = make_pipeline(anova_filter, clf) anova_svm.fit(X_train, y_train)
  • 互信息法

sklearn.feature_selection.mutual_info_classif

F檢驗只能找出線性關系,而互信息可以找出任意關系

互信息法不返回統計量,它返回“每個特征與目標之間的互信息量的估計”,0表示兩個變量獨立,1表示兩個變量完全相關。

from sklearn.feature_selection import mutual_info_calssif as MIC result = MIC(X_fsvar, y) k = result.shape[0] - sum(result <=0)
說明超參數的選擇
VarianceThreshold方差過濾,可輸入方差閾值,返回方差大于閾值的新特征矩陣使用0或1來篩選,畫學習曲線或中位數
SelectKBest選取K個統計量姐夫哦最佳的特征,生成符合統計量要求的新特征矩陣
chi卡方檢驗,專用于分類算法追求p小于顯著性水平的特征
f_classifF檢驗分類,捕捉線性相關性,要求數據服從正態分布追求p小于顯著性水平的特征
f_regressionF檢驗回歸,捕捉線性相關性,要求數據服從正態分布追求p小于顯著性水平的特征
mutual_ifo_classif互信息分類,捕捉任何相關性,不能用于稀疏矩陣追求互信息估計大于0的特征
mutual_info_regression互信息分類,捕捉任何相關性,不能用于稀疏矩陣追求互信息估計大于0的特征

  • Embedded嵌入法

嵌入法讓算法自己決定使用哪些特征,即特征選擇和算法訓練同時進行,先使用機器學習的算法和模型進行訓練,得到各個特征的權值系數,根據權值系數從大到小選擇

比如決策樹和隨機森林中的feature-importances,返回各個特征對樹的建立的貢獻。

無關的特征和無區分度的特征,會因為對模型缺乏貢獻,直接被刪除掉

  • feature_selection.SelectFromModel

class?sklearn.feature_selection.SelectFromModel(estimator,?*,?threshold=None,?prefit=False,?norm_order=1,?max_features=None,?importance_getter='auto')

>>> from sklearn.feature_selection import SelectFromModel >>> from sklearn.linear_model import LogisticRegression >>> X = [[ 0.87, -1.34, 0.31 ], ... [-2.79, -0.02, -0.85 ], ... [-1.34, -0.48, -2.55 ], ... [ 1.92, 1.48, 0.65 ]] >>> y = [0, 1, 0, 1] >>> selector = SelectFromModel(estimator=LogisticRegression()).fit(X, y) >>> selector.estimator_.coef_ array([[-0.3252302 , 0.83462377, 0.49750423]]) >>> selector.threshold_ 0.55245... >>> selector.get_support() array([False, True, False]) >>> selector.transform(X) array([[-1.34],[-0.02],[-0.48],[ 1.48]])
參數說明
estimator使用的模型評估器,帶feature_importances或coef屬性,或者帶懲罰項的模型都可以使用
threshold特征重要性的閾值,重要性低于這個閾值的特征都將被刪除
prefit判斷是否將實例化后的模型直接傳遞給構造函數
norm_order
max_features
from sklearn.feature_selection import SelectFromModel from time import timethreshold = np.sort(importance)[-3] + 0.01tic = time() sfm = SelectFromModel(ridge, threshold=threshold).fit(X, y) toc = time() print(f"Features selected by SelectFromModel: {feature_names[sfm.get_support()]}") print(f"Done in {toc - tic:.3f}s")
  • 包裝法

算法不是用于評估的算法,而是專業的數據挖掘算法,專門用于選取特征,直到最終達到所需數量的要選擇的特征。

典型的目標函數是遞歸特征消除法。

  • feature_selection.RFE

class?sklearn.feature_selection.RFE(estimator,?*,?n_features_to_select=None,?step=1,?verbose=0,?importance_getter='auto')

>>> from sklearn.datasets import make_friedman1 >>> from sklearn.feature_selection import RFE >>> from sklearn.svm import SVR >>> X, y = make_friedman1(n_samples=50, n_features=10, random_state=0) >>> estimator = SVR(kernel="linear") >>> selector = RFE(estimator, n_features_to_select=5, step=1) >>> selector = selector.fit(X, y) >>> selector.support_ array([ True, True, True, True, True, False, False, False, False,False]) >>> selector.ranking_ array([1, 1, 1, 1, 1, 6, 4, 3, 2, 5])

總結

以上是生活随笔為你收集整理的【sklearn学习】特征选择的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。