1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        基于Python的特征自動(dòng)化選擇:兩行代碼完成特征工程

        共 14420字,需瀏覽 29分鐘

         ·

        2020-10-28 16:30

        本文介紹一個(gè)特征選擇神器:特征選擇器是用于減少機(jī)器學(xué)習(xí)數(shù)據(jù)集的維數(shù)的工具,可以傻瓜式地進(jìn)行特征選擇,兩行代碼即可搞定?。?/span>

        來(lái)源:Will Koehrsen

        代碼整理及注釋翻譯:黃海廣

        代碼和數(shù)據(jù)下載地址:

        https://github.com/fengdu78/Data-Science-Notes/tree/master/9.feature-engineering/FeatureSelectorUsage

        實(shí)現(xiàn)的功能

        該選擇器基于Python編寫(xiě),有五種方法來(lái)標(biāo)識(shí)要?jiǎng)h除的特征:

        • 缺失值
        • 唯一值
        • 共線特征
        • 零重要性特征
        • 低重要性特征

        使用方法

        ?特征選擇器(Feature Selector)的用法

        在這個(gè)Jupyter文件中, 我們將使用 FeatureSelector 類(lèi)來(lái)選擇數(shù)據(jù)集中要?jiǎng)h除的特征,這個(gè)類(lèi)提供五種方法來(lái)查找要?jiǎng)h除的功能:

        1. 查找缺失分?jǐn)?shù)大于指定閾值的列
        2. 查找只有唯一值的特征
        3. 查找由相關(guān)系數(shù)大于指定值的共線特征
        4. 使用梯度提升算法查找具有零重要性的特征
        5. 使用梯度提升算法查找中查找對(duì)指定的累積特征重要性無(wú)貢獻(xiàn)的特征

        FeatureSelector 仍在進(jìn)一步開(kāi)發(fā)中! 歡迎大家在github提交PR.

        from feature_selector import FeatureSelector

        import pandas as pd

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

        該數(shù)據(jù)集被用作Kaggle上房屋信用違約風(fēng)險(xiǎn)競(jìng)賽的(https://www.kaggle.com/c/home-credit-default-risk) ?一部分(文末提供下載)。它旨在用于有監(jiān)督的機(jī)器學(xué)習(xí)分類(lèi)任務(wù),其目的是預(yù)測(cè)客戶是否會(huì)拖欠貸款。您可以在此處下載整個(gè)數(shù)據(jù)集,我們將處理10,000行的一小部分樣本。

        特征選擇器旨在用于機(jī)器學(xué)習(xí)任務(wù),但可以應(yīng)用于任何數(shù)據(jù)集?;谔卣髦匾缘姆椒ㄐ枰褂脵C(jī)器學(xué)習(xí)的監(jiān)督學(xué)習(xí)問(wèn)題。

        train = pd.read_csv('data/credit_example.csv')
        train_labels = train['TARGET']
        train.head()

        5 rows × 122 columns

        數(shù)據(jù)集中有幾個(gè)分類(lèi)列。`FeatureSelector`處理這些特征重要性的時(shí)候使用獨(dú)熱編碼。
        train = train.drop(columns = ['TARGET'])

        實(shí)施

        FeatureSelector具有用于標(biāo)識(shí)列,以除去五種特征 :

        • identify_missing(查找缺失值)
        • identify_single_unique(查找唯一值)
        • identify_collinear(查找共線特征)
        • identify_zero_importance (查找零重要特征)
        • identify_low_importance(查找低重要特征)

        這些方法找到要根據(jù)指定條件刪除的特征。標(biāo)識(shí)的特征存儲(chǔ)在 FeatureSelectorops 屬性(Python詞典)中。我們可以手動(dòng)刪除已識(shí)別的特征,也可以使用 FeatureSelector中的刪除特征函數(shù)真正刪除特征。

        創(chuàng)建實(shí)例

        FeatureSelector 僅需要一個(gè)在行中具有觀察值而在列中具有特征的數(shù)據(jù)集(標(biāo)準(zhǔn)結(jié)構(gòu)化數(shù)據(jù))。我們正在處理機(jī)器學(xué)習(xí)的分類(lèi)問(wèn)題,因此我們也需要訓(xùn)練的標(biāo)簽。

        fs = FeatureSelector(data = train, labels = train_labels)

        1. 缺失值

        第一種特征選擇方法很簡(jiǎn)單:找到丟失分?jǐn)?shù)大于指定閾值的任何列。在此示例中,我們將使用閾值0.6,這對(duì)應(yīng)于查找缺失值超過(guò)60%的特征。(此方法不會(huì)首先對(duì)特征進(jìn)行一次獨(dú)熱編碼)。

        fs.identify_missing(missing_threshold=0.6)
        17 features with greater than 0.60 missing values.

        可以通過(guò) FeatureSelector 對(duì)象的ops詞典訪問(wèn)已確定要?jiǎng)h除的特征。

        missing_features = fs.ops['missing']
        missing_features[:10]
        ['OWN_CAR_AGE',
        'YEARS_BUILD_AVG',
        'COMMONAREA_AVG',
        'FLOORSMIN_AVG',
        'LIVINGAPARTMENTS_AVG',
        'NONLIVINGAPARTMENTS_AVG',
        'YEARS_BUILD_MODE',
        'COMMONAREA_MODE',
        'FLOORSMIN_MODE',
        'LIVINGAPARTMENTS_MODE']

        我們還可以繪制數(shù)據(jù)集中所有列的缺失列分?jǐn)?shù)的直方圖。

        fs.plot_missing()

        有關(guān)缺失分?jǐn)?shù)的詳細(xì)信息,我們可以訪問(wèn)missing_stats屬性,這是所有特征缺失分?jǐn)?shù)的DataFrame。

        fs.missing_stats.head(10)

        missing_fraction
        COMMONAREA_AVG0.6953
        COMMONAREA_MODE0.6953
        COMMONAREA_MEDI0.6953
        NONLIVINGAPARTMENTS_AVG0.6945
        NONLIVINGAPARTMENTS_MODE0.6945
        NONLIVINGAPARTMENTS_MEDI0.6945
        LIVINGAPARTMENTS_MEDI0.6846
        LIVINGAPARTMENTS_AVG0.6846
        LIVINGAPARTMENTS_MODE0.6846
        FONDKAPREMONT_MODE0.6820

        2. 唯一值

        下一個(gè)方法很簡(jiǎn)單:找到只有一個(gè)唯一值的所有特征。(這不會(huì)對(duì)特征進(jìn)行獨(dú)熱編碼)。

        fs.identify_single_unique()
        4 features with a single unique value.


        single_unique = fs.ops['single_unique']
        single_unique
        ['FLAG_MOBIL', 'FLAG_DOCUMENT_10', 'FLAG_DOCUMENT_12', 'FLAG_DOCUMENT_17']

        我們可以繪制數(shù)據(jù)集中每個(gè)特征中唯一值數(shù)量的直方圖。

        fs.plot_unique()

        最后,我們可以訪問(wèn)一個(gè)DataFrame,其中包含每個(gè)特征的唯一值數(shù)量。

        fs.unique_stats.sample(5)

        nunique
        DAYS_EMPLOYED4210
        REGION_RATING_CLIENT3
        FLAG_DOCUMENT_202
        FLAG_DOCUMENT_152
        NONLIVINGAREA_MEDI993

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

        該方法基于皮爾森相關(guān)系數(shù)找到共線特征對(duì)。對(duì)于高于指定閾值(就絕對(duì)值而言)的每一對(duì),它標(biāo)識(shí)要?jiǎng)h除的變量之一。我們需要傳遞一個(gè) correlation_threshold。

        此方法基于在:https://chrisalbon.com/machine_learning/feature_selection/drop_highly_correlated_features/ 中找到的代碼。

        對(duì)于每一對(duì),將要?jiǎng)h除的特征是在DataFrame中列排序方面排在最后的特征。(除非one_hot = True,否則此方法不會(huì)預(yù)先對(duì)數(shù)據(jù)進(jìn)行一次獨(dú)熱編碼。因此,僅在數(shù)字列之間計(jì)算相關(guān)性)

        fs.identify_collinear(correlation_threshold=0.975)
        24 features with a correlation magnitude greater than 0.97.
        correlated_features = fs.ops['collinear']
        correlated_features[:5]
        ['AMT_GOODS_PRICE',
        'FLAG_EMP_PHONE',
        'YEARS_BUILD_MODE',
        'COMMONAREA_MODE',
        'ELEVATORS_MODE']

        我們可以查看閾值以上相關(guān)性的熱圖。將要?jiǎng)h除的特征位于x軸上。

        fs.plot_collinear()

        要繪制數(shù)據(jù)中的所有相關(guān)性,我們可以將 plot_all = True 傳遞給 plot_collinear函數(shù)。

        fs.plot_collinear(plot_all=True)
        fs.identify_collinear(correlation_threshold=0.98)
        fs.plot_collinear()
        21 features with a correlation magnitude greater than 0.98.

        要查看閾值以上的相關(guān)細(xì)節(jié),我們?cè)L問(wèn)record_collinear 屬性,它是一個(gè)DataFrame。?drop_feature 將被刪除,并且對(duì)于每個(gè)將被刪除的特征,它與 corr_feature可能存在多個(gè)相關(guān)性,而這些相關(guān)性都高于correlation_threshold

        fs.record_collinear.head()

        corr_featurecorr_valuedrop_feature
        0AMT_CREDIT0.987232AMT_GOODS_PRICE
        1DAYS_EMPLOYED-0.999533FLAG_EMP_PHONE
        2YEARS_BUILD_AVG0.992120YEARS_BUILD_MODE
        3COMMONAREA_AVG0.988074COMMONAREA_MODE
        4FLOORSMAX_AVG0.984663FLOORSMAX_MODE
        ?
        4. 零重要特征?
        此方法依賴(lài)于機(jī)器學(xué)習(xí)模型來(lái)識(shí)別要?jiǎng)h除的特征。因此,它是有標(biāo)簽的監(jiān)督學(xué)習(xí)問(wèn)題。該方法通過(guò)使用LightGBM庫(kù)中實(shí)現(xiàn)的梯度增強(qiáng)機(jī)找到特征重要性。

        為了減少所計(jì)算的特征重要性的差異,默認(rèn)情況下對(duì)模型進(jìn)行了10次訓(xùn)練。默認(rèn)情況下,還使用驗(yàn)證集(訓(xùn)練數(shù)據(jù)的15%)通過(guò)提前停止訓(xùn)練模型,以識(shí)別要訓(xùn)練的最優(yōu)估計(jì)量??梢詫⒁韵聟?shù)傳遞給identify_zero_importance 方法:

        • task: 可以是 classificationregression。指標(biāo)和標(biāo)簽必須與任務(wù)匹配。
        • eval_metric: 用于提前停止的度量(例如,用于分類(lèi)的auc或用于回歸的l2 )。要查看可用指標(biāo)的列表,請(qǐng)參閱LightGBM文檔:(http://testlightgbm.readthedocs.io/en/latest/Parameters.html#metric-parameters)。
        • n_iterations: 訓(xùn)練次數(shù)。特征重要性是在訓(xùn)練運(yùn)行中平均得出的 (默認(rèn)為10)。
        • early_stopping: 訓(xùn)練模型時(shí)是否使用提前停止(默認(rèn)= True)。當(dāng)驗(yàn)證集的性能對(duì)于指定數(shù)量的估計(jì)量(此實(shí)現(xiàn)中默認(rèn)為100)不再降低時(shí),提早停止將停止訓(xùn)練估計(jì)量(決策樹(shù))。早停是一種正則化形式,用于防止訓(xùn)練數(shù)據(jù)過(guò)擬合。

        首先對(duì)數(shù)據(jù)進(jìn)行一次獨(dú)熱編碼,以供模型使用。這意味著某些零重要性特征可以通過(guò)一鍵編碼來(lái)創(chuàng)建。要查看單編碼的列,我們可以訪問(wèn) FeatureSelectorone_hot_features

        注意:與其他方法相比,模型的特征重要性是不確定的(具有少許隨機(jī)性)。每次運(yùn)行此方法時(shí),其結(jié)果都可能更改。

        fs.identify_zero_importance(task = 'classification', eval_metric = 'auc',
        n_iterations = 10, early_stopping = True)
        Training Gradient Boosting Model

        Training until validation scores don't improve for 100 rounds.
        Early stopping, best iteration is:
        [57] valid_0's auc: 0.760957 valid_0's binary_logloss: 0.250579
        Training until validation scores don't improve for 100 rounds.
        Early stopping, best iteration is:
        [29] valid_0's auc: 0.681283 valid_0's binary_logloss: 0.266277
        Training until validation scores don't improve for 100 rounds.
        Early stopping, best iteration is:
        [50] valid_0's auc: 0.73881 valid_0's binary_logloss: 0.257822
        Training until validation scores don't improve for 100 rounds.
        Early stopping, best iteration is:
        [34] valid_0's auc: 0.720575 valid_0's binary_logloss: 0.262094
        Training until validation scores don't improve for 100 rounds.
        Early stopping, best iteration is:
        [48] valid_0's auc: 0.769376 valid_0's binary_logloss: 0.247709
        Training until validation scores don't improve for 100 rounds.
        Early stopping, best iteration is:
        [35] valid_0's auc: 0.713877 valid_0's binary_logloss: 0.262254
        Training until validation scores don't improve for 100 rounds.
        Early stopping, best iteration is:
        [76] valid_0's auc: 0.753081 valid_0's binary_logloss: 0.251867
        Training until validation scores don't improve for 100 rounds.
        Early stopping, best iteration is:
        [70] valid_0's auc: 0.722385 valid_0's binary_logloss: 0.259535
        Training until validation scores don't improve for 100 rounds.
        Early stopping, best iteration is:
        [45] valid_0's auc: 0.752703 valid_0's binary_logloss: 0.252175
        Training until validation scores don't improve for 100 rounds.
        Early stopping, best iteration is:
        [49] valid_0's auc: 0.757385 valid_0's binary_logloss: 0.250356

        81 features with zero importance after one-hot encoding.

        運(yùn)行梯度提升模型需要對(duì)特征進(jìn)行獨(dú)熱編碼。這些特征保存在 FeatureSelectorone_hot_features 屬性中。原始特征保存在base_features中。

        one_hot_features = fs.one_hot_features
        base_features = fs.base_features
        print('There are %d original features' % len(base_features))
        print('There are %d one-hot features' % len(one_hot_features))
        There are 121 original features
        There are 134 one-hot features

        FeatureSelectordata 屬性保存原始DataFrame。獨(dú)熱編碼后, data_all屬性將保留原始數(shù)據(jù)以及獨(dú)熱編碼特征。

        fs.data_all.head(10)

        10 rows × 255 columns

        我們可以使用多種方法來(lái)檢查特征重要性的結(jié)果。首先,我們可以訪問(wèn)具有零重要性的特征列表。
        zero_importance_features = fs.ops['zero_importance']
        zero_importance_features[10:15]
        ['ORGANIZATION_TYPE_Transport: type 1',
        'ORGANIZATION_TYPE_Security',
        'FLAG_DOCUMENT_15',
        'FLAG_DOCUMENT_17',
        'ORGANIZATION_TYPE_Religion']

        畫(huà)出特征重要性

        使用 plot_feature_importances 的特征重要性畫(huà)圖將向我們顯示 plot_n 最重要的特征(按歸一化比例將特征加總為1)。它還向我們顯示了累積特征重要性與特征數(shù)量之間的關(guān)系。

        當(dāng)我們繪制特征重要性時(shí),我們可以傳遞一個(gè)閾值,該閾值標(biāo)識(shí)達(dá)到指定的累積特征重要性所需的特征數(shù)量。例如,threshold = 0.99將告訴我們占總重要性的99%所需的特征數(shù)量。

        fs.plot_feature_importances(threshold = 0.99, plot_n = 12)
        111 features required for 0.99 of cumulative importance

        FeatureSelector中的 feature_importances 屬性中可以訪問(wèn)所有的特征重要性。

        fs.feature_importances.head(10)

        featureimportancenormalized_importancecumulative_importance
        0EXT_SOURCE_2145.20.0981740.098174
        1EXT_SOURCE_3127.70.0863420.184517
        2EXT_SOURCE_182.70.0559160.240433
        3DAYS_BIRTH71.40.0482760.288709
        4DAYS_REGISTRATION64.10.0433400.332049
        5DAYS_ID_PUBLISH59.30.0400950.372143
        6SK_ID_CURR57.70.0390130.411156
        7DAYS_EMPLOYED55.50.0375250.448682
        8DAYS_LAST_PHONE_CHANGE47.00.0317780.480460
        9AMT_INCOME_TOTAL41.00.0277210.508181
        我們可以使用這些結(jié)果來(lái)僅選擇“”個(gè)最重要的特征。例如,如果我們希望排名前100位的重要性最高,則可以執(zhí)行以下操作。
        one_hundred_features = list(fs.feature_importances.loc[:99, 'feature'])
        len(one_hundred_features)
        100

        5. 低重要性特征

        此方法使用梯度提升算法(必須首先運(yùn)行identify_zero_importance)通過(guò)查找達(dá)到指定的累積總特征重要性所需的最低特征重要性的特征,來(lái)構(gòu)建特征重要性。例如,如果我們輸入0.99,則將找到最不重要的特征重要性,這些特征總的不到總特征重要性的99%。

        使用此方法時(shí),我們必須已經(jīng)運(yùn)行了identify_zero_importance ,并且需要傳遞一個(gè)cumulative_importance ,該值占總特征重要性的一部分。

        **注意:**此方法建立在梯度提升模型的重要性基礎(chǔ)之上,并且還是不確定的。我建議使用不同的參數(shù)多次運(yùn)行這兩種方法,并測(cè)試每個(gè)結(jié)果的特征集,而不是只選擇一個(gè)數(shù)字。

        fs.identify_low_importance(cumulative_importance = 0.99)
        110 features required for cumulative importance of 0.99 after one hot encoding.
        129 features do not contribute to cumulative importance of 0.99.

        要?jiǎng)h除的低重要性特征是指那些對(duì)指定的累積重要性無(wú)貢獻(xiàn)的特征。這些特征也可以在 ops 詞典中找到。

        low_importance_features = fs.ops['low_importance']
        low_importance_features[:5]
        ['NAME_FAMILY_STATUS_Widow',
        'WEEKDAY_APPR_PROCESS_START_SATURDAY',
        'ORGANIZATION_TYPE_Business Entity Type 2',
        'ORGANIZATION_TYPE_Business Entity Type 1',
        'NAME_INCOME_TYPE_State servant']

        刪除特征

        一旦確定了要?jiǎng)h除的特征,便可以通過(guò)多種方式刪除這些特征。我們可以訪問(wèn)removal_ops詞典中的任何功能列表,并手動(dòng)刪除列。我們還可以使用 remove 方法,傳入標(biāo)識(shí)我們要?jiǎng)h除的特征的方法。

        此方法返回結(jié)果數(shù)據(jù),然后我們可以將其用于機(jī)器學(xué)習(xí)。仍然可以在特征選擇器的 data 屬性中訪問(wèn)原始數(shù)據(jù)。

        請(qǐng)注意用于刪除特征的方法!在使用刪除特征之前,最好先檢查將要remove的特征。

        train_no_missing = fs.remove(methods = ['missing'])
        Removed 17 features.
        train_no_missing_zero = fs.remove(methods = ['missing', 'zero_importance'])
        Removed 98 features.

        要從所有方法中刪除特征,請(qǐng)傳入 method='all'。在執(zhí)行此操作之前,我們可以使用check_removal檢查將刪除了多少個(gè)特征。這將返回已被識(shí)別為要?jiǎng)h除的所有特征的列表。

        all_to_remove = fs.check_removal()
        all_to_remove[10:25]
        Total of 156 features identified for removal

        ['FLAG_OWN_REALTY_Y',
        'FLAG_DOCUMENT_19',
        'ORGANIZATION_TYPE_Agriculture',
        'FLOORSMIN_MEDI',
        'ORGANIZATION_TYPE_Restaurant',
        'NAME_HOUSING_TYPE_With parents',
        'NONLIVINGAREA_MEDI',
        'NAME_INCOME_TYPE_Pensioner',
        'HOUSETYPE_MODE_specific housing',
        'ORGANIZATION_TYPE_Industry: type 5',
        'ORGANIZATION_TYPE_Realtor',
        'OCCUPATION_TYPE_Cleaning staff',
        'ORGANIZATION_TYPE_Industry: type 12',
        'OCCUPATION_TYPE_Realty agents',
        'ORGANIZATION_TYPE_Trade: type 6']

        現(xiàn)在我們可以刪除所有已識(shí)別的特征。

        train_removed = fs.remove(methods = 'all')
        ['missing', 'single_unique', 'collinear', 'zero_importance', 'low_importance'] methods have been run

        Removed 156 features.

        處理獨(dú)熱特征

        如果我們查看返回的DataFrame,可能會(huì)注意到原始數(shù)據(jù)中沒(méi)有的幾個(gè)新列。這些是在對(duì)數(shù)據(jù)進(jìn)行獨(dú)熱編碼以進(jìn)行機(jī)器學(xué)習(xí)時(shí)創(chuàng)建的。要?jiǎng)h除所有獨(dú)熱特征,我們可以將 keep_one_hot = False 傳遞給 remove 方法。

        train_removed_all = fs.remove(methods = 'all', keep_one_hot=False)
        ['missing', 'single_unique', 'collinear', 'zero_importance', 'low_importance'] methods have been run

        Removed 190 features including one-hot features.
        print('Original Number of Features', train.shape[1])
        print('Final Number of Features: ', train_removed_all.shape[1])
        Original Number of Features 121
        Final Number of Features: 65

        使用所有方法的替代選項(xiàng)

        如果我們不想一次運(yùn)行一個(gè)識(shí)別方法,則可以使用identify_all 在一次調(diào)用中運(yùn)行所有方法。對(duì)于此功能,我們需要傳入?yún)?shù)字典以用于每種單獨(dú)的識(shí)別方法。

        以下代碼在一個(gè)調(diào)用中完成了上述步驟。

        fs = FeatureSelector(data = train, labels = train_labels)

        fs.identify_all(selection_params = {'missing_threshold': 0.6, 'correlation_threshold': 0.98,
        'task': 'classification', 'eval_metric': 'auc',
        'cumulative_importance': 0.99})
        17 features with greater than 0.60 missing values.

        4 features with a single unique value.

        21 features with a correlation magnitude greater than 0.98.

        Training Gradient Boosting Model

        Training until validation scores don't improve for 100 rounds.
        Early stopping, best iteration is:
        [46] valid_0's auc: 0.743917 valid_0's binary_logloss: 0.254668
        Training until validation scores don't improve for 100 rounds.
        Early stopping, best iteration is:
        [82] valid_0's auc: 0.766619 valid_0's binary_logloss: 0.244264
        Training until validation scores don't improve for 100 rounds.
        Early stopping, best iteration is:
        [55] valid_0's auc: 0.72614 valid_0's binary_logloss: 0.26157
        Training until validation scores don't improve for 100 rounds.
        Early stopping, best iteration is:
        [81] valid_0's auc: 0.756286 valid_0's binary_logloss: 0.251242
        Training until validation scores don't improve for 100 rounds.
        Early stopping, best iteration is:
        [39] valid_0's auc: 0.686351 valid_0's binary_logloss: 0.269367
        Training until validation scores don't improve for 100 rounds.
        Early stopping, best iteration is:
        [41] valid_0's auc: 0.744124 valid_0's binary_logloss: 0.255549
        Training until validation scores don't improve for 100 rounds.
        Early stopping, best iteration is:
        [90] valid_0's auc: 0.761742 valid_0's binary_logloss: 0.249119
        Training until validation scores don't improve for 100 rounds.
        Early stopping, best iteration is:
        [49] valid_0's auc: 0.751569 valid_0's binary_logloss: 0.254504
        Training until validation scores don't improve for 100 rounds.
        Early stopping, best iteration is:
        [76] valid_0's auc: 0.726789 valid_0's binary_logloss: 0.257181
        Training until validation scores don't improve for 100 rounds.
        Early stopping, best iteration is:
        [46] valid_0's auc: 0.714889 valid_0's binary_logloss: 0.260482

        80 features with zero importance after one-hot encoding.

        115 features required for cumulative importance of 0.99 after one hot encoding.
        124 features do not contribute to cumulative importance of 0.99.

        150 total features out of 255 identified for removal after one-hot encoding.
        train_removed_all_once = fs.remove(methods = 'all', keep_one_hot = True)
        ['missing', 'single_unique', 'collinear', 'zero_importance', 'low_importance'] methods have been run

        Removed 150 features.
        fs.feature_importances.head()

        featureimportancenormalized_importancecumulative_importance
        0EXT_SOURCE_2165.30.0910740.091074
        1EXT_SOURCE_3154.70.0852340.176309
        2EXT_SOURCE_197.50.0537190.230028
        3DAYS_BIRTH84.60.0466120.276639
        4DAYS_REGISTRATION75.90.0418180.318457

        由于特征重要性已更改,因此刪除的特征數(shù)略有差異。由缺失的(missing)、單一的(single_unique)和共線( collinear)確定要?jiǎng)h除的特征數(shù)量將保持不變,因?yàn)樗鼈兪谴_定性的,但是由于多次訓(xùn)練模型,零重要性( zero_importance )和低重要性(low_importance )的特征數(shù)量可能會(huì)有所不同。

        結(jié)論

        本筆記本演示了如何使用FeatureSelector類(lèi)從數(shù)據(jù)集中刪除特征。此實(shí)現(xiàn)中有幾個(gè)重要注意事項(xiàng):

        • 在機(jī)器學(xué)習(xí)模型的多次運(yùn)行中,特征重要性將發(fā)生變化。
        • 決定是否保留從一個(gè)獨(dú)熱編碼創(chuàng)建的額外特征。
        • 為不同的參數(shù)嘗試幾個(gè)不同的值,以確定哪些參數(shù)最適合機(jī)器學(xué)習(xí)任務(wù)。
        • 對(duì)于相同的參數(shù),缺失的(missing)、單一的(single_unique)和共線( collinear)的輸出將保持不變。
        • 特征選擇是機(jī)器學(xué)習(xí)工作流中的一個(gè)關(guān)鍵步驟,它可能需要多次迭代來(lái)優(yōu)化。
          我很感激你對(duì)這個(gè)項(xiàng)目的任何評(píng)論、反饋或幫助。

          代碼和數(shù)據(jù)下載地址:

          https://github.com/fengdu78/Data-Science-Notes/tree/master/9.feature-engineering/FeatureSelectorUsage

        參考

        WillKoehrsen:https://github.com/WillKoehrsen/feature-selector


        往期精彩回顧





        獲取一折本站知識(shí)星球優(yōu)惠券,復(fù)制鏈接直接打開(kāi):

        https://t.zsxq.com/y7uvZF6

        本站qq群704220115。

        加入微信群請(qǐng)掃碼:

        瀏覽 73
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        評(píng)論
        圖片
        表情
        推薦
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            操逼真爽 | 欧美大骚逼 | 亚洲精品成人AV电影 | 99视频精品全部免费看 | 国产视频aaa | 中文字幕人乱码中文字的预防方法 | 婷婷亚洲五月色综 | 久久久做爱视频 | 逼操逼网 | 亚洲无码国产一区 |