พล็อตขอบเขตการตัดสินใจสำหรับ perceptron


11

ฉันพยายามพล็อตขอบเขตการตัดสินใจของอัลกอริทึม Perceptron และฉันสับสนมากเกี่ยวกับบางสิ่ง อินสแตนซ์อินพุตของฉันอยู่ในรูปแบบโดยทั่วไปอินสแตนซ์อินพุต 2D ( x 1และx 2 ) และค่าเป้าหมายคลาสไบนารี ( y ) [1 หรือ 0][(x1,x2),Y]x1x2Y

เวกเตอร์น้ำหนักของฉันจึงอยู่ในรูปแบบ: ][W1,W2]

ตอนนี้ฉันต้องรวมพารามิเตอร์ bias เพิ่มเติมและด้วยเหตุนี้เวกเตอร์น้ำหนักของฉันกลายเป็นเวกเตอร์3 × 1หรือไม่ มันคือ1 × 3เวกเตอร์ ฉันคิดว่าควรเป็น1 × 3เนื่องจากเวกเตอร์มีเพียง 1 แถวและคอลัมน์ nW03×11×31×3

ทีนี้สมมุติว่าฉันยกตัวอย่างเป็นค่าสุ่มฉันจะพล็อตขอบเขตการตัดสินใจสำหรับเรื่องนี้อย่างไร ความหมายw 0หมายถึงอะไรที่นี่? คือW 0 / n o R เมตร( W )ระยะทางของภูมิภาคการตัดสินใจจากจุดกำเนิดหรือไม่? หากเป็นเช่นนั้นฉันจะจับภาพนี้และพล็อตใน Python โดยใช้ matplotlib.pyplot หรือ Matlab ที่เทียบเท่าได้อย่างไร[W0,W1,W2]W0W0/nโอRม.(W)

ฉันจะขอบคุณจริงๆแม้แต่ความช่วยเหลือเล็กน้อยเกี่ยวกับเรื่องนี้

คำตอบ:


17

วิธีที่ perceptron ทำนายเอาท์พุทในการวนซ้ำแต่ละครั้งโดยทำตามสมการ:

YJ=[WTx]=[Wx]=[W0+W1x1+W2x2+...+Wnxn]

ในขณะที่คุณกล่าวว่าน้ำหนักของคุณมีคำที่เป็นอคติW 0 ดังนั้นคุณต้องรวม1ในอินพุตเพื่อรักษาขนาดในผลิตภัณฑ์ดอทWW01

คุณมักเริ่มด้วยเวกเตอร์คอลัมน์สำหรับตุ้มน้ำหนักนั่นคือเวกเตอร์ตามคำนิยามผลิตภัณฑ์ดอทต้องให้คุณแปลงเวกเตอร์นี้เพื่อให้ได้เวกเตอร์น้ำหนัก1 × nและเพื่อเติมเต็มผลิตภัณฑ์ดอทนั้นคุณต้องมีเวกเตอร์อินพุตn × 1 นั่นคือเหตุผลที่เน้นการเปลี่ยนแปลงระหว่างสัญกรณ์เมทริกซ์และสัญลักษณ์เวกเตอร์ในสมการข้างต้นเพื่อให้คุณสามารถดูว่าสัญลักษณ์แสดงมิติที่ถูกต้องให้คุณได้อย่างไรn×11×nn×1

โปรดจำไว้ว่าสิ่งนี้จะทำสำหรับอินพุตที่คุณมีในชุดฝึกอบรม หลังจากนี้ให้อัปเดตเวกเตอร์น้ำหนักเพื่อแก้ไขข้อผิดพลาดระหว่างเอาต์พุตที่คาดการณ์และเอาต์พุตจริง

สำหรับขอบเขตการตัดสินใจนี่คือการปรับเปลี่ยน scikit Learn code ที่ฉันพบที่นี่ :

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

W0,W1,W2

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

perceptron อย่างง่ายจัดประเภทสองชั้น

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.