簡體   English   中英

在 scikit-learn 中使用 GridSearch 確定要刪除/選擇的功能

[英]Determine what features to drop / select using GridSearch in scikit-learn

如何使用 GridSearch 結果確定要刪除哪些特征/列/屬性?

換句話說,如果 GridSearch 返回 max_features 應該是 3,我們能確定應該使用哪 3 個特征嗎?

讓我們以具有 4 個特征的經典 Iris 數據集為例。

import numpy as np
from sklearn.tree import DecisionTreeClassifier
from sklearn.model_selection import StratifiedKFold 
from sklearn.model_selection import GridSearchCV
from sklearn import datasets

iris = datasets.load_iris()
all_inputs = iris.data
all_labels = iris.target

decision_tree_classifier = DecisionTreeClassifier()

parameter_grid = {'max_depth': [1, 2, 3, 4, 5],
              'max_features': [1, 2, 3, 4]}

cross_validation = StratifiedKFold(n_splits=10)

grid_search = GridSearchCV(decision_tree_classifier,
                       param_grid=parameter_grid,
                       cv=cross_validation)

grid_search.fit(all_inputs, all_labels)
print('Best score: {}'.format(grid_search.best_score_))
print('Best parameters: {}'.format(grid_search.best_params_))

假設我們得到 max_features 為 3。我如何找出此處最合適的 3 個特征?

放入 max_features = 3 將適用於擬合,但我想知道哪些屬性是正確的。

我是否必須自己生成所有功能組合的可能列表才能提供給 GridSearch 或有更簡單的方法?

max_features 是決策樹的一個超參數。 它不會在訓練前刪除您的任何特征,也不會發現好的或壞的特征。

您的決策樹會查看所有特征,以找到根據您的標簽拆分數據的最佳特征。 如果您在示例中將 maxfeatures 設置為 3,則您的決策樹只會查看三個隨機特征,並從這些特征中選取最好的特征進行分割。 這使您的訓練更快,並為您的分類器增加了一些隨機性(也可能有助於防止過度擬合)。

您的分類器通過標准(如基尼指數或信息增益(1-熵))確定哪個是特征。 因此,您可以對特征重要性進行這樣的測量,或者

使用具有屬性 feature_importances_ 的估算器

正如@gorjan 提到的。

如果您使用具有屬性feature_importances_的估算器,您可以簡單地執行以下操作:

feature_importances = grid_search.best_estimator_.feature_importances_

這將返回一個列表(n_features) ,顯示每個特征對於網格搜索找到的最佳估計器的重要性。 此外,如果您想使用沒有屬性feature_importances_的線性分類器(邏輯回歸),您可以做的是:

# Get the best estimator's coefficients
estimator_coeff = grid_search.best_estimator_.coef_
# Multiply the model coefficients by the standard deviation of the data
coeff_magnitude = np.std(all_inputs, 0) * estimator_coeff)

這也是特征重要性的指示。 如果模型的系數是>> 0<< 0 ,用外行的話說,這意味着模型正在努力捕捉該特征中存在的信號。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM