初始化權向量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為樣本數目...