中文字幕在线观看,亚洲а∨天堂久久精品9966,亚洲成a人片在线观看你懂的,亚洲av成人片无码网站,亚洲国产精品无码久久久五月天

Python中機(jī)器學(xué)習(xí)的特征選擇工具

2018-07-16    來源:raincent

容器云強(qiáng)勢上線!快速搭建集群,上萬Linux鏡像隨意使用

 

特征選擇,即在數(shù)據(jù)集中查找和選擇最有用的特征的過程,是機(jī)器學(xué)習(xí)的關(guān)鍵步驟。不必要的特征會(huì)降低訓(xùn)練速度、模型的可解釋性,最重要的是會(huì)降低測試集的泛化性能。

我對臨時(shí)的特征選擇方法感到很失望,但是在解決機(jī)器學(xué)習(xí)問題時(shí)又反復(fù)用到了這些方法,所以就創(chuàng)建了一個(gè)關(guān)于特征選擇的Python類,該類可以在GitHub上找到。FeatureSelector類包括一些最常見的特征選擇方法:

1.高百分比的缺失值特征選擇法

2.共線(高度相關(guān))特征選擇法

3.樹型結(jié)構(gòu)模型中的零重要性特征選擇法

4.低重要性特征選擇法

5.唯一值特征選擇法

在本文中,我將對機(jī)器學(xué)習(xí)數(shù)據(jù)集的示例使用FeatureSelector類。也會(huì)介紹該類是如何讓我們快速地實(shí)現(xiàn)特征選擇方法。

完整的代碼可以在GitHub上找到,特征選擇器還是一個(gè)半成品,會(huì)根據(jù)社區(qū)的需求繼續(xù)改進(jìn)!

示例數(shù)據(jù)集

示例中使用的是Kaggle上家庭信用違約風(fēng)險(xiǎn)機(jī)器學(xué)習(xí)競賽的數(shù)據(jù)樣本。整個(gè)數(shù)據(jù)集可以下載,演示樣本如下:

 

 

該數(shù)據(jù)樣本來自一個(gè)有監(jiān)督分類問題,也是一個(gè)很好的數(shù)據(jù)集。因?yàn)樗性S多缺失值、高度相關(guān)(共線)的特征以及對機(jī)器學(xué)習(xí)模型無用的不相關(guān)特征。

創(chuàng)建一個(gè)實(shí)例

創(chuàng)建FeatureSelector類的實(shí)例需傳入結(jié)構(gòu)化的數(shù)據(jù)集,該數(shù)據(jù)集行為觀察值、列為特征。該類內(nèi)有一些只需傳入特征的方法,但是這些基于特征重要性的方法需傳入訓(xùn)練標(biāo)簽。所以當(dāng)用這些方法解決一個(gè)有監(jiān)督分類問題時(shí),需傳入一組特征和一組標(biāo)簽。

 

 

方法

特征選擇器有5種查找要?jiǎng)h除特征的方法,找到被標(biāo)識(shí)的特征并手動(dòng)地將它們從數(shù)據(jù)中刪除,或者使用特征選擇器中的remove函數(shù)。

下面將詳細(xì)介紹每一種方法,并展示5種方法是如何同時(shí)運(yùn)行的。FeatureSelector類內(nèi)還有一些具有繪圖功能的方法,因?yàn)闄z驗(yàn)直觀的圖像數(shù)據(jù)也是機(jī)器學(xué)習(xí)的一個(gè)重要組成部分。

缺失值

缺失值特征選擇法比較簡單:所查找的特征是超過指定閾值的缺失值。下面的調(diào)用所標(biāo)識(shí)的特征都是超過60%的缺失值(粗體為輸出)。

fs.identify_missing(missing_threshold = 0.6)
17 features with greater than 0.60 missing values.

按列顯示缺失值的dataframe:

fs.missing_stats.head()

 

 

通過FeatureSelector類的ops屬性可以查看要?jiǎng)h除特征。具體過程如下面所列的Python 命令所示:

 

 

下面是缺失值占特征比例的分布圖:

fs.plot_missing()

 

 

共線特征

共線特征是高度相關(guān)的特征。在機(jī)器學(xué)習(xí)中,由于共線特征的高方差和低模型可解釋性,會(huì)導(dǎo)致測試集的泛化性能下降。

identify_collinear方法根據(jù)指定的相關(guān)系數(shù)值查找共線特征,將相關(guān)特征對中的一個(gè)標(biāo)識(shí)為要?jiǎng)h除特征(因?yàn)橹恍枰獎(jiǎng)h除一個(gè)):

fs.identify_collinear(correlation_threshold = 0.98)
21 features with a correlation magnitude greater than 0.98.

下面是基于相關(guān)性的熱度圖,該圖顯示了相關(guān)性超過閾值的所有特征:

fs.plot_collinear()

 

 

類似的,也可以列出要?jiǎng)h除的共線特征,或者查看共線特征的dataframe。

 

 

fs.record_collinear.head()

 

 

如果想深入研究數(shù)據(jù)集,還可以傳入plot_all = True給調(diào)用,繪制所有數(shù)據(jù)相關(guān)性的圖表:

 

 

零重要性特征

前兩種方法可以應(yīng)用于任何結(jié)構(gòu)化的數(shù)據(jù)集,且具有確定性——對于給定的閾值,每次結(jié)果都是相同的。但是零重要性特征選擇法只針對有監(jiān)督的機(jī)器學(xué)習(xí)問題(有訓(xùn)練模型的標(biāo)簽),且具有不確定性。identify_zero_important函數(shù)根據(jù)梯度提升機(jī)(GBM)學(xué)習(xí)模型來查找零重要性特征。

通過基于樹型結(jié)構(gòu)的機(jī)器學(xué)習(xí)模型,例如boosting集成算法,可以發(fā)現(xiàn)特征的重要性。重要性的相對值可以確定任務(wù)的最相關(guān)特征,絕對值就沒有那么重要了,但是可以通過刪除零重要性特征可以進(jìn)行特征選擇。零重要性特征不能作為樹型模型中的節(jié)點(diǎn),因此可以在不影響模型性能的情況下刪除它們。

FeatureSelector通過LightGBM庫的梯度提升機(jī)來查找特征重要性。為了減少差異,對特征重要性進(jìn)行平均超過10次的GBM訓(xùn)練。此外,通過使用驗(yàn)證集(可關(guān)閉)進(jìn)行早期停止來訓(xùn)練模型,以防止對訓(xùn)練數(shù)據(jù)的過度擬合。

下面的代碼調(diào)用了該方法并提取了零重要性特征:

 

 

傳入的參數(shù)如下:

• task:根據(jù)問題對應(yīng)選擇“classification”或“regression”

• eval_metric:衡量早期停止(若禁用了早期停止,則沒有必要)

• n_iteration:訓(xùn)練次數(shù)

• early_stopping:是否使用早期停止來訓(xùn)練模型

下面兩個(gè)圖由plot_feature_importances函數(shù)得出:

# plot the feature importances
fs.plot_feature_importances(threshold = 0.99, plot_n = 12)

 

 

左邊是關(guān)于plot_n最重要特征的圖(根據(jù)歸一化的重要性所繪制,總和為1)。右邊是累積重要性與特征數(shù)量的關(guān)系圖。垂線畫在累積重要性達(dá)到的閾值處,本例中閾值為99%。

基于重要性的方法需要記住兩個(gè)要點(diǎn):

(1)訓(xùn)練梯度提升機(jī)是隨機(jī)的,每一次模型運(yùn)行,特征重要性都將會(huì)改變。

這不會(huì)產(chǎn)生重大的影響(最重要的特征不會(huì)突然變成最少),但是它會(huì)改變某些特征的順序,還會(huì)影響被標(biāo)識(shí)的零重要性特征的數(shù)量。如果特征重要性每次都發(fā)生變化,不要感到驚訝!

(2)為了對機(jī)器學(xué)習(xí)模型進(jìn)行訓(xùn)練,首先需要對特征進(jìn)行獨(dú)熱編碼。所以一些被標(biāo)識(shí)為零重要性的特征可能是在建模過程中添加的獨(dú)熱編碼特征。

在刪除特征時(shí)可以刪除任何添加的獨(dú)熱編碼特征。但是,如果在特征選擇之后要進(jìn)行機(jī)器學(xué)習(xí),則不能刪除!

低重要性特征

這種方法構(gòu)建立在零重要性函數(shù)的基礎(chǔ)上,再利用模型中的特征重要性進(jìn)行進(jìn)一步的選擇。由函數(shù)identify_low_importance可知,低重要性特征并不影響某些指定的總重要性。

例如,下面的調(diào)用顯示:在實(shí)現(xiàn)99%的總重要性時(shí),最低重要性特征并不是必需的。

fs.identify_low_importance(cumulative_importance = 0.99)

由上面累積重要性的圖,以及低重要性不影響某些指定的總重要性這一信息可知,梯度提升機(jī)中有許多與學(xué)習(xí)無關(guān)的特征。同樣,低重要性特征選擇法的結(jié)果在每次訓(xùn)練中都會(huì)發(fā)生變化。

查看所有的特征重要性:

fs.feature_importances.head(10)

 

 

low_importance方法借鑒了使用主成分分析(PCA)的方法,只要求主成分所占的比例要維持在一定的百分比(例如95%)。總重要性所占比例也要維持在一定的百分比。

基于特征重要性的方法最適合用來對樹型結(jié)構(gòu)模型進(jìn)行預(yù)測;谥匾缘姆椒ㄊ请S機(jī)的,也是一種黑盒方法,因?yàn)槟P团卸ㄌ卣魇欠裣嚓P(guān)并不透明的。所以在使用基于特征重要性的方法時(shí),應(yīng)多次運(yùn)行以查看結(jié)果如何變化,并盡可能創(chuàng)建多個(gè)具有不同參數(shù)的數(shù)據(jù)集以進(jìn)行測試!

唯一值特征

最唯一值特征選擇法是相當(dāng)基本的:查找有唯一值的列。只有一個(gè)唯一值的特征對于機(jī)器學(xué)習(xí)來說是無用的,因?yàn)檫@個(gè)特征的方差為零。例如,只有一個(gè)值的特征不能作為樹型結(jié)構(gòu)模型的節(jié)點(diǎn)(因?yàn)樵撎卣鞑荒茉俜纸M了)。

繪制各個(gè)區(qū)間唯一值數(shù)量的直方圖:

fs.plot_unique()

 

 

需要記住的一點(diǎn)是:默認(rèn)在計(jì)算Pandas 中唯一值之前,NaNs會(huì)被刪除。

刪除特征

確定了要?jiǎng)h除特征后,有兩個(gè)選擇可以刪除它們。所有要?jiǎng)h除的特征都存儲(chǔ)在FeatureSelector的ops屬性中,可以根據(jù)出現(xiàn)的列表手動(dòng)刪除特征。另一種選擇是使用remove內(nèi)置函數(shù)。

使用remove函數(shù)刪除特征時(shí)需傳入methods。如果想要使用所有的實(shí)現(xiàn)方法,只需傳入methods = 'all'。

 

 

該方法刪除特征后返回一個(gè)dataframe,在機(jī)器學(xué)習(xí)過程中創(chuàng)建的one-hot編碼特征也被刪除:

train_removed_all = fs.remove(methods = 'all', keep_one_hot=False)
Removed 187 features including one-hot features.

在開始操作之前先檢查要?jiǎng)h除的特征!原始數(shù)據(jù)集存儲(chǔ)在FeatureSelector的data屬性中作為備份!

結(jié)論

在訓(xùn)練機(jī)器學(xué)習(xí)模型之前,特征選擇器類實(shí)現(xiàn)了一些常見的刪除特征的操作。它具有選擇要?jiǎng)h除特征和繪圖的功能。類內(nèi)方法可以單獨(dú)運(yùn)行,也可以為實(shí)現(xiàn)高效的工作流而同時(shí)運(yùn)行。

Missing方法, collinear方法和single_unique方法都是具有確定性的,而基于特征重要性的方法會(huì)隨著每次運(yùn)行而改變。像機(jī)器學(xué)習(xí)一樣,特征選擇很大程度上是經(jīng)驗(yàn)主義。測試多組數(shù)據(jù)才能得到最佳結(jié)果,所以最好多嘗試幾次。特征選擇器提供了一種快速評估特征選擇參數(shù)的方法。

文章原標(biāo)題《a-feature-selection-tool-for-machine-learning-in-python》

作者: William Koehrsen譯者:吳兆青

標(biāo)簽: 代碼

版權(quán)申明:本站文章部分自網(wǎng)絡(luò),如有侵權(quán),請聯(lián)系:west999com@outlook.com
特別注意:本站所有轉(zhuǎn)載文章言論不代表本站觀點(diǎn)!
本站所提供的圖片等素材,版權(quán)歸原作者所有,如需使用,請與原作者聯(lián)系。

上一篇:政府大數(shù)據(jù)應(yīng)用的反思;大數(shù)據(jù)分析應(yīng)用常見的困難

下一篇:一個(gè)企業(yè)的大數(shù)據(jù)分析平臺(tái)的構(gòu)建方法