Получение наиболее избирательных функций от LinearSVC в scikit-learn для предсказания нескольких классов

avatar
Adrian
1 июля 2021 в 16:30
110
0
2

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

Я использую класс sklearn.svm.LinearSVC для данных одной ячейки.

Атрибут coef_ должен предоставлять эту информацию (насколько я понял), но при исключении 10-100 лучших функций из coef_ точность/мультикласс f1-score не уменьшается.

Кто-нибудь знает, как извлечь эту информацию на основе обученной модели?

Ниже я предоставил пример кода, который делает то же самое, но с набором данных с открытым исходным кодом!

from sklearn.svm import LinearSVC
from sklearn.datasets import load_iris
import matplotlib.pyplot as plt
import numpy as np


data = load_iris(return_X_y=True, as_frame=True)

print(data[1].unique()) #  [0 1 2] -> three classes

svc = LinearSVC()

svc.fit(data[0], data[1])

score = svc.score(data[0], data[1])

print(svc.coef_.shape)  # (3, 4)
fig, axs = plt.subplots(1, 3, figsize=(15, 7))
for label, ax in enumerate(axs.flatten()):
    args = np.argsort(-svc.coef_[label])
    vals = [svc.coef_[label][arg] for arg in args]
    ax.bar(args, vals)

    ax.title.set_text(f"{label}")

plt.tight_layout()



if __name__ == '__main__':
    plt.show()

Output plot of the code

Источник
G. Anderson
1 июля 2021 в 16:51
0

Если вы удаляете информативные функции и не видите, что оценка точности снижается, то а) проверьте утечку данных между вашими функциями и целями (одна вещь, которую нужно проверить, это минимальное количество функций, необходимых для поддержания той же оценки) и б) попробуйте другую меру (точность, отзыв, оценка F1)

Ответы (0)