最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

Boruta-機器學習特征篩選另一種思維

2022-04-13 12:22 作者:python風控模型  | 我要投稿

Boruta是一種特征篩選方法,其核心是基于兩個思想:shadow features和binomial distribution,具體信息可參考論文?Feature Selection with the Boruta Package。

特征選擇方法已經很多,包括iv,feature importance,shap為什么還需要Boruta?

不同變量篩選方法看問題角度不一樣,有其優(yōu)勢和局限性。我不建議用一種方法去篩選變量,而是參考多種方法。機器學習得到的變量解釋要和業(yè)務邏輯交叉驗證。有的機器學習變量篩選方法不是100%準確,老狐貍還可以通過操作數(shù)據(jù)得到有利于自己觀點的解釋。

Boruta與已有方法在進行特征選擇時的目標導向是有區(qū)別的。

a.?Boruta進行特征選擇的目標是: 篩選出所有與因變量具有相關性的特征集合。

b. ?通常意義上在機器學習實踐過程中進行特征選擇的目標是: 篩選出可以使得當前模型cost function最小的特征集合。

通常我們進行特征選擇的時候基于如下2個規(guī)則:

  1. 如果刪掉某維特征,導致模型性能下降,則認為該特征很重要;

  2. 如果刪掉某維特征,模型性能沒有變化,則認為該特征不重要;

注意:?第1條規(guī)則顯然是正確的,但是第2條規(guī)則并不一定正確。因為,如果刪掉某維特征后模型性能沒有發(fā)生變化,這并不能充分說明該特征與因變量不相關,只能說明該特征對于該模型減小cost function沒有幫助。

Boruta的目標就是選擇出所有與因變量相關的特征集合,而不是針對特定模型選擇出可以使得模型cost function最小的特征集合。Boruta算法的意義在于可以幫助我們更全面的理解因變量的影響因素,從而更好、更高效地進行特征選擇。

Boruta算法思想:

將原特征real features進行shuffle構造出shadow features,將real features與shadow features拼接作為特征矩陣進行訓練,最后以shadow features的feature importance得分最為參考base, 從real features中選出與因變量真正相關的特征集合。


shadow features

在Boruta中,特征之間并不會相互競爭,相反地,它們會和他們的隨機版本相互競爭。實踐中,假設我們的特征是X,

我們對X中的每個特征進行隨機shuffle,這些shuffle過后的特征被稱為shadow features;

這個時候,我們將shadow dataframe附加到原始dataframe以獲得一個新的dataframe(我們稱之為X_boruta),它的特征列數(shù)是原先X的兩倍。然后我們使用一個模型對其進行訓練,得到每個特征的特征重要性。

一個特征如果是有用的話,那么它的特征重要性肯定要比它的隨機版本要好。

這個時候我們只需要將原始特征中特征重要性高于隨機版本中最高的特征重要性分數(shù)的那些原始特征進行保留即可。但這可能會存在一個問題,這個模型或許訓練的不是很好,特征重要性不是很準,于是我們就需要第二個策略。


2、binomial distribution


這一步相信大家并不陌生,核心就是不斷迭代,如果一次存在僥幸,那么我們就迭代多次,比如20次,100次,然后取特重要性的均值,在進行比較篩選。這是最基礎的想法,在Boruta中,特征的最大不確定性水平以50%的概率表示,就像扔硬幣一樣。由于每個獨立的實驗可以給出一個二元結果(命中或不命中),一系列的n個試驗遵循二項分布,在python中,二項式分布的概率mass函數(shù)可以通過下面方式計算得到:


于是我們得到:

圖片

其中:

  • 紅色區(qū)域是拒絕區(qū)域:這塊區(qū)域的特征被認為是噪聲,因此它們可以被直接丟棄;

  • 藍色區(qū)域是猶豫區(qū)域:Boruta對這個區(qū)域的特征難以抉擇;

  • 綠色區(qū)域是可接受區(qū)域:這里的特征被認為是預測性的,一般可以被保留。



Boruta算法流程:

注:

圖片

其中: ? oob_acc_after_perputation是指將該維特征進行shuffle之后再用out_of_bag的樣本在單棵數(shù)上的accuracy。


BorutaPy?

borutapy是用 Python 重新編碼的原始 R 包,增加了一些額外的功能。一些改進包括:

  • 更快的運行時間,感謝 scikit-learn

  • 類似 Scikit-learn 的界面

  • 與 scikit-learn 的任何集成方法兼容

  • 自動 n_estimator 選擇

  • 特征排名

  • 特征重要性來自 Gini 雜質而不是 RandomForest R 包的 MDA。

我們強烈建議使用深度在 3-7 之間的修剪樹。

此外,在大量使用原始代碼后,我確定了一些可以改進/更改核心算法的領域,以使其不那么嚴格并且更適用于生物數(shù)據(jù),其中 Bonferroni 校正可能過于苛刻。

百分位數(shù)作為閾值
原始方法使用陰影特征的最大值作為閾值,以確定哪個真實特征比陰影特征做得更好。這可能過于苛刻。

為了控制這一點,我添加了 perc 參數(shù),該參數(shù)設置陰影特征重要性的百分位數(shù),算法將其用作閾值。默認值為 100,這相當于像 Boruta 的 R 版本那樣取最大值,但可以放寬。請注意,由于這是百分位數(shù),它會隨著數(shù)據(jù)集的大小而變化。擁有數(shù)千個功能,它不像在 Boruta 運行結束時有幾十個功能那么嚴格。

多重測試的兩步校正 多重測試
的校正通過將其設為兩步過程來放松,而不是嚴格的一步 Bonferroni 校正。

我們首先需要糾正,因為在每次迭代中,我們都會針對零假設測試一些特征(一個特征的性能是否比隨機預期的要好)。為此,Bonferroni 校正用于原始代碼中,已知在這種情況下過于嚴格(至少對于生物數(shù)據(jù)),并且原始代碼也校正 n 個特征,即使我們在第 50 次迭代中我們只剩下 k<<n 個特征。出于這個原因,校正的第一步是廣泛使用的 Benjamini Hochberg FDR。

然而,在此之后,我們還需要考慮這樣一個事實,即我們在每次迭代中使用相同的測試一遍又一遍地測試相同的特性。對于這種情況,Bonferroni 是完美的,因此通過將 p 值閾值與當前迭代指數(shù)相除來應用它。

如果不需要這兩個步驟校正,則必須將 two_step 參數(shù)設置為 False,然后(perc=100)BorutaPy 的行為與 R 版本完全相同。


borutapy算法的參數(shù)

estimator?: object

A supervised learning estimator, with a 'fit' method that returns the feature_importances_ attribute. Important features must correspond to high absolute values in the feature_importances_.

n_estimators?: int or string, default = 1000

If int sets the number of estimators in the chosen ensemble method. If 'auto' this is determined automatically based on the size of the dataset. The other parameters of the used estimators need to be set with initialisation.

perc?: int, default = 100

Instead of the max we use the percentile defined by the user, to pick our threshold for comparison between shadow and real features. The max tend to be too stringent. This provides a finer control over this. The lower perc is the more false positives will be picked as relevant but also the less relevant features will be left out. The usual trade-off. The default is essentially the vanilla Boruta corresponding to the max.

alpha?: float, default = 0.05

Level at which the corrected p-values will get rejected in both correction steps.

two_step?: Boolean, default = True

If you want to use the original implementation of Boruta with Bonferroni correction only set this to False.

max_iter?: int, default = 100

The number of maximum iterations to perform.

verbose?: int, default=0

Controls verbosity of output.

borutapy算法的屬性

n_features_?: int

The number of selected features.

support_?: array of shape [n_features]

The mask of selected features - only confirmed ones are True.

support_weak_?: array of shape [n_features]

The mask of selected tentative features, which haven't gained enough support during the max_iter number of iterations..

ranking_?: array of shape [n_features]

The feature ranking, such that?ranking_[i]?corresponds to the ranking position of the i-th feature. Selected (i.e., estimated best) features are assigned rank 1 and tentative features are assigned rank 2.



boruta算法結腸癌基因特征篩選

實戰(zhàn)案例中,用boruta算法結腸癌基因特征篩選,下圖是篩選出重要性比較高的基因。boruta算法和其他變量篩選算法篩選結果差異比較大,也有共同點。這算法能否大規(guī)模應用還需要進一步測試。

圖片
圖片


歡迎各位學習《python機器學習生物信息學》:https://ke.qq.com/course/package/31252,學習更多相關知識,加QQ群:1026993837,免費領取100G的python學習資料。

版權聲明:文章來自公眾號(python風控模型),未經許可,不得抄襲。遵循CC 4.0 BY-SA版權協(xié)議,轉載請附上原文出處鏈接及本聲明。




Boruta-機器學習特征篩選另一種思維的評論 (共 條)

分享到微博請遵守國家法律
临高县| 静安区| 常熟市| 彰化市| 琼中| 景德镇市| 雅安市| 怀集县| 鄯善县| 荔波县| 海安县| 准格尔旗| 长寿区| 渭源县| 牟定县| 桂东县| 常山县| 禄劝| 文登市| 云安县| 梧州市| 黎川县| 南汇区| 新民市| 科技| 阆中市| 鄱阳县| 邵武市| 莲花县| 酉阳| 西林县| 乐昌市| 新泰市| 南京市| 龙井市| 辛集市| 长宁县| 比如县| 梁山县| 阳城县| 云阳县|