關(guān)鍵時(shí)間,,第一時(shí)間送達(dá)! 編譯 | 艾奇 作者 | Rahul Agarwal 來源 | towardsdatascience 數(shù)據(jù)決定了模型的上限,,算法只能無線逼近這個(gè)上限,。模型好壞很大程度上還是取決于數(shù)據(jù)的質(zhì)量,、特征的選擇。 面對(duì)海量數(shù)據(jù)我們無法手動(dòng)挨個(gè)EDA挑選,,那么如何科學(xué)地使用方法篩選特征顯得尤為重要,,今天個(gè)大家介紹數(shù)據(jù)科學(xué)家必須掌握的5種常用特征選擇方法。 1,、特征選擇的原因 我們可能會(huì)想為什么不適用所有特征呢,?特征選擇的意義到底是什么? 有這么簡單的三個(gè)原因: 1. 維度災(zāi)難 - 過度擬合圖片來源:https:///?source=post_page 一般經(jīng)驗(yàn)是當(dāng)數(shù)據(jù)中的列數(shù)多于行數(shù),,可能會(huì)對(duì)模型產(chǎn)生不好的影響,,即模型會(huì)過度地?cái)M合數(shù)據(jù),導(dǎo)致模少泛化能力,。此外,,大量特征使得模型體積龐大,耗時(shí),,并且難以在生產(chǎn)中實(shí)施,。 2. 可解釋性我們希望模型簡單并可解釋。當(dāng)有非常多的特征時(shí),,將會(huì)失去可解釋性,。 3. garbage in - garbage out很多數(shù)時(shí)候,我們會(huì)有許多非信息化特征,。例如,,名稱或ID變量這些無意義的特征,如果不進(jìn)行特征選擇,,那么這些質(zhì)量比較差的輸入特征也就會(huì)產(chǎn)生質(zhì)量差的輸出,。 2、如何進(jìn)行特征選擇,? 核心就是只選擇有用的特征,,可以通過很多方式來做,通??梢苑譃槿N,。
下面介紹上面提及的也是常用的5種特種選擇方法,,這些方法在Scikit-learn中已經(jīng)有了封裝好的方法可以直接使用。 使用特征kaggle的一個(gè)數(shù)據(jù)集作為示例,。 https://www./mlwhiz/feature-selection-using-football-data?source=post_page 3,、五種特征選擇方法 進(jìn)行選擇之前完成了一些基本的預(yù)處理,例如刪除空值和獨(dú)熱編碼,。并使用以下方法將問題轉(zhuǎn)換為分類問題: y = traindf ['Overall']> = 87 這里使用High Overall代表優(yōu)秀球員,,數(shù)據(jù)集(X)如下所示,有223列,。 訓(xùn)練數(shù)據(jù)X 1. 皮爾遜相關(guān)(pearson)這是一種基于過濾器的方法,。 在數(shù)據(jù)集中目標(biāo)變量和數(shù)值特征之間Pearson相關(guān)的絕對(duì)值。根據(jù)此標(biāo)準(zhǔn)保留前n個(gè)特征,。
2. 卡方(chi-squared)這是另一種基于過濾器的方法,。 在這種方法中,計(jì)算目標(biāo)和數(shù)值變量之間的卡方度量,,只選擇具有最大卡方值的變量,。 圖片來源:https:///?source=post_page 創(chuàng)建一個(gè)小例子說明如何計(jì)算樣本的卡方統(tǒng)計(jì)量。 假設(shè)數(shù)據(jù)集中有75個(gè)右前鋒和25個(gè)非右前鋒,,觀察到40個(gè)右前鋒表現(xiàn)較好,,35個(gè)表現(xiàn)不太好。這是否意味著右前鋒球員會(huì)影響整體表現(xiàn),? 觀測(cè)值和預(yù)期計(jì)數(shù) 計(jì)算卡方值: 要做到這一點(diǎn),,如果兩個(gè)分類變量之間確實(shí)存在獨(dú)立性,首先要找出期望落入每個(gè)桶(bucket)中的值,。 這很簡單,,將每個(gè)單元格的行總和和列總和相乘,并將其除以總觀察值,。 所以好/不好右前鋒的Bucket預(yù)期值= 25(行總和)* 60(列總和)/ 100(總觀察值) 由于數(shù)據(jù)中有25%是不好的右前鋒,,表中觀察值為60個(gè)優(yōu)秀選手,因此有15名球員,。 接著可以使用下面的公式來對(duì)4個(gè)單元格求和: 卡方統(tǒng)計(jì)量具有非負(fù)數(shù)值和分類特征,,可以從數(shù)據(jù)集中獲得卡方特征: from sklearn.feature_selection import SelectKBest from sklearn.feature_selection import chi2 from sklearn.preprocessing import MinMaxScaler X_norm = MinMaxScaler().fit_transform(X) chi_selector = SelectKBest(chi2, k=num_feats) chi_selector.fit(X_norm, y) chi_support = chi_selector.get_support() chi_feature = X.loc[:,chi_support].columns.tolist() print(str(len(chi_feature)), 'selected features') 3. 遞歸特征消除這是一種基于包裝器的方法。正如之前所說,,包裝器方法將特征選擇視為搜索問題,。
我們可以在該方法上使用任何估算器,。在這種情況下,我們使用 LogisticRegression 和 RFE 觀察 coef_ 屬性的 LogisticRegression 對(duì)象,。
4. Lasso:從模型中選擇資源:https:///?source=post_page 這是一種嵌入式方法,。如前所述,嵌入式方法使用具有內(nèi)置特征選擇方法的算法,。 例如,,Lasso和RF有自己的特征選擇方法。Lasso Regularizer強(qiáng)制將許多特征權(quán)重歸零,。這里使用Lasso來選擇變量,。 from sklearn.feature_selection import SelectFromModel from sklearn.linear_model import LogisticRegression embeded_lr_selector = SelectFromModel(LogisticRegression(penalty='l1'), max_features=num_feats) embeded_lr_selector.fit(X_norm, y) embeded_lr_support = embeded_lr_selector.get_support() embeded_lr_feature = X.loc[:,embeded_lr_support].columns.tolist() print(str(len(embeded_lr_feature)), 'selected features') 5. 基于樹:SelectFromModel我們還可以使用隨機(jī)森林,根據(jù)特征的重要性選擇特征,。 我們使用每個(gè)決策樹中的節(jié)點(diǎn)雜質(zhì)計(jì)算特征的重要性,。在隨機(jī)森林中,最終的特征重要性是所有決策樹特征重要性的平均值,。
我們也可以使用LightGBM,,或者XGBoost對(duì)象,只要它有一個(gè)feature_importances_屬性,。 from sklearn.feature_selection import SelectFromModel from lightgbm import LGBMClassifier lgbc=LGBMClassifier(n_estimators=500, learning_rate=0.05, num_leaves=32, colsample_bytree=0.2, reg_alpha=3, reg_lambda=1, min_split_gain=0.01, min_child_weight=40) embeded_lgb_selector = SelectFromModel(lgbc, max_features=num_feats) embeded_lgb_selector.fit(X, y) embeded_lgb_support = embeded_lgb_selector.get_support() embeded_lgb_feature = X.loc[:,embeded_lgb_support].columns.tolist() print(str(len(embeded_lgb_feature)), 'selected features') 將多種選擇器組合使用 也可以嘗試組合多種選擇方法進(jìn)行特征篩選,,計(jì)算各種特征出現(xiàn)的頻次,并按照頻次對(duì)特征排序,。
上面結(jié)果的意思是:檢查特征是否獲得了基于所有方法的篩選,。我們可以看到Reactions和LongPassing在高評(píng)級(jí)選手中具有出色的屬性。正如預(yù)期的那樣,,Ballcontrol和Finishing名列前茅,。 參考鏈接: https:///the-5-feature-selection-algorithms-every-data-scientist-need-to-know-3a6b566efd2 |
|