1

たとえば、f(x) = x があります。それをプロットする方法は?x をいくつか取り、y を計算し、この操作をもう一度実行してから、グラフをドットでプロットします。シンプルで明確。

しかし、決定境界をプロットすることを明確に理解できません-プロットするyがない場合、xのみです。

SVM の Python コード:

h = .02  # step size in the mesh
Y = y
# we create an instance of SVM and fit out data. We do not scale our
# data since we want to plot the support vectors
C = 1.0  # SVM regularization parameter
svc = svm.SVC(kernel='linear', C=C).fit(X, Y)
rbf_svc = svm.SVC(kernel='rbf', gamma=0.7, C=C).fit(X, Y)
poly_svc = svm.SVC(kernel='poly', degree=3, C=C).fit(X, Y)
lin_svc = svm.LinearSVC(C=C).fit(X, Y)

# create a mesh to plot in
x_min, x_max = X[:, 0].min() - 1, X[:, 0].max() + 1
y_min, y_max = X[:, 1].min() - 1, X[:, 1].max() + 1
xx, yy = np.meshgrid(np.arange(x_min, x_max, h),
                     np.arange(y_min, y_max, h))


for i, clf in enumerate((svc, rbf_svc, poly_svc, lin_svc)):
    # Plot the decision boundary. For that, we will asign a color to each
    # point in the mesh [x_min, m_max]x[y_min, y_max].

チャートをプロットするすべてがここにあり、私がどのように理解したか:

    pl.subplot(2, 2, i + 1)
    Z = clf.predict(np.c_[xx.ravel(), yy.ravel()])

    # Put the result into a color plot
    Z = Z.reshape(xx.shape)
    pl.contourf(xx, yy, Z, cmap=pl.cm.Paired)
    pl.axis('off')

    # Plot also the training points
    pl.scatter(X[:, 0], X[:, 1], c=Y, cmap=pl.cm.Paired)

pl.show()

このプロットがどのように機能するかを誰かが言葉で説明できますか?

4

1 に答える 1

6

基本的に、関数をプロットしているf : R^2 -> {0,1}ので、2 次元空間から と の 2 つの値のみの縮退空間への関数に0なり1ます。

まず、関数を視覚化するメッシュを生成します。あなたの例の場合、ある距離でポイントを取り、対応する値をプロットするf(x)=y間隔を選択します[x_min,x_max]epsf

x_min, x_max = X[:, 0].min() - 1, X[:, 0].max() + 1
y_min, y_max = X[:, 1].min() - 1, X[:, 1].max() + 1
xx, yy = np.meshgrid(np.arange(x_min, x_max, h),
                     np.arange(y_min, y_max, h))

次に、関数値を計算します。この場合はSVM.predict関数であり、結果は0または1

Z = clf.predict(np.c_[xx.ravel(), yy.ravel()])

f(x)分析されたすべての計算の例と同じですx

さて、誤解を招くかもしれない「トリッキーな」部分は

pl.contourf(xx, yy, Z, cmap=pl.cm.Paired)

この関数は、関数の等高線をプロットしますf。平面上の 3 次元関数を視覚化するために、等高線図を作成することがよくあります。これは、関数の高さのマップのようなものです。f値の大きな変化が点の周囲で検出された場合は、点の間に線を引きます。

数学の世界からの良い例 等高線図のサンプル

そのようなプロットの例を示します。

SVM の場合、可能な値は0との 2つしかない1ため、結果として、等高線は 2 次元空間のこれらの部分に正確に配置されます。片側には がf(x)=0あり、反対側には がありf(x)=1ます。したがって、「2 次元プロット」のように見えますが、そうではありません。観察できるこの形状 (決定境界) は、3 次元関数の最大の違いを視覚化したものです。

sklearn多分類の例でそれを視覚化するドキュメントでは、 がある場合、f : R^2 -> {0,1,2}考え方はまったく同じですが、そのような隣接する x1 と x2 の間に等高線がプロットされf(x1)!=f(x2)ます。

SVM マルチクラス

于 2013-09-16T10:04:37.190 に答える