人工神經網路 感知機學習演算法的對偶形式

2021-08-17 23:01:37 字數 4153 閱讀 8038

from matplotlib import pyplot as plt

from mpl_toolkits.mplot3d import axes3d

import numpy as np

from sklearn.neural_network import mlpclassifier

from sklearn.datasets import load_iris

生成線性可分資料集

def creat_data(n):

np.random

.seed(1)

x_11=np.random

.randint(0,100,(n,1))

x_12=np.random

.randint(0,100,(n,1))

x_13=20+np.random

.randint(0,10,(n,1))

x_21=np.random

.randint(0,100,(n,1))

x_22=np.random

.randint(0,100,(n,1))

x_23=10-np.random

.randint(0,10,(n,1))

new_x_12=x_12*np.sqrt(2)/2-x_13*np.sqrt(2)/2

new_x_13=x_12*np.sqrt(2)/2+x_13*np.sqrt(2)/2

new_x_22=x_22*np.sqrt(2)/2-x_23*np.sqrt(2)/2

new_x_23=x_22*np.sqrt(2)/2+x_23*np.sqrt(2)/2

plus_samples=np.hstack([x_11,new_x_12,new_x_13,np.ones((n,1))])

minus_samples=np.hstack([x_21,new_x_22,new_x_23,-np.ones((n,1))])

samples=np.vstack([plus_samples,minus_samples])

np.random

.shuffle(samples)

return samples

繪製資料集

def

plot_samples

(ax,samples):

y=samples[:,-1]

y=samples[:,-1]

position_p=y==1

position_m=y==-1

ax.scatter(samples[position_p,0],samples[position_p,1],samples[position_p,2],marker='+',label='+',color='b')

ax.scatter(samples[position_m,0],samples[position_m,1],samples[position_m,2],marker='^',label='-',color='y')

fig=plt.figure()

ax=axes3d(fig)

data=creat_data(100)

plot_samples(ax,data)

ax.legend(loc='best')

plt.show()

感知機學習演算法的原始形式演算法

def

perceptron

(train_data,eta,w_0,b_0):

x=train_data[:,:-1]

y=train_data[:,-1]

length=train_data.shape[0]

w=w_0

b=b_0

step_num=0

while

true:

i=0while(i1

x_i=x[i].reshape((x.shape[1],1))

y_i=y[i]

if y_i*(np.dot(np.transpose(w),x_i)+b)<=0:

w+=eta*y_i*x_i

b+=eta*y_i

break

else:

i+=1

if(i==length):

break

return(w,b,step_num)

生成分離超平面

def

creat_hyperplane

(x,y,w,b):

return (-w[0][0]*x-w[1][0]*y-b)/w[2][0]

根據訓練資料集和α⃗ α→

得到w⃗  w

→,因為在計算中大量地需要w⃗ w→

def

creat_w

(train_data,alpha):

x=train_data[:,:-1]

y=train_data[:,-1]

n=train_data.shape[0]

w=np.zeros((x.shape[1],1))

for i in range(0,n):

w+=alpha[i][0]*y[i]*(x[i].reshape(x[i].size,1))

return w

感知機學習演算法的對偶形式

def

perceptron_dual

(train_data,eta,alpha_0,b_0):

x=train_data[:,:-1]

y=train_data[:,-1]

length=train_data.shape[0]

alpha=alpha_0

b=b_0

step_num=0

while_num=0

while

true:

i=0while(i1

x_i=x[i].reshape((x.shape[1],1))

y_i=y[i]

w=creat_w(train_data,alpha)

z=y_i*(np.dot(np.transpose(w),x_i)+b)

if z<=0:

alpha[i][0]+=eta

b+=eta*y_i

break

else:

i+=1

if(i==length):

break

return (alpha,b,step_num)

原始形式和對偶形式的運**況

data=creat_data(100)

eta,w_0,b_0=0.1,np.ones((3,1),dtype=float),1

w_1,b_1,num_1=perceptron(data,eta,w_0,b_0)

alpha,b_2,num_2=perceptron_dual(data,eta=0.1,alpha_0=np.zeros((data.shape[0]*2,1)),b_0=0)

w_2=creat_w(data,alpha)

print('w_1,b_1',w_1,b_1)

print('w_2,b_2',w_2,b_2)

fig=plt.figure()

plt.suptitle('perceptron')

ax=axes3d(fig)

#繪製樣本點

plot_samples(ax,data)

#繪製分離超平面

x=np.linspace(-30,100,100)

y=np.linspace(-30,100,100)

x,y=np.meshgrid(x,y)

z=creat_hyperplane(x,y,w_1,b_1)

z_2=creat_hyperplane(x,y,w_2,b_2)

ax.plot_su***ce(x,y,z,rstride=1,cstride=1,color='g',alpha=0.2)

ax.plot_su***ce(x,y,z,rstride=1,cstride=1,color='c',alpha=0.2)

ax.legend(loc='best'

)plt.show()

人工神經網路 感知機學習演算法的原始形式

from matplotlib import pyplot as plt from mpl toolkits.mplot3d import axes3d import numpy as np from sklearn.neural network import mlpclassifier from ...

從感知機到人工神經網路

如下圖所示 可用乙個決策邊界w x b將正負樣本進行區分。其中w為權重,b為偏置項。w x1 b 0被分為正樣本,否則為負樣本。假定要本線性可分,感知機的學習目標就是求的能將正負要本完全正確分開的分離超平面,即要尋找w,b,因此要確定乙個學習策略,即定義損失函式並使其最小化。而感知機所採用的損失函式...

人工神經網路之單層感知機

人工神經網路 artificial neural network,ann 簡稱神經網路 nn 是基於生物學中神經網路的基本原理,在理解和抽象了人腦結構和外界刺激響應機制後,以網路拓撲知識為理論基礎,模擬人腦的神經系統對複雜資訊的處理機制的一種數學模型。該模型以並行分布的處理能力 高容錯性 智慧型化和...