J'ai un ensemble de données et je veux former mon modèle sur ces données. Après la formation, j'ai besoin de connaître les fonctionnalités qui contribuent le plus à la classification d'un classificateur SVM.
Il y a quelque chose appelé importance des fonctionnalités pour les algorithmes forestiers, y a-t-il quelque chose de similaire?
Oui, il y a un attribut coef_
pour le classificateur SVM mais cela ne fonctionne que pour SVM avec noyau linéaire . Pour les autres noyaux, cela n'est pas possible car les données sont transformées par la méthode du noyau dans un autre espace, qui n'est pas lié à l'espace d'entrée, vérifiez explication .
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)
J'ai créé une solution qui fonctionne également pour Python 3 et est basée sur l'extrait de code de Jakub Macina.
from matplotlib import pyplot as plt
from sklearn import svm
def f_importances(coef, names, top=-1):
imp = coef
imp, names = Zip(*sorted(list(Zip(imp, names))))
# Show all features
if top == -1:
top = len(names)
plt.barh(range(top), imp[::-1][0:top], align='center')
plt.yticks(range(top), names[::-1][0:top])
plt.show()
# whatever your features are called
features_names = ['input1', 'input2', ...]
svm = svm.SVC(kernel='linear')
svm.fit(X_train, y_train)
# Specify your top n features you want to visualize.
# You can also discard the abs() function
# if you are interested in negative contribution of features
f_importances(abs(clf.coef_[0]), feature_names, top=10)
En une seule ligne de code:
s'adapter à un modèle SVM:
from sklearn import svm
svm = svm.SVC(gamma=0.001, C=100., kernel = 'linear')
et implémentez le tracé comme suit:
pd.Series(abs(svm.coef_[0]), index=features.columns).nlargest(10).plot(kind='barh')
Le résultat sera:
les caractéristiques les plus contributives du modèle SVM en valeurs absolues