久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

特征工程系列:特征篩選的原理與實(shí)現(xiàn)

 挑燈看劍r7wtm5 2019-07-28

【轉(zhuǎn)】datawhale

0x00 前言

數(shù)據(jù)和特征決定了機(jī)器學(xué)習(xí)的上限,而模型和算法只是逼近這個(gè)上限而已。由此可見(jiàn),,特征工程在機(jī)器學(xué)習(xí)中占有相當(dāng)重要的地位,。在實(shí)際應(yīng)用當(dāng)中,可以說(shuō)特征工程是機(jī)器學(xué)習(xí)成功的關(guān)鍵,。

那特征工程是什么,?

特征工程是利用數(shù)據(jù)領(lǐng)域的相關(guān)知識(shí)來(lái)創(chuàng)建能夠使機(jī)器學(xué)習(xí)算法達(dá)到最佳性能的特征的過(guò)程,。

特征工程又包含了Feature Selection(特征選擇),、Feature Extraction(特征提?。┖虵eature construction(特征構(gòu)造)等子問(wèn)題,本章內(nèi)容主要討論特征選擇相關(guān)的方法及實(shí)現(xiàn),。

在實(shí)際項(xiàng)目中,,我們可能會(huì)有大量的特征可使用,有的特征攜帶的信息豐富,,有的特征攜帶的信息有重疊,,有的特征則屬于無(wú)關(guān)特征,如果所有特征不經(jīng)篩選地全部作為訓(xùn)練特征,,經(jīng)常會(huì)出現(xiàn)維度災(zāi)難問(wèn)題,,甚至?xí)档湍P偷臏?zhǔn)確性。因此,,我們需要進(jìn)行特征篩選,,排除無(wú)效/冗余的特征,把有用的特征挑選出來(lái)作為模型的訓(xùn)練數(shù)據(jù),。

0x01 特征選擇介紹

1.特征按重要性分類

  • 相關(guān)特征:
  • 對(duì)于學(xué)習(xí)任務(wù)(例如分類問(wèn)題)有幫助,,可以提升學(xué)習(xí)算法的效果;
  • 無(wú)關(guān)特征:
  • 對(duì)于我們的算法沒(méi)有任何幫助,,不會(huì)給算法的效果帶來(lái)任何提升,;
  • 冗余特征:
  • 不會(huì)對(duì)我們的算法帶來(lái)新的信息,或者這種特征的信息可以由其他的特征推斷出,;

2.特征選擇的目的

對(duì)于一個(gè)特定的學(xué)習(xí)算法來(lái)說(shuō),,哪一個(gè)特征是有效的是未知的。因此,,需要從所有特征中選擇出對(duì)于學(xué)習(xí)算法有益的相關(guān)特征,。而且在實(shí)際應(yīng)用中,,經(jīng)常會(huì)出現(xiàn)維度災(zāi)難問(wèn)題。如果只選擇所有特征中的部分特征構(gòu)建模型,,那么可以大大減少學(xué)習(xí)算法的運(yùn)行時(shí)間,,也可以增加模型的可解釋性。

3.特征選擇的原則

獲取盡可能小的特征子集,,不顯著降低分類精度,、不影響分類分布以及特征子集應(yīng)具有穩(wěn)定、適應(yīng)性強(qiáng)等特點(diǎn),。

0x02 特征選擇的方法

1.Filter方法(過(guò)濾式)

先進(jìn)行特征選擇,然后去訓(xùn)練學(xué)習(xí)器,,所以特征選擇的過(guò)程與學(xué)習(xí)器無(wú)關(guān),。相當(dāng)于先對(duì)特征進(jìn)行過(guò)濾操作,然后用特征子集來(lái)訓(xùn)練分類器,。

主要思想:對(duì)每一維特征“打分”,,即給每一維的特征賦予權(quán)重,這樣的權(quán)重就代表著該特征的重要性,,然后依據(jù)權(quán)重排序,。

主要方法

  • Chi-squared test(卡方檢驗(yàn))
  • Information gain(信息增益)
  • Correlation coefficient scores(相關(guān)系數(shù))

優(yōu)點(diǎn):運(yùn)行速度快,是一種非常流行的特征選擇方法,。

缺點(diǎn):無(wú)法提供反饋,,特征選擇的標(biāo)準(zhǔn)/規(guī)范的制定是在特征搜索算法中完成,學(xué)習(xí)算法無(wú)法向特征搜索算法傳遞對(duì)特征的需求,。另外,,可能處理某個(gè)特征時(shí)由于任意原因表示該特征不重要,但是該特征與其他特征結(jié)合起來(lái)則可能變得很重要,。

2.Wrapper方法(封裝式)

直接把最后要使用的分類器作為特征選擇的評(píng)價(jià)函數(shù),,對(duì)于特定的分類器選擇最優(yōu)的特征子集。

主要思想:將子集的選擇看作是一個(gè)搜索尋優(yōu)問(wèn)題,,生成不同的組合,,對(duì)組合進(jìn)行評(píng)價(jià),再與其他的組合進(jìn)行比較,。這樣就將子集的選擇看作是一個(gè)優(yōu)化問(wèn)題,,這里有很多的優(yōu)化算法可以解決,尤其是一些啟發(fā)式的優(yōu)化算法,,如GA,、PSO(如:優(yōu)化算法-粒子群算法)、DE,、ABC(如:優(yōu)化算法-人工蜂群算法)等,。

主要方法:遞歸特征消除算法,。

優(yōu)點(diǎn):對(duì)特征進(jìn)行搜索時(shí)圍繞學(xué)習(xí)算法展開(kāi)的,對(duì)特征選擇的標(biāo)準(zhǔn)/規(guī)范是在學(xué)習(xí)算法的需求中展開(kāi)的,,能夠考慮學(xué)習(xí)算法所屬的任意學(xué)習(xí)偏差,,從而確定最佳子特征,真正關(guān)注的是學(xué)習(xí)問(wèn)題本身,。由于每次嘗試針對(duì)特定子集時(shí)必須運(yùn)行學(xué)習(xí)算法,,所以能夠關(guān)注到學(xué)習(xí)算法的學(xué)習(xí)偏差/歸納偏差,因此封裝能夠發(fā)揮巨大的作用,。

缺點(diǎn):運(yùn)行速度遠(yuǎn)慢于過(guò)濾算法,,實(shí)際應(yīng)用用封裝方法沒(méi)有過(guò)濾方法流行。

3.Embedded方法(嵌入式)

將特征選擇嵌入到模型訓(xùn)練當(dāng)中,,其訓(xùn)練可能是相同的模型,,但是特征選擇完成后,還能給予特征選擇完成的特征和模型訓(xùn)練出的超參數(shù),,再次訓(xùn)練優(yōu)化,。

主要思想:在模型既定的情況下學(xué)習(xí)出對(duì)提高模型準(zhǔn)確性最好的特征。也就是在確定模型的過(guò)程中,,挑選出那些對(duì)模型的訓(xùn)練有重要意義的特征,。

主要方法:用帶有L1正則化的項(xiàng)完成特征選擇(也可以結(jié)合L2懲罰項(xiàng)來(lái)優(yōu)化)、隨機(jī)森林平均不純度減少法/平均精確度減少法,。

優(yōu)點(diǎn):對(duì)特征進(jìn)行搜索時(shí)圍繞學(xué)習(xí)算法展開(kāi)的,,能夠考慮學(xué)習(xí)算法所屬的任意學(xué)習(xí)偏差。訓(xùn)練模型的次數(shù)小于Wrapper方法,,比較節(jié)省時(shí)間,。

缺點(diǎn):運(yùn)行速度慢。

0x03 特征選擇實(shí)現(xiàn)方法一:去掉取值變化小的特征 (Removing features with low variance)

該方法一般用在特征選擇前作為一個(gè)預(yù)處理的工作,,即先去掉取值變化小的特征,,然后再使用其他特征選擇方法選擇特征。

考察某個(gè)特征下,,樣本的方差值,,可以認(rèn)為給定一個(gè)閾值,拋棄哪些小于某個(gè)閾值的特征,。

1.實(shí)現(xiàn)原理

  • 離散型變量:
  • 假設(shè)某特征的特征值只有0和1,,并且在所有輸入樣本中,95%的實(shí)例的該特征取值都是1,,那就可以認(rèn)為這個(gè)特征作用不大,。
  • 如果100%都是1,那這個(gè)特征就沒(méi)意義了,。
  • 連續(xù)型變量:
  • 需要將連續(xù)變量離散化之后才能用,。

而且實(shí)際當(dāng)中,,一般不太會(huì)有95%以上都取某個(gè)值的特征存在,所以這種方法雖然簡(jiǎn)單但是不太好用,??梢园阉鳛樘卣鬟x擇的預(yù)處理,先去掉那些取值變化小的特征,,然后再?gòu)慕酉聛?lái)提到的的特征選擇方法中選擇合適的進(jìn)行進(jìn)一步的特征選擇,。

2.實(shí)現(xiàn)代碼

from sklearn.feature_selection import VarianceThresholdX = [[0, 0, 1], [0, 1, 0], [1, 0, 0], [0, 1, 1], [0, 1, 0], [0, 1, 1]]sel = VarianceThreshold(threshold=(.8 * (1 - .8)))sel.fit_transform(X)#array([[0, 1], [1, 0], [0, 0], [1, 1], [1, 0], [1, 1]])

0x04 特征選擇實(shí)現(xiàn)方法二:?jiǎn)巫兞刻卣鬟x擇

單變量特征選擇方法獨(dú)立的衡量每個(gè)特征與響應(yīng)變量之間的關(guān)系,單變量特征選擇能夠?qū)γ恳粋€(gè)特征進(jìn)行測(cè)試,,衡量該特征和響應(yīng)變量之間的關(guān)系,,根據(jù)得分扔掉不好的特征。該方法簡(jiǎn)單,,易于運(yùn)行,,易于理解,通常對(duì)于理解數(shù)據(jù)有較好的效果(但對(duì)特征優(yōu)化,、提高泛化能力來(lái)說(shuō)不一定有效);這種方法有許多改進(jìn)的版本,、變種,。

1.Pearson相關(guān)系數(shù)(Pearson Correlation)

皮爾森相關(guān)系數(shù)是一種最簡(jiǎn)單的,能幫助理解特征和響應(yīng)變量之間關(guān)系的方法,,該方法衡量的是變量之間的線性相關(guān)性,。

1)原理介紹

特征工程系列:特征篩選的原理與實(shí)現(xiàn)

  • 就是用x_i、x_j的協(xié)方差除以x_i的標(biāo)準(zhǔn)差和x_j的標(biāo)準(zhǔn)差,,可以看成一種剔除了兩個(gè)變量量綱影響,、標(biāo)準(zhǔn)化后的特殊協(xié)方差。
  • 協(xié)方差是度量各個(gè)維度偏離其均值的程度,,協(xié)方差的值為正值時(shí)說(shuō)明兩者是正相關(guān),,否則是負(fù)相關(guān)的。
  • 結(jié)果的取值區(qū)間為[-1,,1],,-1表示完全的負(fù)相關(guān),+1表示完全的正相關(guān),,0表示沒(méi)有線性相關(guān),,絕對(duì)值表示相關(guān)性的強(qiáng)度。
  • 標(biāo)準(zhǔn)差也稱均方差,,是方差的算術(shù)平方根,,能反映一個(gè)數(shù)據(jù)集的離散程度。

2)主要用于連續(xù)型特征的篩選,,不適用于離散型特征的篩選,。

3)優(yōu)缺點(diǎn)

  • 優(yōu)點(diǎn):
  • 相關(guān)系數(shù)計(jì)算速度快,、易于計(jì)算,經(jīng)常在拿到數(shù)據(jù)(經(jīng)過(guò)清洗和特征提取之后的)之后第一時(shí)間就執(zhí)行,。Pearson相關(guān)系數(shù)能夠表征豐富的關(guān)系,,符合表示關(guān)系的正負(fù),絕對(duì)值能夠表示強(qiáng)度,。
  • 缺點(diǎn):
  • 相關(guān)系數(shù)作為特征排序機(jī)制,,它只對(duì)線性關(guān)系敏感,如果關(guān)系是非線性的,,即便兩個(gè)變量具有一一對(duì)應(yīng)的關(guān)系,,相關(guān)系數(shù)系數(shù)也可能會(huì)接近0。

4)代碼實(shí)現(xiàn)

import numpy as npfrom scipy.stats import pearsonrnp.random.seed(2019)size=1000x = np.random.normal(0, 1, size)# 計(jì)算兩變量間的相關(guān)系數(shù)print('Lower noise {}'.format(pearsonr(x, x + np.random.normal(0, 1, size))))print('Higher noise {}'.format(pearsonr(x, x + np.random.normal(0, 10, size))))

2.互信息和最大信息系數(shù)(Mutual information and maximal information coefficient)

如果變量不是獨(dú)立的,那么我們可以通過(guò)考察聯(lián)合概率分布與邊緣概率分布乘積之間的 Kullback-Leibler 散度來(lái)判斷它們是否“接近”于相互獨(dú)立,。

1)互信息方法

熵H(Y)與條件熵H(Y|X)之間的差稱為互信息,,互信息與條件熵之間的關(guān)系:

特征工程系列:特征篩選的原理與實(shí)現(xiàn)

其實(shí),這就是ID3決策樹(shù)的特征選擇規(guī)則,。

互信息法也是評(píng)價(jià)定性自變量對(duì)定性因變量的相關(guān)性的,,但是并不方便直接用于特征選擇:

  • 它不屬于度量方式,也沒(méi)有辦法進(jìn)行歸一化,,在不同的數(shù)據(jù)上的結(jié)果無(wú)法做比較,。
  • 只能用于離散型特征的選擇,連續(xù)型特征需要先進(jìn)行離散化才能用互信息進(jìn)行特征選擇,,而互信息的結(jié)果對(duì)離散化的方式很敏感,。

2)最大信息系數(shù)方法

由于互信息法并不方便直接用于特征選擇,因此引入了最大信息系數(shù),。最大信息數(shù)據(jù)首先尋找一種最優(yōu)的離散方式,,然后把互信息取值轉(zhuǎn)換成一種度量方式,取值區(qū)間為[0,1],。

3)最大信息系數(shù)方法代碼實(shí)現(xiàn)

x = np.random.normal(0,10,300)z = x *xpearsonr(x,z)# 輸出-0.1from minepy import MINEm = MINE()m.compute_score(x, z)print(m.mic())# 輸出1.0

3.距離相關(guān)系數(shù)(Distance correlation)

距離相關(guān)系數(shù)是為了克服Pearson相關(guān)系數(shù)的弱點(diǎn)而生的,。

1)原理介紹

特征工程系列:特征篩選的原理與實(shí)現(xiàn)

Pearson相關(guān)系數(shù)是0,我們也不能斷定這兩個(gè)變量是獨(dú)立的(有可能是非線性相關(guān)),。

例如x和x^2之間的Pearson相關(guān)系數(shù)是0,,但是兩個(gè)變量并不是獨(dú)立的。

2)代碼實(shí)現(xiàn)

from scipy.spatial.distance import pdist, squareformimport numpy as npfrom numbapro import jit, float32def distcorr(X, Y): ''' Compute the distance correlation function >>> a = [1,2,3,4,5] >>> b = np.array([1,2,9,4,4]) >>> distcorr(a, b) 0.762676242417 ''' X = np.atleast_1d(X) Y = np.atleast_1d(Y) if np.prod(X.shape) == len(X): X = X[:, None] if np.prod(Y.shape) == len(Y): Y = Y[:, None] X = np.atleast_2d(X) Y = np.atleast_2d(Y) n = X.shape[0] if Y.shape[0] != X.shape[0]: raise ValueError('Number of samples must match') a = squareform(pdist(X)) b = squareform(pdist(Y)) A = a - a.mean(axis=0)[None, :] - a.mean(axis=1)[:, None] + a.mean() B = b - b.mean(axis=0)[None, :] - b.mean(axis=1)[:, None] + b.mean() dcov2_xy = (A * B).sum()/float(n * n) dcov2_xx = (A * A).sum()/float(n * n) dcov2_yy = (B * B).sum()/float(n * n) dcor = np.sqrt(dcov2_xy)/np.sqrt(np.sqrt(dcov2_xx) * np.sqrt(dcov2_yy)) return dcor

4.基于學(xué)習(xí)模型的特征排序(Model based ranking)

這種方法的思路是直接使用你要用的機(jī)器學(xué)習(xí)算法,,針對(duì)每個(gè)單獨(dú)的特征和響應(yīng)變量建立預(yù)測(cè)模型,。如果特征與響應(yīng)變量之間的關(guān)系是非線性的,則有許多替代方案,,例如基于樹(shù)的方法(決策樹(shù),,隨機(jī)森林)、或者擴(kuò)展的線性模型等,?;跇?shù)的方法是最簡(jiǎn)單的方法之一,,因?yàn)樗麄兛梢院芎玫啬M非線性關(guān)系,不需要太多的調(diào)整,。但是要避免的主要是過(guò)度擬合,,因此樹(shù)的深度應(yīng)該相對(duì)較小,并且應(yīng)該應(yīng)用交叉驗(yàn)證,。

代碼實(shí)現(xiàn)

from sklearn.cross_validation import cross_val_score, ShuffleSplitfrom sklearn.datasets import load_bostonfrom sklearn.ensemble import RandomForestRegressor#Load boston housing dataset as an exampleboston = load_boston()X = boston['data']Y = boston['target']names = boston['feature_names']rf = RandomForestRegressor(n_estimators=20, max_depth=4)scores = []# 使用每個(gè)特征單獨(dú)訓(xùn)練模型,,并獲取每個(gè)模型的評(píng)分來(lái)作為特征選擇的依據(jù)。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))# 輸出:[(0.636, 'LSTAT'), (0.59, 'RM'), (0.472, 'NOX'), (0.369, 'INDUS'),(0.311, 'PTRATIO'), (0.24, 'TAX'), (0.24, 'CRIM'), (0.185, 'RAD'),(0.16, 'ZN'), (0.087, 'B'), (0.062, 'DIS'), (0.036, 'CHAS'), (0.027, 'AGE')]

5.卡方檢驗(yàn)

卡方檢驗(yàn)是一種用途很廣的計(jì)數(shù)資料的假設(shè)檢驗(yàn)方法,,由卡爾·皮爾遜提出,。卡方值描述兩個(gè)事件的獨(dú)立性或者描述實(shí)際觀察值與期望值的偏離程度,??ǚ街翟酱螅砻麑?shí)際觀察值與期望值偏離越大,,也說(shuō)明兩個(gè)事件的相互獨(dú)立性越弱,。

1)原理介紹

特征工程系列:特征篩選的原理與實(shí)現(xiàn)

CHI值(卡方值)用于衡量實(shí)際值與理論值的差異程度,除以T是為了避免不同觀察值與不同期望之間產(chǎn)生的偏差因T的不同而差別太大,,所以除以E以消除這種弊端,。

  • 實(shí)際值與理論值偏差的絕對(duì)大小(由于平方的存在,,差異被放大)
  • 差異值與理論值的相對(duì)大小

2)實(shí)現(xiàn)流程

CHI值越大,,說(shuō)明兩個(gè)變量越不可能是獨(dú)立無(wú)關(guān)的,,也就是說(shuō)CHI值越大,,兩個(gè)變量的相關(guān)程度也越高。

a. 對(duì)于特征變量x1,x2,…,xn,,以及分類變量y,。只需要計(jì)算CHI(x1,y)、CHI(x2,y),、…,、CHI(xn,y),并按照CHI的值從大到小將特征排序,。

b. 選擇合適的閾值,,大于閾值的特征留下,小于閾值的特征刪除,。這樣篩選出一組特征子集就是輸入模型訓(xùn)練的特征,。

3)只適用于分類問(wèn)題中離散型特征篩選,不能用于分類問(wèn)題中連續(xù)型特征的篩選,,也不能用于回歸問(wèn)題的特征篩選,。

4)代碼實(shí)現(xiàn)

現(xiàn)實(shí)方法:

  • sklearn.feature_selection.SelectKBest:
  • 返回k個(gè)最佳特征
  • sklearn.feature_selection.SelectPercentile:
  • 返回表現(xiàn)最佳的前r%個(gè)特征
#導(dǎo)入sklearn庫(kù)中的SelectKBest和chi2from sklearn.feature_selection import SelectKBest ,chi2#選擇相關(guān)性最高的前5個(gè)特征X_chi2 = SelectKBest(chi2, k=5).fit_transform(X, y)X_chi2.shape輸出:(27, 5)

0xFF 總結(jié)

  1. 去掉取值變化小的特征方法一般用在特征選擇前作為一個(gè)預(yù)處理的工作,,即先去掉取值變化小的特征,然后再使用其他特征選擇方法選擇特征,。如果機(jī)器資源充足,,并且希望盡量保留所有信息,可以把閾值設(shè)置得比較高,,或者只過(guò)濾離散型特征只有一個(gè)取值的特征,。
  2. 單變量特征選擇可以用于理解數(shù)據(jù)、數(shù)據(jù)的結(jié)構(gòu),、特點(diǎn),,也可以用于排除不相關(guān)特征,但是它不能發(fā)現(xiàn)冗余特征,。

去掉取值變化小的特征方法和單變量特征選擇方法都屬于過(guò)濾式類特征篩選方法,,但是學(xué)習(xí)算法無(wú)法向特征搜索算法傳遞對(duì)特征的需求。為了真正關(guān)注的是學(xué)習(xí)問(wèn)題本身,,我們將在《特征工程系列:特征篩選的原理與實(shí)現(xiàn)(下)》中繼續(xù)介紹Wrapper方法和Embedded方法的原理與實(shí)現(xiàn),。

0x00 前言

我們?cè)凇短卣鞴こ滔盗校禾卣骱Y選的原理與實(shí)現(xiàn)(上)》中介紹了特征選擇的分類,并詳細(xì)介紹了過(guò)濾式特征篩選的原理與實(shí)現(xiàn),。本篇繼續(xù)介紹封裝式和嵌入式特征篩選的原理與實(shí)現(xiàn),。

0x01 特征選擇實(shí)現(xiàn)方法三:線性模型與正則化

1.主要思想

當(dāng)所有特征在相同尺度上時(shí),最重要的特征應(yīng)該在模型中具有最高系數(shù),,而與輸出變量不相關(guān)的特征應(yīng)該具有接近零的系數(shù)值,。即使使用簡(jiǎn)單的線性回歸模型,當(dāng)數(shù)據(jù)不是很嘈雜(或者有大量數(shù)據(jù)與特征數(shù)量相比)并且特征(相對(duì))獨(dú)立時(shí),,這種方法也能很好地工作,。

2.正則化模型

正則化就是把額外的約束或者懲罰項(xiàng)加到已有模型(損失函數(shù))上,以防止過(guò)擬合并提高泛化能力,。損失函數(shù)由原來(lái)的E(X,Y)變?yōu)镋(X,Y)+alpha||w||,,w是模型系數(shù)組成的向量(有些地方也叫參數(shù)parameter,coefficients),,||·||一般是L1或者L2范數(shù),,alpha是一個(gè)可調(diào)的參數(shù),控制著正則化的強(qiáng)度,。當(dāng)用在線性模型上時(shí),,L1正則化和L2正則化也稱為L(zhǎng)asso和Ridge。

1)L1正則化/Lasso regression

L1正則化將系數(shù)w的l1范數(shù)作為懲罰項(xiàng)加到損失函數(shù)上,,由于正則項(xiàng)非零,,這就迫使那些弱的特征所對(duì)應(yīng)的系數(shù)變成0。因此L1正則化往往會(huì)使學(xué)到的模型很稀疏(系數(shù)w經(jīng)常為0),這個(gè)特性使得L1正則化成為一種很好的特征選擇方法,。

Lasso能夠挑出一些優(yōu)質(zhì)特征,,同時(shí)讓其他特征的系數(shù)趨于0。當(dāng)如需要減少特征數(shù)的時(shí)候它很有用,,但是對(duì)于數(shù)據(jù)理解來(lái)說(shuō)不是很好用,。

2)L2正則化/Ridge regression

L2正則化將系數(shù)向量的L2范數(shù)添加到了損失函數(shù)中。

  • 由于L2懲罰項(xiàng)中系數(shù)是二次方的,,這使得L2和L1有著諸多差異,,最明顯的一點(diǎn)就是,L2正則化會(huì)讓系數(shù)的取值變得平均,。
  • 對(duì)于關(guān)聯(lián)特征,,這意味著他們能夠獲得更相近的對(duì)應(yīng)系數(shù)。
  • Ridge將回歸系數(shù)均勻的分?jǐn)偟礁鱾€(gè)關(guān)聯(lián)變量上,。

L2正則化對(duì)于特征選擇來(lái)說(shuō)一種穩(wěn)定的模型,,不像L1正則化那樣,系數(shù)會(huì)因?yàn)榧?xì)微的數(shù)據(jù)變化而波動(dòng),。所以L2正則化和L1正則化提供的價(jià)值是不同的,,L2正則化對(duì)于特征理解來(lái)說(shuō)更加有用:表示能力強(qiáng)的特征對(duì)應(yīng)的系數(shù)是非零。

3.原理介紹

多元線性回歸,,具有n個(gè)特征值,,預(yù)測(cè)公式如下。

特征工程系列:特征篩選的原理與實(shí)現(xiàn)

多元線性回歸方程演變成求θ,。

每個(gè)特征都有對(duì)應(yīng)的權(quán)重系數(shù)coef,,特征的權(quán)重系數(shù)的正負(fù)值代表特征與目標(biāo)值是正相關(guān)還是負(fù)相關(guān),特征的權(quán)重系數(shù)的絕對(duì)值代表重要性,。

sklearn中 中LinearRegression的fit()方法就是通過(guò)訓(xùn)練集求出θ,,LinearRegression的兩個(gè)屬性intercept和coef分別對(duì)應(yīng)θ0和θ1-θn。

特征工程系列:特征篩選的原理與實(shí)現(xiàn)

4.代碼實(shí)現(xiàn)

1)普通線性模型

#獲取boston數(shù)據(jù)boston=datasets.load_boston()x=boston.datay=boston.target#過(guò)濾掉異常值x=x[y<50]y=y[y<50]reg=LinearRegression()reg.fit(x,y)#求排序后的coefcoefSort=reg.coef_.argsort()#featureNameSort: 按對(duì)標(biāo)記值的影響,,從小到大的各特征值名稱#featureCoefSore:按對(duì)標(biāo)記值的影響,,從小到大的coef_featureNameSort=boston.feature_names[coefSort]featureCoefSore=reg.coef_[coefSort]print('featureNameSort:', featureNameSort)print('featureCoefSore:', featureCoefSore)# 輸出:featureNameSort: ['NOX' 'DIS' 'PTRATIO' 'LSTAT' 'CRIM' 'INDUS' 'AGE' 'TAX' 'B' 'ZN' 'RAD' 'CHAS' 'RM']featureCoefSore: [-1.24268073e+01 -1.21088069e+00 -8.38888137e-01 -3.50952134e-01 -1.05574295e-01 -4.35179251e-02 -2.36116881e-02 -1.37702943e-02 7.93577159e-033.52748549e-02 2.50740082e-01 4.55405227e-01 3.75411229e+00]

結(jié)果分析:

  • 正相關(guān)影響系數(shù)最大的特征值是”RM”:房間的平均數(shù)量,,系數(shù)值為3.75,。
  • 負(fù)相關(guān)影響系數(shù)最大的特征值是”NOX”:一氧化氮濃度,系數(shù)值為-1.24。

2)L1正則化線性模型

#A helper method for pretty-printing linear modelsdef pretty_print_linear(coefs, names = None, sort = False): if names == None: names = ['X%s' % x for x in range(len(coefs))] lst = zip(coefs, names) if sort: lst = sorted(lst, key = lambda x:-np.abs(x[0])) return ' + '.join('%s * %s' % (round(coef, 3), name) for coef, name in lst)from sklearn.linear_model import Lassofrom sklearn.preprocessing import StandardScalerfrom sklearn.datasets import load_bostonboston = load_boston()scaler = StandardScaler()X = scaler.fit_transform(boston['data'])Y = boston['target']names = boston['feature_names']lasso = Lasso(alpha=.3)lasso.fit(X, Y)print('Lasso model: {}'.format( pretty_print_linear(lasso.coef_, names, sort = True)))# 輸出:Lasso model: -3.707 * LSTAT + 2.992 * RM + -1.757 * PTRATIO+ -1.081 * DIS + -0.7 * NOX + 0.631 * B + 0.54 * CHAS + -0.236 * CRIM+ 0.081 * ZN + -0.0 * INDUS + -0.0 * AGE + 0.0 * RAD + -0.0 * TAX

許多特征具有系數(shù)0,。L1正則化回歸的穩(wěn)定性與非正則化線性模型類似,,這意味著當(dāng)數(shù)據(jù)中存在相關(guān)特征時(shí),系數(shù)(以及特征等級(jí))即使在小數(shù)據(jù)變化時(shí)也會(huì)發(fā)生顯著變化,。

3)L2正則化線性模型

from sklearn.linear_model import Ridgefrom sklearn.metrics import r2_scoresize = 100#We run the method 10 times with different random seedsfor i in range(10): print('Random seed {}'.format(i)) np.random.seed(seed=i) X_seed = np.random.normal(0, 1, size) X1 = X_seed + np.random.normal(0, .1, size) X2 = X_seed + np.random.normal(0, .1, size) X3 = X_seed + np.random.normal(0, .1, size) Y = X1 + X2 + X3 + np.random.normal(0, 1, size) X = np.array([X1, X2, X3]).T lr = LinearRegression() lr.fit(X,Y) print('Linear model: {}'.format(pretty_print_linear(lr.coef_))) ridge = Ridge(alpha=10) ridge.fit(X,Y) print('Ridge model: {}'.format(pretty_print_linear(ridge.coef_)))# 輸出Random seed 0Linear model: 0.728 * X0 + 2.309 * X1 + -0.082 * X2Ridge model: 0.938 * X0 + 1.059 * X1 + 0.877 * X2Random seed 1Linear model: 1.152 * X0 + 2.366 * X1 + -0.599 * X2Ridge model: 0.984 * X0 + 1.068 * X1 + 0.759 * X2Random seed 2Linear model: 0.697 * X0 + 0.322 * X1 + 2.086 * X2Ridge model: 0.972 * X0 + 0.943 * X1 + 1.085 * X2Random seed 3Linear model: 0.287 * X0 + 1.254 * X1 + 1.491 * X2Ridge model: 0.919 * X0 + 1.005 * X1 + 1.033 * X2Random seed 4Linear model: 0.187 * X0 + 0.772 * X1 + 2.189 * X2Ridge model: 0.964 * X0 + 0.982 * X1 + 1.098 * X2Random seed 5Linear model: -1.291 * X0 + 1.591 * X1 + 2.747 * X2Ridge model: 0.758 * X0 + 1.011 * X1 + 1.139 * X2Random seed 6Linear model: 1.199 * X0 + -0.031 * X1 + 1.915 * X2Ridge model: 1.016 * X0 + 0.89 * X1 + 1.091 * X2Random seed 7Linear model: 1.474 * X0 + 1.762 * X1 + -0.151 * X2Ridge model: 1.018 * X0 + 1.039 * X1 + 0.901 * X2Random seed 8Linear model: 0.084 * X0 + 1.88 * X1 + 1.107 * X2Ridge model: 0.907 * X0 + 1.071 * X1 + 1.008 * X2Random seed 9Linear model: 0.714 * X0 + 0.776 * X1 + 1.364 * X2Ridge model: 0.896 * X0 + 0.903 * X1 + 0.98 * X2

從示例中可以看出,,線性回歸的系數(shù)變化很大,具體取決于生成的數(shù)據(jù),。然而,,對(duì)于L2正則化模型,,系數(shù)非常穩(wěn)定并且密切反映數(shù)據(jù)的生成方式(所有系數(shù)接近1)。

0x02 特征選擇實(shí)現(xiàn)方法四:隨機(jī)森林選擇

隨機(jī)森林具有準(zhǔn)確率高,、魯棒性好,、易于使用等優(yōu)點(diǎn),這使得它成為了目前最流行的機(jī)器學(xué)習(xí)算法之一,。隨機(jī)森林提供了兩種特征選擇的方法:mean decrease impurity和mean decrease accuracy,。

1.平均不純度減少(mean decrease impurity)

1)原理介紹

  • 隨機(jī)森林由多顆CART決策樹(shù)構(gòu)成,決策樹(shù)中的每一個(gè)節(jié)點(diǎn)都是關(guān)于某個(gè)特征的條件,,為的是將數(shù)據(jù)集按照不同的響應(yīng)變量一分為二,。
  • CART利用不純度可以確定節(jié)點(diǎn)(最優(yōu)條件),對(duì)于分類問(wèn)題,,通常采用基尼不純度,,對(duì)于回歸問(wèn)題,通常采用的是方差或者最小二乘擬合,。
  • 當(dāng)訓(xùn)練決策樹(shù)的時(shí)候,,可以計(jì)算出每個(gè)特征減少了多少樹(shù)的不純度。對(duì)于一個(gè)決策樹(shù)森林來(lái)說(shuō),,可以算出每個(gè)特征平均減少了多少不純度,,并把它平均減少的不純度作為特征選擇的標(biāo)準(zhǔn)。
  • 隨機(jī)森林基于不純度的排序結(jié)果非常鮮明,,在得分最高的幾個(gè)特征之后的特征,,得分急劇的下降。

2)代碼實(shí)現(xiàn)

from sklearn.datasets import load_bostonfrom sklearn.ensemble import RandomForestRegressorimport numpy as np#Load boston housing dataset as an exampleboston = load_boston()X = boston['data']Y = boston['target']names = boston['feature_names']# 訓(xùn)練隨機(jī)森林模型,,并通過(guò)feature_importances_屬性獲取每個(gè)特征的重要性分?jǐn)?shù),。rf = RandomForestRegressor()rf.fit(X, Y)print('Features sorted by their score:')print(sorted(zip(map(lambda x: round(x, 4), rf.feature_importances_), names), reverse=True))

2.平均精確度減少(mean decrease accuracy)

1)原理介紹

  • 通過(guò)直接度量每個(gè)特征對(duì)模型精確率的影響來(lái)進(jìn)行特征選擇。
  • 主要思路是打亂每個(gè)特征的特征值順序,,并且度量順序變動(dòng)對(duì)模型的精確率的影響,。
  • 對(duì)于不重要的變量來(lái)說(shuō),打亂順序?qū)δP偷木_率影響不會(huì)太大,。
  • 對(duì)于重要的變量來(lái)說(shuō),,打亂順序就會(huì)降低模型的精確率。

2)代碼實(shí)現(xiàn)

from sklearn.cross_validation import ShuffleSplitfrom sklearn.metrics import r2_scorefrom collections import defaultdictX = boston['data']Y = boston['target']rf = RandomForestRegressor()scores = defaultdict(list)#crossvalidate the scores on a number of different random splits of the datafor train_idx, test_idx in ShuffleSplit(len(X), 100, .3): X_train, X_test = X[train_idx], X[test_idx] Y_train, Y_test = Y[train_idx], Y[test_idx] # 使用修改前的原始特征訓(xùn)練模型,,其acc作為后續(xù)混洗特征值后的對(duì)比標(biāo)準(zhǔn),。r = rf.fit(X_train, Y_train) acc = r2_score(Y_test, rf.predict(X_test)) # 遍歷每一列特征 for i in range(X.shape[1]): X_t = X_test.copy() # 對(duì)這一列特征進(jìn)行混洗,交互了一列特征內(nèi)部的值的順序 np.random.shuffle(X_t[:, i]) shuff_acc = r2_score(Y_test, rf.predict(X_t)) # 混洗某個(gè)特征值后,,計(jì)算平均精確度減少程度,。scores[names[i]].append((acc-shuff_acc)/acc)print('Features sorted by their score:')print(sorted([(round(np.mean(score), 4), feat) for feat, score in scores.items()], reverse=True))

0x03 特征選擇實(shí)現(xiàn)方法五:頂層特征選擇

頂層特征選擇發(fā)建立在基于模型的特征選擇方法基礎(chǔ)之上的,例如線性回歸和SVM等,在不同的子集上建立模型,,然后匯總最終確定特征得分,。

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

穩(wěn)定性選擇常常是一種既能夠有助于理解數(shù)據(jù)又能夠挑出優(yōu)質(zhì)特征的這種選擇。

1)原理介紹

  • 穩(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,。

2)代碼實(shí)現(xiàn)

from sklearn.linear_model import RandomizedLassofrom sklearn.datasets import load_bostonboston = load_boston()#using the Boston housing data.#Data gets scaled automatically by sklearn's implementationX = 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))

2.遞歸特征消除(Recursive feature elimination,RFE)

1)原理介紹

  • 遞歸特征消除的主要思想是反復(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)定的,。
  • 假如RFE采用的是Ridge,而用Ridge正則化的回歸是穩(wěn)定的,,那么RFE就是穩(wěn)定的,。

2)代碼實(shí)現(xiàn)

from sklearn.feature_selection import RFEfrom sklearn.linear_model import LinearRegressionboston = load_boston()X = boston['data']Y = boston['target']names = boston['feature_names']#use linear regression as the modellr = LinearRegression()#rank all features, i.e continue the elimination until the last onerfe = 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)))結(jié)果輸出Features sorted by their rank:[(1, 'NOX'), (2, 'RM'), (3, 'CHAS'), (4, 'PTRATIO'), (5, 'DIS'),(6, 'LSTAT'), (7, 'RAD'), (8, 'CRIM'), (9, 'INDUS'), (10, 'ZN'),(11, 'TAX'), (12, 'B'), (13, 'AGE')]

0xFF 總結(jié)

  1. 單變量特征選擇可以用于理解數(shù)據(jù)、數(shù)據(jù)的結(jié)構(gòu),、特點(diǎn),,也可以用于排除不相關(guān)特征,但是它不能發(fā)現(xiàn)冗余特征,。
  2. 正則化的線性模型可用于特征理解和特征選擇,。相比起L1正則化,,L2正則化的表現(xiàn)更加穩(wěn)定,,L2正則化對(duì)于數(shù)據(jù)的理解來(lái)說(shuō)很合適。由于響應(yīng)變量和特征之間往往是非線性關(guān)系,可以采用basis expansion的方式將特征轉(zhuǎn)換到一個(gè)更加合適的空間當(dāng)中,,在此基礎(chǔ)上再考慮運(yùn)用簡(jiǎn)單的線性模型,。
  3. 隨機(jī)森林是一種非常流行的特征選擇方法,它易于使用,。但它有兩個(gè)主要問(wèn)題:
  • 重要的特征有可能得分很低(關(guān)聯(lián)特征問(wèn)題)
  • 這種方法對(duì)特征變量類別多的特征越有利(偏向問(wèn)題)
  1. 特征選擇在很多機(jī)器學(xué)習(xí)和數(shù)據(jù)挖掘場(chǎng)景中都是非常有用的,。在使用的時(shí)候要弄清楚自己的目標(biāo)是什么,然后找到哪種方法適用于自己的任務(wù),。
  • 當(dāng)選擇最優(yōu)特征以提升模型性能的時(shí)候,,可以采用交叉驗(yàn)證的方法來(lái)驗(yàn)證某種方法是否比其他方法要好。
  • 當(dāng)用特征選擇的方法來(lái)理解數(shù)據(jù)的時(shí)候要留心,,特征選擇模型的穩(wěn)定性非常重要,,穩(wěn)定性差的模型很容易就會(huì)導(dǎo)致錯(cuò)誤的結(jié)論。
  • 對(duì)數(shù)據(jù)進(jìn)行二次采樣然后在子集上運(yùn)行特征選擇算法能夠有所幫助,,如果在各個(gè)子集上的結(jié)果是一致的,,那就可以說(shuō)在這個(gè)數(shù)據(jù)集上得出來(lái)的結(jié)論是可信的,可以用這種特征選擇模型的結(jié)果來(lái)理解數(shù)據(jù),。
  1. 關(guān)于訓(xùn)練模型的特征篩選,,個(gè)人建議的實(shí)施流程 :
  2. 數(shù)據(jù)預(yù)處理后,先排除取值變化很小的特征,。如果機(jī)器資源充足,,并且希望盡量保留所有信息,可以把閾值設(shè)置得比較高,,或者只過(guò)濾離散型特征只有一個(gè)取值的特征,。
  3. 如果數(shù)據(jù)量過(guò)大,計(jì)算資源不足(內(nèi)存不足以使用所有數(shù)據(jù)進(jìn)行訓(xùn)練,、計(jì)算速度過(guò)慢),,可以使用單特征選擇法排除部分特征。這些被排除的特征并不一定完全被排除不再使用,,在后續(xù)的特征構(gòu)造時(shí)也可以作為原始特征使用,。
  4. 如果此時(shí)特征量依然非常大,或者是如果特征比較稀疏時(shí),,可以使用PCA(主成分分析)和LDA(線性判別)等方法進(jìn)行特征降維,。
  5. 經(jīng)過(guò)樣本采樣和特征預(yù)篩選后,訓(xùn)練樣本可以用于訓(xùn)練模型,。但是可能由于特征數(shù)量比較大而導(dǎo)致訓(xùn)練速度慢,,或者想進(jìn)一步篩選有效特征或排除無(wú)效特征(或噪音),我們可以使用正則化線性模型選擇法,、隨機(jī)森林選擇法或者頂層特征選擇法進(jìn)一步進(jìn)行特征篩選,。

最后,,特征篩選是為了理解數(shù)據(jù)或更好地訓(xùn)練模型,我們應(yīng)該根據(jù)自己的目標(biāo)來(lái)選擇適合的方法,。為了更好/更容易地訓(xùn)練模型而進(jìn)行的特征篩選,,如果計(jì)算資源充足,應(yīng)盡量避免過(guò)度篩選特征,,因?yàn)樘卣骱Y選很容易丟失有用的信息,。如果只是為了減少無(wú)效特征的影響,為了避免過(guò)擬合,,可以選擇隨機(jī)森林和XGBoost等集成模型來(lái)避免對(duì)特征過(guò)擬合,。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點(diǎn),。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,,謹(jǐn)防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào),。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多