我的数据集包含120多个要素,我想使用RFE选择应该使用的要素/列名。 我有一个问题,因为RFE非常慢。我的代码如下:
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.feature_selection import RFE
from sklearn.linear_model import LogisticRegression
full_df = pd.read_csv('data.csv')
x = full_df.iloc[:,:-1]
y = full_df.iloc[:,-1]
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size = 0.3, random_state = 42)
model = LogisticRegression(solver ='lbfgs')
for i in range(1,120):
rfe = RFE(model, i)
fit = rfe.fit(x_train, y_train)
acc = fit.score(x_test, y_test)
print(acc)
print(fit.support_)
我的问题是:rfe = RFE(model, i)
。我不知道i
的最佳号码是多少。这就是为什么我将其放在for i in range(1,120)
中的原因。有什么更好的方法吗? scikit learn
中是否有更好的功能可以帮助我确定功能的数量和这些功能的名称?
因为这花了很长时间,所以我改变了方法,我想看看您对此有何看法,这是一种好的/正确的方法。
首先,我做了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
中使用相同的分类器?