久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

5種數(shù)據(jù)科學(xué)家必須知道的特征選擇方法

 雪凝星月_ 2019-10-30


關(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,。

  • 基于過濾器:指定一些指標(biāo)并基于此過濾特征,例如:相關(guān)性/卡方檢驗(yàn),。

  • 基于包裝器:包裝器方法將選擇一組特征視為搜索問題,,例如:遞歸特征消除方法,。

  • 嵌入式:嵌入式方法使用具有內(nèi)置特征選擇方法的算法,例如:Lasso和RF有自己的特征選擇方法,。

下面介紹上面提及的也是常用的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è)特征,。

def cor_selector(X, y,num_feats):    cor_list = []    feature_name = X.columns.tolist()    # calculate the correlation with y for each feature    for i in X.columns.tolist():        cor = np.corrcoef(X[i], y)[0, 1]        cor_list.append(cor)    # replace NaN with 0    cor_list = [0 if np.isnan(i) else i for i in cor_list]    # feature name    cor_feature = X.iloc[:,np.argsort(np.abs(cor_list))[-num_feats:]].columns.tolist()    # feature selection? 0 for not select, 1 for select    cor_support = [True if i in cor_feature else False for i in feature_name]    return cor_support, cor_featurecor_support, cor_feature = cor_selector(X, y,num_feats)print(str(len(cor_feature)), 'selected features')

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 SelectKBestfrom sklearn.feature_selection import chi2from sklearn.preprocessing import MinMaxScalerX_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. 遞歸特征消除

這是一種基于包裝器的方法。正如之前所說,,包裝器方法將特征選擇視為搜索問題,。

來自sklearn文檔:遞歸特征消除(RFE)的目標(biāo)是通過遞歸地考慮越來越小的特征集來選擇特征,。首先,,在初始特征集上訓(xùn)練估計(jì)器,,并且通過 coef_ 屬性或通過 feature_importances_ 屬性獲得每個(gè)特征的重要性。然后,,從當(dāng)前的一組特征中刪除最不重要的特征,。在修剪的集合上遞歸地重復(fù)該過程,直到最終到達(dá)所需數(shù)量的要選擇的特征,。

我們可以在該方法上使用任何估算器,。在這種情況下,我們使用 LogisticRegression 和 RFE 觀察 coef_  屬性的 LogisticRegression 對(duì)象,。

from sklearn.feature_selection import RFEfrom sklearn.linear_model import LogisticRegressionrfe_selector = RFE(estimator=LogisticRegression(), n_features_to_select=num_feats, step=10, verbose=5)rfe_selector.fit(X_norm, y)rfe_support = rfe_selector.get_support()rfe_feature = X.loc[:,rfe_support].columns.tolist()print(str(len(rfe_feature)), 'selected features')

4. Lasso:從模型中選擇

資源:https:///?source=post_page

這是一種嵌入式方法,。如前所述,嵌入式方法使用具有內(nèi)置特征選擇方法的算法,。

例如,,Lasso和RF有自己的特征選擇方法。Lasso Regularizer強(qiáng)制將許多特征權(quán)重歸零,。這里使用Lasso來選擇變量,。

from sklearn.feature_selection import SelectFromModelfrom 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ī)森林中,最終的特征重要性是所有決策樹特征重要性的平均值,。

from sklearn.feature_selection import SelectFromModelfrom sklearn.ensemble import RandomForestClassifier embeded_rf_selector = SelectFromModel(RandomForestClassifier(n_estimators=100), max_features=num_feats)embeded_rf_selector.fit(X, y) embeded_rf_support = embeded_rf_selector.get_support()embeded_rf_feature = X.loc[:,embeded_rf_support].columns.tolist()print(str(len(embeded_rf_feature)), 'selected features')

我們也可以使用LightGBM,,或者XGBoost對(duì)象,只要它有一個(gè)feature_importances_屬性,。

from sklearn.feature_selection import SelectFromModelfrom 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ì)特征排序,。

# put all selection togetherfeature_selection_df = pd.DataFrame({'Feature':feature_name, 'Pearson':cor_support, 'Chi-2':chi_support, 'RFE':rfe_support, 'Logistics':embeded_lr_support,                                    'Random Forest':embeded_rf_support, 'LightGBM':embeded_lgb_support})# count the selected times for each featurefeature_selection_df['Total'] = np.sum(feature_selection_df, axis=1)# display the top 100feature_selection_df = feature_selection_df.sort_values(['Total','Feature'] , ascending=False)feature_selection_df.index = range(1, len(feature_selection_df)+1)feature_selection_df.head(num_feats)

上面結(jié)果的意思是:檢查特征是否獲得了基于所有方法的篩選,。我們可以看到Reactions和LongPassing在高評(píng)級(jí)選手中具有出色的屬性。正如預(yù)期的那樣,,Ballcontrol和Finishing名列前茅,。

參考鏈接:

https:///the-5-feature-selection-algorithms-every-data-scientist-need-to-know-3a6b566efd2


    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點(diǎn),。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,,謹(jǐn)防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多