퍼셉트론에 대한 결정 경계 플롯


11

퍼셉트론 알고리즘의 결정 경계를 플롯하려고하는데 실제로 몇 가지 사항에 대해 혼란스러워합니다. 내 입력 인스턴스는 이며 기본적으로 2D 입력 인스턴스 ( x 1x 2 ) 및 이진 클래스 대상 값 ( y ) [1 또는 0]입니다.[(x1,x2),y]x1x2y

내 가중치 벡터는 입니다.[w1,w2]

이제 추가 바이어스 매개 변수 을 통합해야 하므로 가중치 벡터가 3 × 1 벡터가됩니까? 그것은 1 × 3 벡터? 벡터에는 1 행과 n 열만 있기 때문에 1 × 3 이어야한다고 생각합니다 .w03×11×1×

이제 를 임의의 값으로 인스턴스화한다고 가정 해 봅시다 . 어떻게 결정 경계를 그릴까요? 여기서 w 0 은 무엇을 의미 합니까? 가요 0 / N O의 R의 m ( w ) 원점에서 결정 영역의 거리? 그렇다면 어떻게 이것을 캡처하고 matplotlib.pyplot 또는 해당 Matlab을 사용하여 Python으로 플로팅합니까?[0,1,2]00/영형아르 자형미디엄()

이 문제에 대해 약간의 도움을 주셔서 감사합니다.

답변:


17

퍼셉트론이 각 반복에서 출력을 예측하는 방법은 다음 방정식을 따르는 것입니다.

와이제이=에프[엑스]=에프[엑스]=에프[0+1엑스1+2엑스2+...+엑스]

당신이 말했듯이, 당신의 무게 는 바이어스 항 w 0을 포함합니다 . 따라서 내적을 유지하려면 입력에 1 을 포함해야합니다 .01

일반적으로 가중치에 대한 열 벡터, 즉 벡터로 시작합니다. 정의에 따라 내적은 1 × n 가중치 벡터 를 얻기 위해이 벡터를 전치 해야하고 해당 내적을 보완하려면 n × 1 입력 벡터 가 필요합니다 . 그렇기 때문에 위의 방정식에서 행렬 표기법과 벡터 표기법 간의 변화를 강조하여 표기법이 올바른 치수를 어떻게 제안하는지 확인할 수 있습니다.×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

0,1,2

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')

간단한 퍼셉트론은 두 개의 다른 클래스를 분류합니다

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.