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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > python >内容正文

python

【Python】特征选择方法

發(fā)布時(shí)間:2025/3/21 python 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【Python】特征选择方法 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

??????特征選擇作用:

1. 減少特征數(shù)量、降維,加強(qiáng)模型的泛化能力,減少過(guò)擬合

2. 增強(qiáng)對(duì)特征和特征值之間的理解

特征選擇方法:

Pearson相關(guān)系數(shù)——單變量選擇

該方法衡量變量之間的線性相關(guān)性,取值范圍為【-1,1】、

-1表示完全負(fù)相關(guān);0表示完全沒(méi)有線性關(guān)系;+1表示完全正相關(guān)。

優(yōu)點(diǎn):速度快,易于計(jì)算

缺點(diǎn):只能衡量線性相關(guān)性

Python代碼:使用scipy.stats的 pearsonr函數(shù):

import numpy as np from scipy.stats import pearsonrnp.random.seed(0) size = 300 x = np.random.normal(0, 1, size) y = x + np.random.normal(0, 1, size) print("Pearsonr", pearsonr(x, y))

隨機(jī)森林回歸——單變量選擇

思路:直接使用機(jī)器學(xué)習(xí)算法針對(duì)每個(gè)單獨(dú)的特征和因變量建立預(yù)測(cè)模型。

Python代碼:

import numpy as np from sklearn.model_selection import KFold,cross_val_score,ShuffleSplit from sklearn.datasets import load_boston from sklearn.ensemble import RandomForestRegressor#Load boston housing dataset as an example boston = load_boston() X = boston["data"] Y = boston["target"] names = boston["feature_names"]rf = RandomForestRegressor(n_estimators=20, max_depth=4) scores = [] for i in range(X.shape[1]):score = cross_val_score(rf, X[:, i:i+1], Y, scoring="r2",cv=ShuffleSplit(len(X), 3, .3))scores.append((round(np.mean(score), 3), names[i])) print(sorted(scores, reverse=True))

其中,RandomForestRegressor函數(shù)就是隨機(jī)森林回歸算法,從sklearn.ensemble庫(kù)中調(diào)用;函數(shù)為:

classsklearn.ensemble.RandomForestClassifier(n_estimators=10, criterion='gini', max_depth=None,min_samples_split=2, min_samples_leaf=1, min_weight_fraction_leaf=0.0,max_features='auto', max_leaf_nodes=None, min_impurity_split=1e-07,bootstrap=True, oob_score=False, n_jobs=1, random_state=None, verbose=0,warm_start=False, class_weight=None)
  • n_estimators:?也就是弱學(xué)習(xí)器的最大迭代次數(shù),或者說(shuō)最大的弱學(xué)習(xí)器的個(gè)數(shù),默認(rèn)是10。一般來(lái)說(shuō)n_estimators太小,容易欠擬合,n_estimators太大,又容易過(guò)擬合,一般選擇一個(gè)適中的數(shù)值。對(duì)Random Forest來(lái)說(shuō),增加“子模型數(shù)”(n_estimators)可以明顯降低整體模型的方差,且不會(huì)對(duì)子模型的偏差和方差有任何影響。模型的準(zhǔn)確度會(huì)隨著“子模型數(shù)”的增加而提高,由于減少的是整體模型方差公式的第二項(xiàng),故準(zhǔn)確度的提高有一個(gè)上限。在實(shí)際應(yīng)用中,可以以10為單位,考察取值范圍在1至201的調(diào)參情況。
  • 對(duì)比,Random Forest的子模型都擁有較低的偏差,整體模型的訓(xùn)練過(guò)程旨在降低方差,故其需要較少的子模型(n_estimators默認(rèn)值為10)且子模型不為弱模型(max_depth的默認(rèn)值為None);Gradient Tree Boosting的子模型都擁有較低的方差,整體模型的訓(xùn)練過(guò)程旨在降低偏差,故其需要較多的子模型(n_estimators默認(rèn)值為100)且子模型為弱模型(max_depth的默認(rèn)值為3)。

此處參考https://blog.csdn.net/chaochaopang0/article/details/78604014

cross_val_score函數(shù)是做K折交叉驗(yàn)證,函數(shù)體為: sklearn.model_selection.cross_val_score(estimator, X, y=None, groups=None, scoring=None, cv=’warn’, n_jobs=None, verbose=0, fit_params=None, pre_dispatch=‘2*n_jobs’, error_score=’raise-deprecating’) 參數(shù):estimator: 需要使用交叉驗(yàn)證的算法 X: 輸入樣本數(shù)據(jù) y: 樣本標(biāo)簽 groups: 將數(shù)據(jù)集分割為訓(xùn)練/測(cè)試集時(shí)使用的樣本的組標(biāo)簽(一般用不到) scoring: 交叉驗(yàn)證最重要的就是他的驗(yàn)證方式,選擇不同的評(píng)價(jià)方法,會(huì)產(chǎn)生不同的評(píng)價(jià)結(jié)果。具體如下:

?ShuffleSplit函數(shù)是用來(lái)劃分?jǐn)?shù)據(jù)集的,用于將樣本集合隨機(jī)“打散”后劃分為訓(xùn)練集、測(cè)試集(可理解為驗(yàn)證集,下同),類申明如下:

class sklearn.model_selection.ShuffleSplit(n_splits=10, test_size=’default’, train_size=None, random_state=None)
  • n_splits:int, 劃分訓(xùn)練集、測(cè)試集的次數(shù),默認(rèn)為10
  • test_size:float, int, None, default=0.1; 測(cè)試集比例或樣本數(shù)量,該值為[0.0, 1.0]內(nèi)的浮點(diǎn)數(shù)時(shí),表示測(cè)試集占總樣本的比例;該值為整型值時(shí),表示具體的測(cè)試集樣本數(shù)量;train_size不設(shè)定具體數(shù)值時(shí),該值取默認(rèn)值0.1,train_size設(shè)定具體數(shù)值時(shí),test_size取剩余部分
  • train_size:float, int, None; 訓(xùn)練集比例或樣本數(shù)量,該值為[0.0, 1.0]內(nèi)的浮點(diǎn)數(shù)時(shí),表示訓(xùn)練集占總樣本的比例;該值為整型值時(shí),表示具體的訓(xùn)練集樣本數(shù)量;該值為None(默認(rèn)值)時(shí),訓(xùn)練集取總體樣本除去測(cè)試集的部分
  • random_state:int, RandomState instance or None;隨機(jī)種子值,默認(rèn)為None

注意:

1. 樹(shù)的深度不要過(guò)大

2. 最好用交叉驗(yàn)證

遞歸特征消除法

遞歸特征消除的主要思想是反復(fù)的構(gòu)建模型(如SVM或者回歸模型)然后選出最好的(或者最差的)的特征(可以根據(jù)系數(shù)來(lái)選),把選出來(lái)的特征放到一遍,然后在剩余的特征上重復(fù)這個(gè)過(guò)程,直到所有特征都遍歷了。這個(gè)過(guò)程中特征被消除的次序就是特征的排序。因此,這是一種尋找最優(yōu)特征子集的貪心算法。

RFE的穩(wěn)定性很大程度上取決于在迭代的時(shí)候底層用哪種模型。例如,假如RFE采用的普通的回歸,沒(méi)有經(jīng)過(guò)正則化的回歸是不穩(wěn)定的,那么RFE就是不穩(wěn)定的;假如采用的是Ridge,而用Ridge正則化的回歸是穩(wěn)定的,那么RFE就是穩(wěn)定的。

Sklearn提供了RFE包,可以用于特征消除,還提供了RFECV,可以通過(guò)交叉驗(yàn)證來(lái)對(duì)的特征進(jìn)行排序。

引用自https://mp.weixin.qq.com/s/8LMRVcxZsuJGXbj4AF-MIg

import numpy as np from sklearn.datasets import load_boston from sklearn.feature_selection import RFE from sklearn.linear_model import LinearRegressionboston = load_boston() X = boston["data"] Y = boston["target"] names = boston["feature_names"]#use linear regression as the model lr = LinearRegression() #rank all features, i.e continue the elimination until the last one rfe = RFE(lr, n_features_to_select=1) rfe.fit(X,Y)print("Features sorted by their rank:") print(sorted(zip(map(lambda x: round(x, 4), rfe.ranking_), names)))

?穩(wěn)定性選擇(Stability selection)

穩(wěn)定性選擇是一種基于二次抽樣和選擇算法相結(jié)合較新的方法,選擇算法可以是回歸、SVM或其他類似的方法。它的主要思想是在不同的數(shù)據(jù)子集和特征子集上運(yùn)行特征選擇算法,不斷的重復(fù),最終匯總特征選擇結(jié)果,比如可以統(tǒng)計(jì)某個(gè)特征被認(rèn)為是重要特征的頻率(被選為重要特征的次數(shù)除以它所在的子集被測(cè)試的次數(shù))。理想情況下,重要特征的得分會(huì)接近100%。稍微弱一點(diǎn)的特征得分會(huì)是非0的數(shù),而最無(wú)用的特征得分將會(huì)接近于0。

sklearn在隨機(jī)lasso和隨機(jī)邏輯回歸中有對(duì)穩(wěn)定性選擇的實(shí)現(xiàn)。

from sklearn.linear_model import RandomizedLasso from sklearn.datasets import load_boston boston = load_boston()#using the Boston housing data. #Data gets scaled automatically by sklearn's implementation X = boston["data"] Y = boston["target"] names = boston["feature_names"]rlasso = RandomizedLasso(alpha=0.025) rlasso.fit(X, Y)print "Features sorted by their score:" print sorted(zip(map(lambda x: round(x, 4), rlasso.scores_), names), reverse=True)

穩(wěn)定性選擇對(duì)于克服過(guò)擬合和對(duì)數(shù)據(jù)理解來(lái)說(shuō)都是有幫助的:總的來(lái)說(shuō),好的特征不會(huì)因?yàn)橛邢嗨频奶卣鳌㈥P(guān)聯(lián)特征而得分為0。對(duì)于特征選擇任務(wù),在許多數(shù)據(jù)集和環(huán)境下,穩(wěn)定性選擇往往是性能最好的方法之一。

PS.?

1. 數(shù)據(jù)預(yù)處理:去掉變化較小的特征:

例如,某特征的特征值只有0和1,在所有輸入樣本中,95%的特征取值為1,認(rèn)為該特征作用不大。此時(shí)應(yīng)該去掉該特征。

參考資料:https://www.cnblogs.com/hhh5460/p/5186226.html

總結(jié)

以上是生活随笔為你收集整理的【Python】特征选择方法的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。