パーセプトロンの決定境界プロット


11

パーセプトロンアルゴリズムの決定境界をプロットしようとしていますが、いくつかのことで本当に混乱しています。私の入力インスタンスの形式は、基本的には2D入力インスタンス(x 1およびx 2)とバイナリクラスのターゲット値(y)[1または0]です。[(x1,x2),y]x1x2y

したがって、私の重みベクトルはという形式です。[w1,w2]

ここで、追加のバイアスパラメーターを組み込む必要があるため、私の重みベクトルは3 × 1ベクトルになりますか?それは1 × 3のベクトル?ベクトルは1行とn列しかないので、1 × 3にする必要があると思います。w0×11×1×

今度はをランダムな値にインスタンス化するとします。これの決定境界をどのようにプロットしますか?ここで、w 0は何を意味するのですか?あるwは0 / N O R M ワット原点から判定領域の距離?もしそうなら、これをどのようにキャプチャし、matplotlib.pyplotまたは同等のMatlabを使用してPythonでプロットしますか?[w0w1w2]w0w0/orメートルw

この件に関して少しでも助けていただければ幸いです。

回答:


16

パーセプトロンが各反復で出力を予測する方法は、次の方程式に従います。

yj=f[wTバツ]=f[wバツ]=f[w0+w1バツ1+w2バツ2++wバツ]

ww01

×11××1

これは、トレーニングセットにある各入力に対して行われることに注意してください。この後、重みベクトルを更新して、予測出力と実際の出力の間の誤差を修正します。

決定境界に関しては、ここで私がここで見つけたscikit学習コードの修正があります

import numpy as np
from sklearn.linear_model import Perceptron
import matplotlib.pyplot as plt

X = np.array([[2,1],[3,4],[4,2],[3,1]])
Y = np.array([0,0,1,1])
h = .02  # step size in the mesh


# we create an instance of SVM and fit our data. We do not scale our
# data since we want to plot the support vectors

clf = Perceptron(n_iter=100).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))

# Plot the decision boundary. For that, we will assign a color to each
# point in the mesh [x_min, m_max]x[y_min, y_max].
fig, ax = plt.subplots()
Z = clf.predict(np.c_[xx.ravel(), yy.ravel()])

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

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

ax.set_title('Perceptron')

次のプロットが生成されます。

ここに画像の説明を入力してください

基本的に、アイデアは、すべてのポイントをカバーするメッシュ内の各ポイントの値を予測し、を使用して適切な色で各予測をプロットすることcontourfです。


0

w0w1w2

def plot_data(self,inputs,targets,weights):
    # fig config
    plt.figure(figsize=(10,6))
    plt.grid(True)

    #plot input samples(2D data points) and i have two classes. 
    #one is +1 and second one is -1, so it red color for +1 and blue color for -1
    for input,target in zip(inputs,targets):
        plt.plot(input[0],input[1],'ro' if (target == 1.0) else 'bo')

    # Here i am calculating slope and intercept with given three weights
    for i in np.linspace(np.amin(inputs[:,:1]),np.amax(inputs[:,:1])):
        slope = -(weights[0]/weights[2])/(weights[0]/weights[1])  
        intercept = -weights[0]/weights[2]

        #y =mx+c, m is slope and c is intercept
        y = (slope*i) + intercept
        plt.plot(i, y,'ko')

単純なパーセプトロンは2つの異なるクラスを分類します

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.