# -*- 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 #生成測試點的數目
def check(item, y, w, b):
ans = w[0]*item[0] + w[1]*item[1] + b
ans *= y
if ans > 0:
return true
else:
return false
def perceptron(x,y):
iternums = 1000
m,n = x.shape
w = np.zeros(m)
b = 0
a = 0.01
for i in range(iternums):
for j in range(n):
if not check(x[:,j], y[0][j], w, b):
w = w + a * y[0][j]*x[:,j]
b += a*y[0][j]
return (w, b)
if __name__ == '__main__':
(x,y,w) = mk.mk_data(n) #是線性可分
#(x,y,w) = mk.mk_data(n,true) # 不是線性可分
plt.scatter(x[0,y[0]==1], x[1,y[0]==1], color='red')
plt.scatter(x[0,y[0]==-1], x[1,y[0]==-1], color='green')
w, b = perceptron(x, y)
x = np.arange(-2,2,0.1)
x2 = (-b-w[0]*x)/w[1]
plt.plot(x,x2)
plt.show()
mk_data函式的鏈結為:python生成測試資料點
如果是線性可分數據點,結果如下:
如果資料點不是線性可分的,效果如下:
感知器演算法
感知器演算法步驟 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為樣本數目...
感知器演算法
1.判別函式 統計模式識別分為聚類分析法和判決函式法,其中判決函式法又包括幾何分類法 確定性時間分類,線性,非線性 以及概率分類法 隨機事件分類 判別函式即用來對模式進行分類的準則函式。2 線性判別函式 n維線性判別函式的一般形式為 其中x,w不包含最後一項常數項 權向量,解向量,即引數向量 增廣向...