丁香五月天婷婷久久婷婷色综合91|国产传媒自偷自拍|久久影院亚洲精品|国产欧美VA天堂国产美女自慰视屏|免费黄色av网站|婷婷丁香五月激情四射|日韩AV一区二区中文字幕在线观看|亚洲欧美日本性爱|日日噜噜噜夜夜噜噜噜|中文Av日韩一区二区

您正在使用IE低版瀏覽器,為了您的雷峰網(wǎng)賬號(hào)安全和更好的產(chǎn)品體驗(yàn),強(qiáng)烈建議使用更快更安全的瀏覽器
此為臨時(shí)鏈接,僅用于文章預(yù)覽,將在時(shí)失效
人工智能 正文
發(fā)私信給AI研習(xí)社-譯站
發(fā)送

2

機(jī)器學(xué)習(xí)小竅門:Python 幫你進(jìn)行特征選擇

本文作者: AI研習(xí)社-譯站 2018-07-25 17:01
導(dǎo)語(yǔ):感謝科技,不然機(jī)器學(xué)習(xí)可以累死你

雷鋒網(wǎng)按:本文為雷鋒字幕組編譯的技術(shù)博客,原標(biāo)題 A Feature Selection Tool for Machine Learning in Python,作者為 William Koehrsen。

翻譯 | 胡瑛皓、程煒       校對(duì) |龍柯宇     整理 |  MY 


特征選擇,也就是從數(shù)據(jù)集中找出并選擇最有用特征的過(guò)程,是機(jī)器學(xué)習(xí)工作流中一個(gè)非常重要的步驟。不必要的特征降低了訓(xùn)練速度,降低了模型的可解釋性,最重要的是降低了測(cè)試數(shù)據(jù)集的泛化能力。

在做機(jī)器學(xué)習(xí)問(wèn)題的過(guò)程中,我們總是在重復(fù)應(yīng)用一些特征選擇方法,這很令人沮喪。因此我用 Python 建了一個(gè)特征選擇類,代碼已上傳至 GitHub。這個(gè) FeatureSelector 包含一些通用的特征選擇方法:

  1. 缺失值比例高的特征 

  2. 共線 (高相關(guān))特征 

  3. 決策樹中的零貢獻(xiàn)度特征 

  4. 低貢獻(xiàn)度特征 

  5. 單值特征 

本文將通過(guò)一個(gè)機(jī)器學(xué)習(xí)數(shù)據(jù)集例子來(lái)展示如何使用 FeatureSelector。可以看到該工具如何快速實(shí)現(xiàn)這些方法,讓機(jī)器學(xué)習(xí)工作流更高效。 

完整的代碼可在 GitHub 上找到,歡迎各位任何形式的貢獻(xiàn)。特征選擇器在不斷改進(jìn),它將根據(jù)社區(qū)的需要不斷修正和完善!


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

本文將使用 Kaggle 的 Home Credit Default Risk 機(jī)器學(xué)習(xí)競(jìng)賽里的樣本數(shù)據(jù)。(想?yún)⒓颖荣惖目梢钥?a target="_blank" rel=nofollow>這篇文章)。 完整的數(shù)據(jù)集可以在此處下載, 本文將使用樣本做演示用。

機(jī)器學(xué)習(xí)小竅門:Python 幫你進(jìn)行特征選擇

樣本數(shù)據(jù)。TARGET 為分類標(biāo)簽

競(jìng)賽是一個(gè)監(jiān)督分類問(wèn)題。這是一個(gè)非常合適的數(shù)據(jù)集,因?yàn)樗泻芏嗳笔е?、大量高度相關(guān)(共線)的特征以及許多無(wú)助于機(jī)器學(xué)習(xí)建模的不相關(guān)特征。

機(jī)器學(xué)習(xí)小竅門:Python 幫你進(jìn)行特征選擇


建立實(shí)例

為了建立一個(gè) FeatureSelector 類的實(shí)例,我們需要輸入一個(gè)結(jié)構(gòu)化的數(shù)據(jù)集,其中行記錄觀測(cè)結(jié)果,列記錄特征。有些方法中我們可以只使用特征來(lái)學(xué)習(xí),但另外一些重要的方法也需要標(biāo)簽。由于這是一個(gè)監(jiān)督分類的任務(wù),我們會(huì)同時(shí)用到特征和標(biāo)簽。

(在 feature_selector.py 所在目錄中執(zhí)行以下代碼)

機(jī)器學(xué)習(xí)小竅門:Python 幫你進(jìn)行特征選擇


方法說(shuō)明

特征選擇供有 5 個(gè)方法來(lái)找到需要剔除的特征。我們可以訪問(wèn)任意標(biāo)識(shí)出的特征然后手工從數(shù)據(jù)集中剔除它們,或用特征選擇器里的 remove 方法。 

本文將依次瀏覽這些定位特征的方法,并展示如何一次性執(zhí)行這些方法。此外 FeatureSelector 還有一些繪圖功能,因?yàn)樵跈C(jī)器學(xué)習(xí)中可視化數(shù)據(jù)是非常關(guān)鍵的。


缺失值

第一個(gè)找到需要被剔除的特征的方法非常直接:缺失值比率超過(guò)指定閾值。以下代碼可以定位出所有缺失值比例超過(guò) 60% 的特征(粗體為輸出內(nèi)容)。

機(jī)器學(xué)習(xí)小竅門:Python 幫你進(jìn)行特征選擇

我們可以從 dataframe 看到這些特征的缺失值比例:

機(jī)器學(xué)習(xí)小竅門:Python 幫你進(jìn)行特征選擇

機(jī)器學(xué)習(xí)小竅門:Python 幫你進(jìn)行特征選擇

可以訪問(wèn) FeatureSelector 里的 ops 屬性來(lái)看到這些被標(biāo)記移除的特征。它存儲(chǔ)為一個(gè) Python dict,其中每一項(xiàng)以 list 形式存儲(chǔ)特征名稱。

機(jī)器學(xué)習(xí)小竅門:Python 幫你進(jìn)行特征選擇

最后,用以下命令繪制一下所有特征缺失值比例的分布情況:

機(jī)器學(xué)習(xí)小竅門:Python 幫你進(jìn)行特征選擇

機(jī)器學(xué)習(xí)小竅門:Python 幫你進(jìn)行特征選擇


共線特征

共線特征也就是那些互相之間高度相關(guān)的特征。由于其較高的方差和較低的可解釋性,它們將導(dǎo)致測(cè)試集數(shù)據(jù)泛化能力變差。 

identify_collinear 方法基于指定的相關(guān)系數(shù)值,找到那些共線特征。對(duì)于每對(duì)相關(guān)的特征,程序識(shí)別出其中一個(gè)特征,并剔除它(因?yàn)橹恍枰蕹渲幸粋€(gè)):

機(jī)器學(xué)習(xí)小竅門:Python 幫你進(jìn)行特征選擇

可以用熱力圖簡(jiǎn)潔地可視化特征的相關(guān)性。圖中顯示了所有至少與一個(gè)特征的相關(guān)系數(shù)大于閾值的特征: fs.plot_collinear() 與之前方式類似,

機(jī)器學(xué)習(xí)小竅門:Python 幫你進(jìn)行特征選擇

機(jī)器學(xué)習(xí)小竅門:Python 幫你進(jìn)行特征選擇

在此之前,我們可通過(guò) ops 字典訪問(wèn)整個(gè)高相關(guān)度的(將被剔除的)特征列表, 也可用 dataframe 方式查看那些高度相關(guān)的特征對(duì)。

機(jī)器學(xué)習(xí)小竅門:Python 幫你進(jìn)行特征選擇

機(jī)器學(xué)習(xí)小竅門:Python 幫你進(jìn)行特征選擇

 如果想直接了解整個(gè)數(shù)據(jù)集,我們也可以繪制數(shù)據(jù)集中所有特征的相關(guān)系數(shù)熱力圖。只要在方法中傳入 plot_all = True:

機(jī)器學(xué)習(xí)小竅門:Python 幫你進(jìn)行特征選擇


零重要度特征 

前面兩種方法可以用于任何結(jié)構(gòu)的數(shù)據(jù)集。并且在給定閾值下,任何時(shí)候得到的結(jié)果都是一樣的。接下來(lái)一種方法適用于有監(jiān)督的機(jī)器學(xué)習(xí)。我們必須有用于訓(xùn)練的標(biāo)簽,結(jié)果也是不一定的。identify_zero_importance 函數(shù)根據(jù) GBM 學(xué)習(xí)模型找到零重要度特征。

通過(guò)基于樹的機(jī)器學(xué)習(xí)模型,比如 Boosting 集成方法,我們可以找到特征重要度。重要度的絕對(duì)值沒(méi)有相對(duì)值重要。通過(guò)相對(duì)值,我們可以決定與任務(wù)相關(guān)性最強(qiáng)的特征。我們也可以使用特征重要度,去除零重要度特征完成特征選擇。在基于樹的模型中我們并不使用零重要度特征來(lái)分割各點(diǎn),所以我們可以將它們?nèi)コ挥绊懩P托阅堋?nbsp;

FeatureSelector 使用 GBM 從 LightGBM library 中找到特征重要度。運(yùn)行 10 次以上 GBM 求平均得到特征重要性,從而減少方差。同時(shí),模型使用驗(yàn)證集的 early stopping(有關(guān)閉選項(xiàng)),避免訓(xùn)練數(shù)據(jù)的過(guò)擬合。 

下面的代碼調(diào)用這種方法,輸出零重要度特征:

機(jī)器學(xué)習(xí)小竅門:Python 幫你進(jìn)行特征選擇

輸入?yún)?shù):

  • task: 任務(wù)是「分類」或是「回歸」 

  • eval_metric:用于 early stopping 的矩陣 (如果禁用 early stopping,這項(xiàng)不是必須) 

  • n_iterations:用于求特征重要性平均值的訓(xùn)練運(yùn)行次數(shù) 

  • early_stopping:是否將 early stopping 用于模型訓(xùn)練 

這時(shí)使用 plot_feature_importances 得到兩張曲線圖:

機(jī)器學(xué)習(xí)小竅門:Python 幫你進(jìn)行特征選擇

機(jī)器學(xué)習(xí)小竅門:Python 幫你進(jìn)行特征選擇

機(jī)器學(xué)習(xí)小竅門:Python 幫你進(jìn)行特征選擇

左邊的 plot_n 是最重要特征(畫出了重要性的歸一化項(xiàng),它們的和為 1)。右邊的是累計(jì)的重要性相對(duì)于特征的個(gè)數(shù),縱軸是累計(jì)重要度的 threshold。這個(gè)例子中是 99%。

對(duì)于基于重要度的方法,以下兩點(diǎn)需要記?。?nbsp;

  • GBM 的訓(xùn)練具有隨機(jī)性,也就是說(shuō)每次運(yùn)行模型得到的特征重要度都是不同的 

這不應(yīng)成為主要的問(wèn)題(最重要的特征不會(huì)突然變成最不重要的),但它會(huì)改變一些特征的排序。它也可能影響到識(shí)別出的零重要度特征數(shù)。你并不需要對(duì)特征重要度每次變化的問(wèn)題感到吃驚。

  • 為了訓(xùn)練機(jī)器學(xué)習(xí)模型,首先將特征進(jìn)行獨(dú)熱編碼。這就意味著在建模時(shí)加入的獨(dú)熱編碼的特征可能是一些被識(shí)別為零重要度的特征

在特征去除階段有去除任何獨(dú)熱編碼特征的選項(xiàng),然而如果在特征選擇之后進(jìn)行機(jī)器學(xué)習(xí),我們必須對(duì)特征進(jìn)行獨(dú)熱編碼。


低重要度特征 

接下來(lái)的方法建立在零重要度函數(shù)上,它使用模型的特征重要度來(lái)進(jìn)行之后的選擇。identify_low_importance 函數(shù)找到最低重要度的特征,這些特征對(duì)特定的總重要度沒(méi)有任何貢獻(xiàn)。 

例如,下面的調(diào)用函數(shù)找到最低重要度的特征。它并不需要達(dá)到 99% 的總重要度: 

機(jī)器學(xué)習(xí)小竅門:Python 幫你進(jìn)行特征選擇

基于總重要度及這些信息的曲線,GBM 將很多特征判斷為與學(xué)習(xí)無(wú)關(guān)。這種方法每次訓(xùn)練得到的結(jié)果并不相同。 

在 dataframe 中查看特征重要度: 

機(jī)器學(xué)習(xí)小竅門:Python 幫你進(jìn)行特征選擇

機(jī)器學(xué)習(xí)小竅門:Python 幫你進(jìn)行特征選擇

low_importance 方法來(lái)源于一種使用主成分分析(PCA)的方法。它通常只保留所需的主成分以將方差百分比保持在特定值上(比如 95%)。總重要度的百分比的計(jì)算也是基于這個(gè)想法。 

這種基于特征重要度的方法只在使用基于樹的模型做預(yù)測(cè)時(shí)有用。除了具有隨機(jī)性之外,這種基于重要度的方法是一個(gè)黑盒子。我們并不知道模型為什么將某種特征判斷為無(wú)關(guān)。如果使用這些方法,將它們運(yùn)行幾次并觀察結(jié)果如何變化。創(chuàng)建多個(gè)不同參數(shù)的數(shù)據(jù)集進(jìn)行測(cè)試。


唯一值特征

最后一個(gè)是很基礎(chǔ)的一種方法:找到任何有單一值的列。一個(gè)只有唯一值的特征無(wú)法用于機(jī)器學(xué)習(xí),因?yàn)檫@個(gè)特征的方差為 0。比如,一個(gè)基于樹的模型無(wú)法在只有一個(gè)值的特征上進(jìn)行劃分 (因?yàn)椴荒軐⒂^察對(duì)象分組)。

與其他方法不同,這里沒(méi)有參數(shù)可以選擇: 

機(jī)器學(xué)習(xí)小竅門:Python 幫你進(jìn)行特征選擇

我們可以畫出每個(gè)分類唯一值的柱狀圖:

機(jī)器學(xué)習(xí)小竅門:Python 幫你進(jìn)行特征選擇

機(jī)器學(xué)習(xí)小竅門:Python 幫你進(jìn)行特征選擇

 需要記住的一點(diǎn)是默認(rèn)在 Pandas 中計(jì)算唯一值之前先去掉非數(shù)元素(NaNs)。


去除特征 

一旦我們識(shí)別出需要去掉的特征,我們有兩個(gè)選項(xiàng)來(lái)去掉它們。所有需要去掉的特征都存儲(chǔ)在 FeatureSelector 的字典 ops 當(dāng)中。我們可以使用這個(gè)清單來(lái)手動(dòng)去掉這些特征,另一個(gè)選項(xiàng)是使用 remove 的內(nèi)建函數(shù)。 

使用這種方法,我們使用 methods 來(lái)去掉特征。如果我們希望使用所有方法,我們只需要在函數(shù)中放入 methods = 'all'。

機(jī)器學(xué)習(xí)小竅門:Python 幫你進(jìn)行特征選擇

通過(guò)這種方法返回一個(gè)已經(jīng)去除了特征的 datafram,同時(shí)也去除了在機(jī)器學(xué)習(xí)過(guò)程中創(chuàng)建的獨(dú)熱編碼特征:

機(jī)器學(xué)習(xí)小竅門:Python 幫你進(jìn)行特征選擇

在進(jìn)一步操作之前,先檢查將要被去除的特征是一個(gè)好主意!原始的數(shù)據(jù)集被作為備份存儲(chǔ)在 FeatureSelector 的 data 特性中。


一次運(yùn)行所有方法

比起單獨(dú)運(yùn)行這些方法,我們可以使用 identify_all 來(lái)運(yùn)行所有的方法。它為每種方法建立了一個(gè)參數(shù)字典:

機(jī)器學(xué)習(xí)小竅門:Python 幫你進(jìn)行特征選擇

由于我們重新運(yùn)行了模型,你需要注意到總特征的個(gè)數(shù)將會(huì)變化,然后就可以調(diào)用 remove 函數(shù)來(lái)去除特征。


結(jié)論 

在訓(xùn)練機(jī)器學(xué)習(xí)模型之前,F(xiàn)eature Selector 類會(huì)執(zhí)行一些常用操作來(lái)去除特征。它提供識(shí)別特征并去除的函數(shù),并將之可視化。為了提高工作效率,可以單獨(dú)或一次運(yùn)行所有方法。 

missing,collinear和 single_unique 方法結(jié)果是確定的。而基于特征重要度的方法每次運(yùn)行的結(jié)果都會(huì)變化。特征選擇和機(jī)器學(xué)習(xí)很像,它們都需要大量經(jīng)驗(yàn),需要測(cè)試多種組合來(lái)找到最優(yōu)答案。最好是在過(guò)程中嘗試多種配置,特征選擇器提供一種方法快速評(píng)估特征選擇的參數(shù)。 

和往常一樣,歡迎各位提出反饋和建設(shè)性的意見(jiàn)。我想強(qiáng)調(diào),我正在 FeatureSelector 尋求幫助。任何人都可以在 GitHub 上做出貢獻(xiàn)。對(duì)所有使用這個(gè)工具并提出的建議的人表示感謝!也可以通過(guò)推特 @koehrsen_will 和我聯(lián)系。 


原文鏈接:https://towardsdatascience.com/a-feature-selection-tool-for-machine-learning-in-python-b64dd23710f0

機(jī)器學(xué)習(xí)小竅門:Python 幫你進(jìn)行特征選擇


雷鋒網(wǎng)雷鋒網(wǎng) 

雷峰網(wǎng)原創(chuàng)文章,未經(jīng)授權(quán)禁止轉(zhuǎn)載。詳情見(jiàn)轉(zhuǎn)載須知。

機(jī)器學(xué)習(xí)小竅門:Python 幫你進(jìn)行特征選擇

分享:
相關(guān)文章

知情人士

AI研習(xí)社(yanxishe.com)譯站頻道,傳播前沿人工智能知識(shí),讓語(yǔ)言不再成為學(xué)習(xí)知識(shí)的門檻。(原雷鋒字幕組)
當(dāng)月熱門文章
最新文章
請(qǐng)?zhí)顚懮暾?qǐng)人資料
姓名
電話
郵箱
微信號(hào)
作品鏈接
個(gè)人簡(jiǎn)介
為了您的賬戶安全,請(qǐng)驗(yàn)證郵箱
您的郵箱還未驗(yàn)證,完成可獲20積分喲!
請(qǐng)驗(yàn)證您的郵箱
立即驗(yàn)證
完善賬號(hào)信息
您的賬號(hào)已經(jīng)綁定,現(xiàn)在您可以設(shè)置密碼以方便用郵箱登錄
立即設(shè)置 以后再說(shuō)