Как интерпретировать важность функций из выходных данных _coeffs для мультикласса в sklearn.feature_selection? - PullRequest
0 голосов
/ 04 июня 2019

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

1 Ответ

0 голосов
/ 05 июня 2019

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

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

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

...