離散單輸出感知器訓練演算法

2021-08-29 14:07:47 字數 1803 閱讀 2589

初始化權向量w;

重複下列過程,直到訓練完成:

2.1 對每個樣本(x,y),重複如下過程:

2.1.1 輸入x;

2.1.2 計算o=f(xw);

2.1.3 如果輸出不正確,則

當o=0時,取 w=w+x,

當o=1時,取 w=w-x

import random

import numpy as np

import math

import matplotlib.pyplot as plt

def func(x):

"""函式說明:x中對應位置元素大於0記為1,否則記為0

x:列表

返回值:o,0,1列表

"""o =

for i in x:

if i > 0:

else:

return o

def main():

# 權值w

w = np.random.normal(0, 1, (2, 1))

# 偏執值

b = np.random.uniform(0, 1)

# 學習率

learn_rete = 0.2

# 輸入

x = np.array([[1, 0], [1, 2], [2, 0], [2, 3], [3, 2], [4, 2], [4, 5], [5, 3], [0, 0], [3, 5]])

# 理想輸出

y = np.array([1, 0, 1, 0, 1, 1, 0, 1, 1, 0])

while true:

# 記錄錯誤個數,當全部分類正確時,退出迴圈

count = 0

# 計算實際輸出

o = func(np.dot(x, w) + b)

for i in range(10):

if y[i] - o[i] > 0:

w += learn_rete * x[i].reshape(2, 1)

b += learn_rete * y[i]

count += 1

elif y[i] - o[i] < 0:

w -= learn_rete * x[i].reshape(2, 1)

b -= learn_rete * y[i]

count += 1

else:

pass

if count == 0:

break

plt.figure()

# 畫出所有點

x_sca = x[:, 0]

y_sca = x[:, 1]

plt.scatter(x_sca, y_sca)

# 斜率

r = -w[0][0] / w[1][0]

# 偏執值

bias = -b / w[1][0]

# 畫直線

x = np.linspace(0, 8, 24)

y = r * x + bias

plt.plot(x, y, 'r', linewidth=2.5, linestyle="-")

# 座標值

plt.xlim(0, 8)

plt.ylim(0, 8)

# 顯示網格

感知器演算法

coding utf 8 created on thu oct 15 13 58 06 2015 author think 感知器演算法 import mkdata as mk import numpy as np import matplotlib.pyplot as plt n 100 生成測試...

感知器演算法

感知器演算法步驟 1.給出m個帶有標籤的樣本,其中yi 1 or 1 xi xi1,xi2,xin 2.將資料的標籤併入訓練樣本,形成增廣向量,每個資料的維數為n 1 3.在 0,1 均勻分布區間內生成1x n 1 權值矩陣w 4.將資料依次送入感知器進行學習。如果w data k,yk 0 說明訓...

感知器演算法

clc clear all fprintf 感知器演算法 n x 1,4,1 2,6,1 1,2,1 2,2,1 x 0,0,0,1 1,0,0,1 1,0,1,1 1,1,0,1 0,0,1,1 0,1,1,1 0,1,0,1 1,1,1,1 n,n size x 獲取樣本數目和維數 n為樣本數目...