在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

數(shù)據(jù)科學(xué)高效工具:feature-selector,幫你快速完成特征選擇

lviY_AI_shequ ? 來源:lq ? 2018-12-13 09:56 ? 次閱讀

▍前言

本篇主要介紹一個(gè)基礎(chǔ)的特征選擇工具feature-selector,feature-selector是由Feature Labs的一名數(shù)據(jù)科學(xué)家williamkoehrsen寫的特征選擇庫。feature-selector主要對(duì)以下類型的特征進(jìn)行選擇:

具有高missing-values百分比的特征

具有高相關(guān)性的特征

對(duì)模型預(yù)測(cè)結(jié)果無貢獻(xiàn)的特征(即zero importance)

對(duì)模型預(yù)測(cè)結(jié)果只有很小貢獻(xiàn)的特征(即low importance)

具有單個(gè)值的特征(即數(shù)據(jù)集中該特征取值的集合只有一個(gè)元素)

從上面可以看出feature-selector確實(shí)是非?;A(chǔ)的特征選擇工具,正因?yàn)榉浅5幕A(chǔ),所以才非常的常用(這也是為什么williamkoehrsen要寫這個(gè)特征選擇庫的原因),在拿到一個(gè)數(shù)據(jù)集的時(shí)候,往往都需要將上述類型的特征從數(shù)據(jù)集中剔除掉。針對(duì)上面五種類型的特征,feature-selector分別提供以下五個(gè)函數(shù)來對(duì)此處理:

identify_missing(*)

identify_collinear(*)

identify_zero_importance(*)

identify_low_importance(*)

identify_single_unique(*)

▍數(shù)據(jù)集選擇

在這里使用kaggle上的訓(xùn)練數(shù)據(jù)集。原訓(xùn)練數(shù)據(jù)集稍微有點(diǎn)大,30+萬行(150+MB),pandas導(dǎo)入數(shù)據(jù)都花了一點(diǎn)時(shí)間,為此我從原數(shù)據(jù)集中采樣了1萬+行數(shù)據(jù)作為此次練習(xí)的數(shù)據(jù)集。數(shù)據(jù)集采樣代碼如下:

https://www.kaggle.com/c/home-credit-default-risk/data

importpandasaspddata=pd.read_csv('./appliation_train.csv')#從原數(shù)據(jù)中采樣5%的數(shù)據(jù)sample=data.sample(frac=0.05)#重新創(chuàng)建索引sample.reset_index(drop=True)#將采樣數(shù)據(jù)存到'application_train_sample.csv'文件中sample.to_csv('./application_train_sample.csv')

▍f(xié)eature-selector用法

導(dǎo)入數(shù)據(jù)并創(chuàng)建feaure-selector實(shí)例

importpandasaspd#注意:#作者并沒有把feature-selector發(fā)布到pypi上,所以不能使用pip和conda進(jìn)行安裝,只能手動(dòng)#從github下載下來,然后把feature_selector.py文件放到當(dāng)前工作目錄,然后再進(jìn)行import操作。fromfeature_selectorimportFeatureSelectordata=pd.read_csv('./application_train_sample.csv',index_col=0)#數(shù)據(jù)集中TARGET字段為對(duì)應(yīng)樣本的labeltrain_labels=data.TARGET#獲取allfeaturestrain_features=data.drop(columns='TARGET')#創(chuàng)建feature-selector實(shí)例,并傳入features和labelsfs=FeatureSelector(data=train_features,lables=train_labels)1

特征選取方法

(1)identify_missing

該方法用于選擇missing value 百分比大于指定值(通過missing_threshold指定百分比)的feature。該方法能應(yīng)用于監(jiān)督學(xué)習(xí)和非監(jiān)督學(xué)習(xí)的特征選擇。

#選擇出missingvalue百分比大于60%的特征fs.identify_missing(missing_threshold=0.6)#查看選擇出的特征fs.ops['missing']#繪制所有特征missingvalue百分比的直方圖fs.plot_missing()

圖1. 所有特征missing value百分比的直方圖

該方法內(nèi)部使用pandas 統(tǒng)計(jì)數(shù)據(jù)集中所有feature的missing value 的百分比,然后選擇出百分比大于閾值的特征,詳見feature-selector.py的114-136行。

https://github.com/WillKoehrsen/feature-selector/blob/master/feature_selector/feature_selector.py#L114-L136

(2) identify_collinear

該方法用于選擇相關(guān)性大于指定值(通過correlation_threshold指定值)的feature。該方法同樣適用于監(jiān)督學(xué)習(xí)和非監(jiān)督學(xué)習(xí)。

#不對(duì)feature進(jìn)行one-hotencoding(默認(rèn)為False),然后選擇出相關(guān)性大于98%的feature,fs.identify_collinear(correlation_threshold=0.98,one_hot=False)#查看選擇的featurefs.ops['collinear']#繪制選擇的特征的相關(guān)性heatmapfs.plot_collinear()#繪制所有特征的相關(guān)性heatmap

圖2. 選擇的特征的相關(guān)矩陣圖

圖3. 所有特征相關(guān)矩陣圖

該方法內(nèi)部主要執(zhí)行步驟如下:

1.根據(jù)參數(shù)'one_hot'對(duì)數(shù)據(jù)集特征進(jìn)行one-hot encoding(調(diào)用pd.get_dummies方法)。如果'one_hot=True'則對(duì)特征將進(jìn)行one-hot encoding,并將編碼的特征與原數(shù)據(jù)集整合起來組成新的數(shù)據(jù)集,如果'one_hot=False'則什么不做,進(jìn)入下一步;

2.計(jì)算步驟1得出數(shù)據(jù)集的相關(guān)矩陣C(通過DataFrame.corr(),注意 C也為一個(gè)DateFrame),并取相關(guān)矩陣的上三角部分得到 C_upper;

3.遍歷C_upper的每一列(即每一個(gè)特征),如果該列的任何一個(gè)相關(guān)值大于correlation_threshold,則取出該列,并放到一個(gè)列表中(該列表中的feature,即具有high 相關(guān)性的特征,之后會(huì)從數(shù)據(jù)集去除);

4.到這一步,做什么呢?回到源碼看一波就知道了;

具體請(qǐng)見feature-selector.py的157-227行。

(3) identify_zero_importance

該方法用于選擇對(duì)模型預(yù)測(cè)結(jié)果毫無貢獻(xiàn)的feature(即zero importance,從數(shù)據(jù)集中去除或者保留該feature對(duì)模型的結(jié)果不會(huì)有任何影響)。

該方法以及之后的identify_low_importance都只適用于監(jiān)督學(xué)習(xí)(即需要label,這也是為什么實(shí)例化feature-selector時(shí)需要傳入labels參數(shù)的原因)。feature-selector通過用數(shù)據(jù)集訓(xùn)練一個(gè)梯度提升機(jī)(Gradient Boosting machine, GBM),然后由GBM得到每一個(gè)feature的重要性分?jǐn)?shù),對(duì)所有特征的重要性分?jǐn)?shù)進(jìn)行歸一化處理,選擇出重要性分?jǐn)?shù)等于零的feature。

為了使計(jì)算得到的feature重要性分?jǐn)?shù)具有很小的方差,identify_zero_importance內(nèi)部會(huì)對(duì)GBM訓(xùn)練多次,取多次訓(xùn)練的平均值,得到最終的feature重要性分?jǐn)?shù)。同時(shí)為了防止過擬合,identify_zero_importance內(nèi)部從數(shù)據(jù)集中抽取一部分作為驗(yàn)證集,在訓(xùn)練GBM的時(shí)候,計(jì)算GBM在驗(yàn)證集上的某一metric,當(dāng)metric滿足一定條件時(shí),停止GBM的訓(xùn)練。

#選擇zeroimportance的feature,##參數(shù)說明:#task:'classification'/'regression',如果數(shù)據(jù)的模型是分類模型選擇'classificaiton',#否則選擇'regression'#eval_metric:判斷提前停止的metric.forexample,'auc'forclassification,and'l2'forregressionproblem#n_iteration:訓(xùn)練的次數(shù)#early_stopping:True/False,是否需要提前停止fs.identify_zero_importance(task='classification',eval_metric='auc',n_iteration=10,early_stopping=True)#查看選擇出的zeroimportancefeaturefs.ops['zero_importance']#繪制featureimportance關(guān)系圖#參數(shù)說明:#plot_n:指定繪制前plot_n個(gè)最重要的feature的歸一化importance條形圖,如圖4所示#threshold:指定importance分?jǐn)?shù)累積和的閾值,用于指定圖4中的藍(lán)色虛線.#藍(lán)色虛線指定了importance累積和達(dá)到threshold時(shí),所需要的feature個(gè)數(shù)。#注意:在計(jì)算importance累積和之前,對(duì)feature列表安裝featureimportance的大小#進(jìn)行了降序排序fs.plot_feature_importances(threshold=0.99,plot_n=12)

圖4. 前12個(gè)最重要的feature歸一化后的importance分?jǐn)?shù)的條形圖

圖5. feature 個(gè)數(shù)與feature importance累積和的關(guān)系圖

需要注意GBM訓(xùn)練過程是隨機(jī)的,所以每次運(yùn)行identify_zero_importance得到feature importance分?jǐn)?shù)都會(huì)發(fā)生變化,但按照importance排序之后,至少前幾個(gè)最重要的feature順序不會(huì)變化。

該方法內(nèi)部主要執(zhí)行了以下步驟:

1.對(duì)各個(gè)feature進(jìn)行one-hot encoding,然后將one-hot encoding的feature和原數(shù)據(jù)集合并成新的數(shù)據(jù)集(使用pd.get_dummies完成);

2.根據(jù)參數(shù) task 的取值,實(shí)例化lightgbm.LGBMClassifier, 或者實(shí)例化 lightgbm.LGBMRegressor model;

3.根據(jù)early_stopping的取值選擇是否需要提前停止訓(xùn)練,并向model.fit傳入相應(yīng)的參數(shù),然后開始訓(xùn)練model;

4.根據(jù)model得到該次訓(xùn)練的feature importance;

5.執(zhí)行n_iterations次步驟1-4;

6.取多次訓(xùn)練的feature importance的平均值,得到最終的feature importance;

7.選擇出feature importance等于0的feature;

8.到這一步,主要步驟完成了,其他部分請(qǐng)查看源碼。

具體請(qǐng)見feature-selector.py的229-342行。

(4) identify_low_importance

該方法是使用identify_zero_importance計(jì)算的結(jié)果,選擇出對(duì)importance累積和達(dá)到指定閾值沒有貢獻(xiàn)的feature(這樣說有點(diǎn)拗口),即圖5中藍(lán)色虛線之后的feature。該方法只適用于監(jiān)督學(xué)習(xí)。identify_low_importance有點(diǎn)類似于PCA中留下主要分量去除不重要的分量。

#選擇出對(duì)importance累積和達(dá)到99%沒有貢獻(xiàn)的featurefs.identify_low_importance(cumulative_importance=0.99)#查看選擇出的featurefs.ops['low_importance']

該方法選擇出的feature其實(shí)包含了zero importance的feature。內(nèi)部實(shí)現(xiàn)沒什么可說的,具體請(qǐng)見feature-selector.py的344-378行。

(5) identify_single_unique

該方法用于選擇只有單個(gè)取值的feature,單個(gè)值的feature的方差為0,對(duì)于模型的訓(xùn)練不會(huì)有任何作用(從信息熵的角度看,該feature的熵為0)。該方法可應(yīng)用于監(jiān)督學(xué)習(xí)和非監(jiān)督學(xué)習(xí)。

#選擇出只有單個(gè)值的featurefs.identify_single_unique()#查看選擇出的featurefs.ops['single_unique']#繪制所有featureuniquevalue的直方圖fs.plot_unique()

圖6. 所有feature unique value的直方圖

該方法內(nèi)部的內(nèi)部實(shí)現(xiàn)很簡(jiǎn)單,只是通過DataFrame.nunique方法統(tǒng)計(jì)了每個(gè)feature取值的個(gè)數(shù),然后選擇出nunique==1等于1的feature。具體請(qǐng)見feature-selector.py的138-155行。

從數(shù)據(jù)集去除選擇的特征

上面介紹了feature-selector提供的特征選擇方法,這些方法從數(shù)據(jù)集中識(shí)別了feature,但并沒有從數(shù)據(jù)集中將這些feature去除。feature-selector中提供了remove方法將選擇的特征從數(shù)據(jù)集中去除,并返回去除特征之后的數(shù)據(jù)集。

#去除所有類型的特征#參數(shù)說明:#methods:#desc:需要去除哪些類型的特征#type:string/list-likeobject#values:'all'或者是['missing','single_unique','collinear','zero_importance','low_importance']#中多個(gè)方法名的組合#keep_one_hot:#desc:是否需要保留one-hotencoding的特征#type:boolean#values:True/False#default:Truetrain_removed=fs.remove(methods='all',keep_one_hot=False)

注意:調(diào)用remove函數(shù)的時(shí)候,必須先調(diào)用特征選擇函數(shù),即identify_*函數(shù)。

該方法的實(shí)現(xiàn)代碼在feature-selector.py的430-510行。

一次性選擇所有類型的特征

feature-selector除了能每次運(yùn)行一個(gè)identify_*函數(shù)來選擇一種類型特征外,還可以使用identify_all函數(shù)一次性選擇5種類型的特征選。

#注意:#少了下面任何一個(gè)參數(shù)都會(huì)報(bào)錯(cuò),raiseValueErrorfs.identify_all(selection_params= {'missing_threshold':0.6,'correlation_threshold':0.98,'task':'classification','eval_metric':'auc','cumulative_importance':0.99})

▍總結(jié)

feature-selector屬于非?;A(chǔ)的特征選擇工具,它提供了五種特征的選擇函數(shù),每個(gè)函數(shù)負(fù)責(zé)選擇一種類型的特征。一般情況下,在對(duì)某一數(shù)據(jù)集構(gòu)建模型之前,都需要考慮從數(shù)據(jù)集中去除這五種類型的特征,所以feature-selector幫你省去data-science生活中一部分重復(fù)性的代碼工作。

如果有興趣和充足的時(shí)間,建議閱讀一下feature-selector的代碼,代碼量很少,七百多行,相信看了之后對(duì)feature-selector各個(gè)函數(shù)的實(shí)現(xiàn)思路以及相應(yīng)代碼實(shí)現(xiàn)有一定認(rèn)識(shí),有心者還可以貢獻(xiàn)一下自己的代碼。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 函數(shù)
    +關(guān)注

    關(guān)注

    3

    文章

    4374

    瀏覽量

    64385
  • 數(shù)據(jù)集
    +關(guān)注

    關(guān)注

    4

    文章

    1223

    瀏覽量

    25317

原文標(biāo)題:一款非常棒的特征選擇工具:feature-selector

文章出處:【微信號(hào):AI_shequ,微信公眾號(hào):人工智能愛好者社區(qū)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    使用NineData快速完成MySQL數(shù)據(jù)的差異對(duì)比!

    NineData 是一款功能強(qiáng)大的數(shù)據(jù)庫對(duì)比工具,能夠幫助企業(yè)追蹤數(shù)據(jù)庫的變化、發(fā)現(xiàn)問題并快速修復(fù)。相比其他工具,NineData 具有以下
    的頭像 發(fā)表于 08-08 15:07 ?1199次閱讀
    使用NineData<b class='flag-5'>快速</b><b class='flag-5'>完成</b>MySQL<b class='flag-5'>數(shù)據(jù)</b>的差異對(duì)比!

    Package dimensions selector gu

    Package dimensions selector guide
    發(fā)表于 03-28 14:49 ?0次下載
    Package dimensions <b class='flag-5'>selector</b> gu

    機(jī)器學(xué)習(xí)特征選擇常用算法

    特征選擇 ( Feature Selection )也稱特征子集選擇( Feature Subs
    發(fā)表于 11-16 01:28 ?8700次閱讀
    機(jī)器學(xué)習(xí)<b class='flag-5'>特征</b><b class='flag-5'>選擇</b>常用算法

    機(jī)器視覺的Gabor Feature特征表達(dá)

    在機(jī)器視覺中,gabor feature是一種比較常見的特征,因?yàn)槠淇梢院芎玫啬M人類的視覺沖擊響應(yīng)而被廣泛應(yīng)用于圖像處理, gabor feature 一般是通過對(duì)圖像與gabor filter做卷積而得到,gabor fil
    發(fā)表于 11-17 07:02 ?4788次閱讀
    機(jī)器視覺的Gabor <b class='flag-5'>Feature</b><b class='flag-5'>特征</b>表達(dá)

    一種面向高維微陣列數(shù)據(jù)的集成特征選擇算法

    特征選擇算法是微陣列數(shù)據(jù)分析的重要工具特征選擇算法的分類性能和穩(wěn)定性對(duì)微陣列
    發(fā)表于 11-28 16:25 ?0次下載
    一種面向高維微陣列<b class='flag-5'>數(shù)據(jù)</b>的集成<b class='flag-5'>特征</b><b class='flag-5'>選擇</b>算法

    十大機(jī)器學(xué)習(xí)工具數(shù)據(jù)科學(xué)工具

    2018年將會(huì)是人工智能和機(jī)器學(xué)習(xí)快速發(fā)展的一年,有專家表示:相較之下Python比Java更加接地氣,也自然而然地成為機(jī)器學(xué)習(xí)的首選語言。在數(shù)據(jù)科學(xué)方面,Python的語法與數(shù)學(xué)語法最為接近
    發(fā)表于 05-29 13:57 ?4083次閱讀

    數(shù)據(jù)科學(xué)工具數(shù)不勝數(shù)——你應(yīng)該選擇哪一個(gè)?

    我們得承認(rèn)——數(shù)據(jù)科學(xué)的范圍龐雜,每一個(gè)領(lǐng)域要求處理數(shù)據(jù)的方式各有不同,這讓許多分析家/數(shù)據(jù)科學(xué)家陷入困惑。而如果你是一位商業(yè)領(lǐng)袖,你將要
    的頭像 發(fā)表于 08-27 15:55 ?1849次閱讀

    2020年常見的20種數(shù)據(jù)科學(xué)工具,你了解多少

    執(zhí)行數(shù)據(jù)科學(xué)任務(wù)的最佳工具有哪些?作為數(shù)據(jù)科學(xué)新手,你應(yīng)該選擇哪些
    的頭像 發(fā)表于 08-27 15:56 ?4365次閱讀

    機(jī)器學(xué)習(xí)之特征提取 VS 特征選擇

    機(jī)器學(xué)習(xí)中特征選擇特征提取區(qū)別 demi 在 周四, 06/11/2020 - 16:08 提交 1. 特征提取 V.S 特征
    的頭像 發(fā)表于 09-14 16:23 ?4384次閱讀
    機(jī)器學(xué)習(xí)之<b class='flag-5'>特征</b>提取 VS <b class='flag-5'>特征</b><b class='flag-5'>選擇</b>

    特征選擇-嵌入式選擇

    嵌入式特征選擇是將特征選擇過程與學(xué)習(xí)器訓(xùn)練過程融為一體,兩者在同一個(gè)優(yōu)化過程中完成,即在學(xué)習(xí)器訓(xùn)練過程中自動(dòng)地進(jìn)行了
    發(fā)表于 10-21 10:36 ?1次下載
    <b class='flag-5'>特征</b><b class='flag-5'>選擇</b>-嵌入式<b class='flag-5'>選擇</b>

    aof-selector aof文件分析工具

    aof-selector.zip
    發(fā)表于 04-27 09:55 ?3次下載
    aof-<b class='flag-5'>selector</b> aof文件分析<b class='flag-5'>工具</b>

    常用的feature scaling方法都有哪些?

    feature scaling的方法可以分成2類,逐行進(jìn)行和逐列進(jìn)行。逐行是對(duì)每一維特征操作,逐列是對(duì)每個(gè)樣本操作,上圖為逐行操作中特征標(biāo)準(zhǔn)化的示例。
    的頭像 發(fā)表于 08-02 11:45 ?1233次閱讀

    合泰半導(dǎo)體全新發(fā)布MCU Selector App選型工具

    近日,合泰半導(dǎo)體全新MCU Selector App選型工具已正式亮相,為廣大的客戶提供一個(gè)更為便捷且容易操作的選型輔助。通過MCU Selector App選型工具,可針對(duì)Holte
    的頭像 發(fā)表于 08-17 14:56 ?1679次閱讀
    合泰半導(dǎo)體全新發(fā)布MCU <b class='flag-5'>Selector</b> App選型<b class='flag-5'>工具</b>

    使用NineData快速、高效完成Redis差異數(shù)據(jù)對(duì)比!

    NineData在Redis數(shù)據(jù)遷移場(chǎng)景下表現(xiàn)出色,可快速準(zhǔn)確完成Redis數(shù)據(jù)對(duì)比,找出不一致的key并生成詳細(xì)報(bào)告。數(shù)據(jù)對(duì)比方案需考慮
    的頭像 發(fā)表于 10-07 11:57 ?653次閱讀
    使用NineData<b class='flag-5'>快速</b>、<b class='flag-5'>高效</b><b class='flag-5'>完成</b>Redis差異<b class='flag-5'>數(shù)據(jù)</b>對(duì)比!

    合泰半導(dǎo)體全新發(fā)布MCU Selector Web選型工具

    為滿足不同用戶需求,合泰半導(dǎo)體繼推出MCU Selector App選型工具后,近日再推出MCU Selector Web選型工具,為廣大客戶提供更為全面且容易操作的選型輔助。
    的頭像 發(fā)表于 12-08 14:49 ?857次閱讀
    主站蜘蛛池模板: 狼人久草| 理论在线看 | 第九色 | 国产h视频在线观看 | 亚洲黄视频 | 国产黄色录像视频 | 超级淫小黄文大全很污的那种 | 国产网红主播精品福利大秀专区 | 色最快国产| 午夜寂寞在线一级观看免费 | 性欧美欧美之巨大69 | 天天天射| 中国黄色一级毛片 | 两性色午夜视频免费老司机 | 国产色视频网站 | 精品久草 | 奇米欧美成人综合影院 | 亚洲一区精品中文字幕 | 日韩a毛片免费全部播放完整 | 511韩国理论片在线观看 | 成年人毛片网站 | 黄色a网| 狂野欧美性色xo影院 | 色婷婷六月丁香七月婷婷 | 欧美一欧美一区二三区性 | 美女被免费视频网站九色 | 欧美男女交性过程视频 | 最新免费jlzzjlzz在线播放 | 亚洲人成网站色7799在线观看 | 免费一区二区视频 | 美国bj69video18 | 午夜手机视频 | 亚洲男人天堂2021 | 在线a亚洲老鸭窝天堂新地址 | 国产综合视频在线 | 五月婷婷综合激情网 | caopon在线| 日本5级床片全免费 | 性欧美成人依依影院 | 日本一本高清视频 | www.黄视频|