Рекурсивное удаление функций с помощью CV не уменьшает количество функций

У меня есть этот набор данных о белках, на котором мне нужно выполнить RFE. Есть 100 примеров с бинарными метками классов (больной — 1, здоровый — 0) и 9847 признаков для каждого примера. Чтобы уменьшить размерность, я выполняю RFECV с оценкой LogisticRegression и 5-кратным CV. Это код:

model = LogisticRegression()
rfecv = RFECV(estimator=model, step=1, cv=StratifiedKFold(5), n_jobs=-1)
rfecv.fit(X_train, y_train)

print("Number of features selected: %d" % rfecv.n_features_)

Количество выбранных функций: 9874

Затем я строю график количества функций по сравнению с оценками CV:

plt.figure()
plt.xlabel("feature count")
plt.ylabel("CV accuracy")
plt.plot(range(1, len(rfecv.grid_scores_) + 1), rfecv.grid_scores_)
plt.show()

введите здесь описание изображения

Я думаю, что происходит (и для этого мне нужен эксперт), так это то, что первый пик показывает оптимальное количество признаков. После этого кривая падает и снова начинает расти только из-за переобучения, не разделения классов, а примеров. Может ли это быть так? И если да, то как я могу получить эти функции (т.е. те, что находятся на первом пике), потому что rfecv.support_ дает мне только те, где была достигнута наивысшая точность (то есть все они).

И пока я этим занимаюсь: как мне выбрать лучший оценщик для RFE? Это просто метод проб и ошибок, прохождение всех возможных классификаторов или есть какая-то логика, почему я бы, например, использовал Logit вместо линейного SVC?


person the_man_in_black    schedule 20.08.2018    source источник


Ответы (1)


Один из способов, который я использую для релевантности функций, — это RandomForest или ExtremeRandomizedTrees. я могу использовать:

rfecv.n_features

чтобы увидеть, сколько возможностей находки и:

 rfec.ranking

чтобы увидеть индекс функций в порядке убывания. другой алгоритм, который вы можете использовать, - это PCA для уменьшения размера вашего набора данных.

person Júlio Cesar Pereira Rocha    schedule 20.08.2018
comment
Этот проект для одного из моих курсов в универе. Я не упомянул об этом, но я должен сравнить RFE с PCA. Поэтому я не могу использовать подход RandomForest - person the_man_in_black; 20.08.2018