寻找训练模型所需的最低功能的问题

时间:2019-05-02 08:07:05

标签: python python-3.x dataframe machine-learning

我有一个数据框,其中包含price_range(target_attribute)和其他功能列。我有一个问题,要求我找到可能特征的最小子集(最小特征列数),以使模型的得分超过0.4

现在,我的想法是逐一删除要素列,以查看模型的分数何时最接近0.4。那正确吗?如何在数据框中一一删除列?

2 个答案:

答案 0 :(得分:1)

您使用哪种ML模型?基于树的模型(例如“梯度增强”和“随机森林”)具有“功能重要性”度量,可以用来做到这一点。您可以将模型与所有功能配合使用,选中clf.feature_importances_,然后尝试删除得分较低的功能。

您可以在此处查看文档:{​​{3}}

另一种选择是遵循@Matt所说的,并使用诸如递归功能消除here之类的方式:

from sklearn.feature_selection import RFE
rfe = RFE(estimator=svc, n_features_to_select=1, step=1)
rfe.fit(X, y)
ranking = rfe.ranking_

最后一种更简单的方法是删除方差太低的特征。直觉是,通常,具有低方差的功能对帮助您的模型区分类的作用不大。您必须设置方差的阈值,才能保留在数据集中。 Here is a simple example是使用sklearn的方法:

from sklearn.feature_selection import VarianceThreshold
X = [[0, 0, 1], [0, 1, 0], [1, 0, 0], [0, 1, 1], [0, 1, 0], [0, 1, 1]]
sel = VarianceThreshold(threshold=(.8 * (1 - .8)))
sel.fit_transform(X)

请注意,这些示例来自有关功能选择的sklearn This

答案 1 :(得分:0)

您可以使用递归功能消除。这将适合模型并删除最不重要的功能(或某些功能,具体取决于您设置的步长),直到达到所需的功能数量为止。

请参见herehere