![](/img/trans.png)
[英]GridSearch over RegressorChain using Scikit-Learn?
[英]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.