У меня есть набор данных из 150 образцов и почти 10000 признаков. Я сгруппировал образцы в 6 кластеров. Я использовал метод sklearn.feature_selection.RFECV, чтобы уменьшить количество функций. Метод оценивает количество важных функций 3000 функций с точностью ~ 95% с использованием 10-кратного CV. Однако я могу получить точность ~ 92%, используя около 250 функций (я построил график, используя grid_scores_). Поэтому я хотел бы получить эти 250 функций.
Я проверил этот вопрос Получение функций в RFECV scikit-learn и обнаружил, что рассчитать важность выбранных функций:
np.absolute (rfecv.estimator_.coef_)
который возвращает длину массива количества важных признаков для бинарных классификаций. Как я указывал ранее, у меня есть 6 кластеров, и sklearn.feature_selection.RFECV выполняет классификацию 1 vs 1. Поэтому я получаю (15, 3000)
ndarray. Я не знаю, как поступить. Я думал взять точечный продукт для каждой функции следующим образом:
cofs = rfecv.estimator_.coef_
coeffs = []
for x in range(cofs.shape[1]):
vec = cofs[ : , x]
weight = vec.transpose() @ vec
coeffs.append(weight)
И я получаю массив (1,3000). Я могу сортировать их и получать желаемые результаты. Но я не уверен, что это правильно и имеет смысл. Я очень ценю любые другие решения.