4

目前我正在构建一个数据严重不平衡的分类器。我使用 imblearn 管道首先到 StandardScaling、SMOTE,然后使用 gridSearchCV 进行分类。这确保了在交叉验证期间完成上采样。现在我想将 feature_selection 包含到我的管道中。我应该如何将此步骤包含在管道中?

model = Pipeline([
        ('sampling', SMOTE()),
        ('classification', RandomForestClassifier())
    ])

param_grid = { 
    'classification__n_estimators': [10, 20, 50],
    'classification__max_depth' : [2,3,5]
}

gridsearch_model = GridSearchCV(model, param_grid, cv = 4, scoring = make_scorer(recall_score))
gridsearch_model.fit(X_train, y_train)
predictions = gridsearch_model.predict(X_test)
print(classification_report(y_test, predictions))
print(confusion_matrix(y_test, predictions))
4

3 回答 3

6

在您的模型是随机森林 (RF) 的管道中包含特征选择不一定有意义。这是因为 RF 模型的max_depthmax_features参数本质上控制了构建单个树时包含的特征数量(最大深度n只是表示您的森林中的每棵树都将为n节点构建,每个树都有一个由以下组合组成的拆分max_features功能数量)。检查https://scikit-learn.org/stable/modules/generated/sklearn.ensemble.RandomForestClassifier.html

您可以简单地调查您的训练模型以获得排名靠前的特征。在训练单个树时,可以计算出每个特征减少了树中加权杂质的程度。对于森林,可以平均每个特征的杂质减少,并根据此度量对特征进行排名。所以你实际上不需要为不同的特征集重新训练森林,因为特征重要性(已经在sklearn模型中计算)告诉你你需要的所有信息。


PS我也不会浪费时间进行网格搜索n_estimators,因为更多的树会带来更好的准确性。更多的树意味着更多的计算成本,并且在一定数量的树之后,改进太小了,所以也许你必须担心这一点,但否则你会从大量的 n_estimator 中获得性能,而你并不是真正的过拟合的麻烦。

于 2019-09-11T15:03:34.447 回答
0

你的意思是特征选择形式sklearn?https://scikit-learn.org/stable/modules/feature_selection.html

您可以在开始时运行它。您将基本上调整您的 X (X_trainX_test accordingly) 列。重要的是你只用训练数据来拟合你的特征选择(因为你的测试数据在那个时间点应该是看不见的)。

我应该如何将此步骤包含在管道中?

所以你应该在你的代码之前运行它。

于 2019-09-09T11:42:45.653 回答
0

没有“如何”,就好像有一个具体的食谱,这取决于你的目标。

如果您想检查哪组功能为您提供最佳性能(根据您的指标,请点击此处recall),您可以使用sklearn's sklearn.feature_selection.RFE(Recursive Feature Elimination) 或它的交叉验证变体sklearn.feature_selection.RFECV

第一个适合您的模型,具有整套特征,衡量它们的重要性并修剪影响最小的那些。此操作继续进行,直到剩下所需数量的特征。虽然它的计算量很大。

第二个从所有特征开始,step每次尝试所有可能的学习模型组合时都会删除特征。这种情况一直持续到min_features_to_select被击中。它的计算量非常大,比第一个要多得多

由于此操作与超参数搜索一起使用是相当不可行的,因此您应该在GridSearchCV找到一些合适的值之前或之后使用一组固定的默认值来执行此操作。在第一种情况下,功能选择将不取决于hyperparams您找到的内容,而对于第二种情况,影响可能相当大。两种方法都是正确的,但可能会产生不同的结果和模型。

您可以在此 StackOverflow 答案RFECV中了解更多信息。RFE

于 2019-09-10T10:07:03.497 回答