Determinación de las características más contribuyentes para el clasificador SVM en sklearn

Tengo un conjunto de datos y quiero entrenar mi modelo en esos datos. Después del entrenamiento, necesito conocer las características que son los principales contribuyentes en la clasificación de un clasificador SVM.

Hay algo llamado característica importante para los algoritmos forestales, ¿hay algo similar?

Sí, hay un atributo coef_ para el clasificador SVM, pero solo funciona para SVM con kernel lineal . Para otros kernels no es posible porque los datos se transforman por el método del kernel a otro espacio, que no está relacionado con el espacio de entrada, verifique la explicación .

 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) 

Y la salida de la función se ve así: Importancia de la característica

En una sola línea de código:

ajustar un modelo SVM:

 from sklearn import svm svm = svm.SVC(gamma=0.001, C=100., kernel = 'linear') 

e implementar la ttwig de la siguiente manera:

 pd.Series(abs(svm.coef_[0]), index=features.columns).nlargest(10).plot(kind='barh') 

El resultado será:

Las características más contribuyentes del modelo SVM en valores absolutos.

Creé una solución que también funciona para Python 3 y se basa en el fragmento de código 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) 

Importancia de la característica