J'essaie de tracer l'hyperplan pour le modèle que j'ai entraîné avec LinearSVC et sklearn. Notez que je travaille avec des langues naturelles; avant d'ajuster le modèle, j'ai extrait des fonctionnalités avec CountVectorizer et TfidfTransformer.Hyperplan de tracé Linear SVM python
Voici le classificateur:
from sklearn.svm import LinearSVC
from sklearn import svm
clf = LinearSVC(C=0.2).fit(X_train_tf, y_train)
Puis j'ai essayé de tracer comme l'a suggéré on the Scikit-learn website:
# get the separating hyperplane
w = clf.coef_[0]
a = -w[0]/w[1]
xx = np.linspace(-5, 5)
yy = a * xx - (clf.intercept_[0])/w[1]
# plot the parallels to the separating hyperplane that pass through the
# support vectors
b = clf.support_vectors_[0]
yy_down = a * xx + (b[1] - a * b[0])
b = clf.support_vectors_[-1]
yy_up = a * xx + (b[1] - a * b[0])
# plot the line, the points, and the nearest vectors to the plane
plt.plot(xx, yy, 'k-')
plt.plot(xx, yy_down, 'k--')
plt.plot(xx, yy_up, 'k--')
plt.scatter(clf.support_vectors_[:, 0], clf.support_vectors_[:, 1],
s=80, facecolors='none')
plt.scatter(X[:, 0], X[:, 1], c=Y, cmap=plt.cm.Paired)
plt.axis('tight')
plt.show()
Cet exemple utilise svm.SVC (kernel = 'linéaire'), alors que mon classificateur est LinearSVC . Par conséquent, je reçois cette erreur:
AttributeError Traceback (most recent call last)
<ipython-input-39-6e231c530d87> in <module>()
7 # plot the parallels to the separating hyperplane that pass through the
8 # support vectors
----> 9 b = clf.support_vectors_[0]
1 yy_down = a * xx + (b[1] - a * b[0])
11 b = clf.support_vectors_[-1]
AttributeError: 'LinearSVC' object has no attribute 'support_vectors_'
Comment puis-je tracer avec succès le hyperplan de mon classificateur LinearSVC?
Ici, il est: http://scikit-learn.org/0.18/auto_examples/svm/plot_separating_hyperplane.html – Alex
Je sais que dans cet exemple, ils utilisent un autre noyau pour SVM linéaire, mais Je voudrais tracer mon classificateur – Alex
Eh bien la question se lit comme vous cherchez la raison de l'erreur, mais comme la documentation indique clairement: * "Notez que LinearSVC n'accepte pas le noyau de mot-clé, comme cela est supposé être linéaire. Il manque aussi certains des membres de SVC et de NuSVC, comme 'support_'." * Je ne sais pas grand chose sur l'utilisation de LinearSVC, mais je suppose que vous pourriez reformuler la question pour indiquer clairement que vous voulez une sortie similaire s 'SVC', mais utilise' LinearSVC' à la place, qui n'a pas d'attribut '' support_vectors_''. De cette façon, les gens n'ont pas besoin de creuser profondément pour trouver l'évidence. – ImportanceOfBeingErnest