2017-01-11 9 views
1

У меня есть набор данных, и я хочу обучить свою модель этим данным. После обучения мне нужно знать функции, которые являются основными участниками классификации классификатора SVM.Определение наиболее важных функций для классификатора SVM в sklearn

Есть что-то названное особенностью для лесных алгоритмов, есть ли что-то подобное?

+1

Посмотрите на эти ответы: http://stackoverflow.com/questions/11116697/how-to-get-most-informative -features-for-scikit-learn-classifiers. Если вы используете линейный SVM, примеры должны работать на вас. – vpekar

ответ

5

Да, для SVM-классификатора есть атрибут coef_, но он работает только для SVM с линейным ядром. Для других ядер это невозможно, потому что данные преобразуются методом ядра в другое пространство, которое не связано с входным пространством, проверьте explanation.

from matplotlib import pyplot as plt 
from sklearn import svm 

def f_importances(coef, names): 
    imp = coef 
    imp,names = zip(*sorted(zip(imp,names))) 
    plt.barh(range(len(names)), imp, align='center') 
    plt.yticks(range(len(names)), names) 
    plt.show() 

features_names = ['input1', 'input2'] 
svm = svm.SVC(kernel='linear') 
svm.fit(X, Y) 
f_importances(svm.coef_, features_names) 

И выход функции выглядит следующим образом: Feature importances

+0

Как найти значение важности для ядра, отличного от линейного, было бы здорово, если бы вы могли опубликовать ответ для того же –

+0

Я обновил ответ, это невозможно для нелинейного ядра. –