機器學習之感知機(Perceptron)模型
機器學習之Perceptron模型
本文主要介紹機器學習領域最為基礎的模型,感知機模型:
- 1、感知機模型介紹
- 2、感知機數學原理
- 3、演算法及Python程式碼實現
- 4、小結
1、感知機模型介紹
定義(感知機) 假設輸入空間(特徵空間)是,輸出空間是Y={+1,-1},輸入表示例項的特徵向量,對應於輸入空間(特徵空間)的點;輸出表示例項的類別。由輸入空間到輸出空間的如下函式 f(x)=sign(w·x+b)稱為感知機,其中w和b稱為感知機的引數,sign為符號函式定義為
2、感知機數學原理
2.1 感知機學習策略
對於給定一個數據集T={(x1,y1),(x2,y2),…,(xN,yN)},其中,xi∈X=
2.2感知機學習策略
首先寫出輸入空間中任意一點x0到超平面S的距離:
這裡||w||是w的L2範數
對於誤分類來說,-yi(w·xi+b)>0 成立,因為在誤分類情形下yi的值與w·xi+b的值符號相反,又因為yi取值為+1,-1,用yi的值可以去掉上面的距離公式中的絕對值符號,因此誤分類點xi到超平面的距離為
這樣,假設超平面S的誤分類點集合為M,那麼所有誤分類點到超平面S的總距離為
這裡把||w||定為1,便於定義損失函式(原理目前我還不太懂)那麼就可以定義感知機的損失函數了
3、演算法及Python程式碼實現
感知機學習演算法的原始形式
輸入:訓練資料TT={(x1,y1),(x2,y2),…,(xN,yN)},其中,xi∈X=yi∈Y={+1,-1},i=1,2,…,N;學習率η(0<η≤1);
輸出:w,b;感知機模型f(x)=sign(w·x+b).
(1)選取初值w0,b0
(2)在訓練集中選取資料(xi,yi)
(3)如果yi(w·xi+b)≤0,w ← w+ηyi·xi;b ← b+ηyi
(4)轉至(2),直至訓練集中沒有誤分類點
下面始Python實現程式碼
import numpy as np
import random as random
import matplotlib as mpl
import matplotlib.pyplot as plt
datas = [[(1,2),-1],[(2,1),-1],[(2,2),-1],[(1,4),1],[(3,3),1],[(5,4),1],[(3, 3), 1], [(4, 3), 1], [(1, 1), -1],[(2, 3), -1], [(4, 2), 1]]
random.shuffle(datas)
fig = plt.figure('Input Figure')
mpl.rcParams['xtick.labelsize'] = 16
mpl.rcParams['ytick.labelsize'] = 16
plt.rcParams['font.sans-serif']=['SimHei'] #用來正常顯示中文標籤
#plt.rcParams['axes.unicode_minus']=False #用來正常顯示負號
xArr = np.array([x[0] for x in datas])
yArr = np.array([x[1] for x in datas])
xPlotx,xPlotx_,xPloty,xPloty_ = [],[],[],[]
for i in range(len(datas)):
y = yArr[i]
if y>0:
xPlotx.append(xArr[i][0])
xPloty.append(xArr[i][1])
else:
xPlotx_.append(xArr[i][0])
xPloty_.append(xArr[i][1])
plt.title('Perception 輸入資料')
plt.grid(True)
pPlot1,pPlot2 = plt.plot(xPlotx,xPloty,'b+',xPlotx_,xPloty_,'rx')
plt.legend(handles = [pPlot1,pPlot2],labels=['Positive Sample','Negtive Sample'],loc='upper center')
plt.show()
輸入10個散點圖,顯示所有離散資料點
w = np.array([1,1])
b = 3
n = 1
while True:
num = 0
for i in range(len(datas)):
num += 1
x = xArr[i]
y = yArr[i]
z = y*(np.dot(w,x)+b)
if z<=0 :
w = w+n*y*x
b = b+n*y
break
if num>=len(datas):
break
fig = plt.figure('Output Figure')
x0 =np.linspace(0,5,100)
w0 = w[0]
w1 = w[1]
x1 = -(w0/w1)*x0-b/w1
plt.title("Perception 輸出平面")
plt.xlabel('x0')
plt.ylabel('x1')
plt.annotate('Output Hyperplane',xy=(0.5,4.5),xytext=(1.7,3.5))
plt.plot(x0,x1,'k', lw=1)
pPlot3, pPlot4= plt.plot(xPlotx,xPloty,'b+',xPlotx_,xPloty_,'rx')
plt.legend(handles = [pPlot3,pPlot4],labels=['Positive Sample','Negative Sample'],loc='upper right')
plt.show()
輸出得到的超平面S的方程w·x+b=0函式式
4、小結
本次部落格主要介紹了感知機模型的原始形式,另外感知機模型還有對偶形式的表示式,這裡不再介紹,感知機模型雖然簡單,卻有很重要的作用,後面我們會講到SVM支援向量機,理解了感知機模型原理後對後面理解SVM會有很大的幫助。