我有一个包含 130 个特征(1000 行)的数据集。我想为我的分类器选择最佳特征。我开始了,RFE但它花了太长时间,我这样做了:
number_of_columns = 130
for i in range(1, number_of_columns):
rfe = RFE(model, i)
fit = rfe.fit(x_train, y_train)
acc = fit.score(x_test, y_test
因为这花了很长时间,我改变了我的方法,我想看看你是怎么想的,这是好的/正确的方法。
首先我做了PCA,我发现除了最后 9 列之外,每列的参与率约为 1-0.4%。最后 9 列的参与率低于 0.00001%,所以我删除了它们。现在我有 121 个特征。
pca = PCA()
fit = pca.fit(x)
然后我将我的数据分成训练和测试(具有 121 个特征)。
然后我使用SelectFromModel了 ,并用 4 个不同的分类器对其进行了测试。每个分类器都SelectFromModel减少了列数。我选择了由分类器确定的列数,它给了我最好的准确性:
model = SelectFromModel(clf, prefit=True)
#train_score = clf.score(x_train, y_train)
test_score = clf.score(x_test, y_test)
column_res = model.transform(x_train).shape
最后我使用了“RFE”。我使用了通过“SelectFromModel”获得的列数。
rfe = RFE(model, number_of_columns)
fit = rfe.fit(x_train, y_train)
acc = fit.score(x_test, y_test)
这是一个好方法,还是我做错了什么?
另外,如果我使用一个分类器获得了最大的准确性SelectFromModel,我是否需要在 中使用相同的分类器RFE?