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]
data=creat_data(100)
eta,w_0,b_0=0.1,np.ones((3,1),dtype=float),1
w,b,num=perceptron(data,eta,w_0,b_0)
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,b)
ax.plot_su***ce(x,y,z,rstride=1,cstride=1,color='g',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 是基於生物學中神經網路的基本原理,在理解和抽象了人腦結構和外界刺激響應機制後,以網路拓撲知識為理論基礎,模擬人腦的神經系統對複雜資訊的處理機制的一種數學模型。該模型以並行分布的處理能力 高容錯性 智慧型化和...