以下のコードを実行すると、グラフの描画領域は表示されますが、肝心のグラフと決定境界の可視化がされません。エラーは何も起きず。ライブラリのversionが原因かと思いupdateしましたが解決せず。原因が分からないのでご教示願います。
version
numpy 1.9.5
scikit-learn 0.24.1
matplotlib 3.3.3
from sklearn.svm import SVC
import numpy as np
import matplotlib.pyplot as plt
#学習、および決定境界線、マージン、サポートマージンを可視化する関数
def plot_boundary_margin_sv(X0, y0, X1, y1, kernel, C, xmin=-1, xmax=1, ymin=-1, ymax=1 ):
#サポートベクタのインスタンス化
svc = SVC(kernel=kernel, C=C)
# 学習
svc.fit(np.vstack((X0, X1)), np.hstack((y0, y1)))
fig, plt.subplots() ax.scatter(X0[:, 0], X0[:, 1], marker='o', label='class 0') ax.scatter(X1[:, 0], X1[:, 1], marker='x', label='class 1') #決定境界とマージンをプロット xx, yy = np.meshgrid(np.linspace(xmin, xmax, 100), np.linspace(ymin, ymax, 100)) xy = np.vstack([xx.ravel(), yy.ravel()]).T p = svc.decision_function(xy).reshape((100, 100)) ax.contour(xx, yy, p, colors='k', levels=[-1, 0, 1], alpha=0.5, linestyles=['--', '-', '--']) #サポートベクタをプロット ax.scatter(svc.support_vectors_[:, 0], svc.support_vectors_[:, 1], s=250, facecolors='none', edgecolors='black') ax.set_xlabel('x') ax.set_ylabel('y') ax.legend(loc='best')
plt.show()
#決定境界、マージン、サポートベクタをプロット
plot_boundary_margin_sv(X0, y0, X1, y1, kernel='linear', C=1e6)
あなたの回答
tips
プレビュー