Как интерпретировать важность функций из выходов _coeffs для мультикласса в sklearn.feature_selection?

У меня есть набор данных из 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). Я могу сортировать их и получать желаемые результаты. Но я не уверен, что это правильно и имеет смысл. Я очень ценю любые другие решения.


person arta    schedule 04.06.2019    source источник


Ответы (1)


Ну, я углубился в исходный код. Вот что я нашел, на самом деле они делают почти одно и то же:

# Get ranks
if coefs.ndim > 1:
    ranks = np.argsort(safe_sqr(coefs).sum(axis=0))
else:
    ranks = np.argsort(safe_sqr(coefs))

Если это многоклассовая задача, они суммируют коэффициенты. Надеюсь, это поможет другим.

person arta    schedule 05.06.2019