from sklearn import datasets
import numpy as np
def loadData():
dataset = datasets.load_iris()
z1,z2 = dataset.data,dataset.target
dataX = z1[0:100,:]
dataY = z2[0:100]
for i in range(100):
if dataY[i]==0:
dataY[i]=-1
return dataX,dataY
'''上面就是准备好了数据
'''
'''从上面的输入数据可知,我们要训练的是一个第一层网络有4个输出,就是四个MP神经
元。输出的一个MP神经元。这整个就是一个二层神经网络。先要训练出w和b,其中w是4个参数
为了简单,这边直接写死。w是一个矢量,一次更新完成。
这里的梯度是一个常数,求一个即可至,因此这里的更新是有一点技巧的
input 向量w,b
data 是一个一定格式的数据x1,x2,x3,...y1
'''
def perception(data,w0,b0,gama):
w = w0
b = b0
j=0
while j<5: #这里是一个一直循环的,重复选取,直到没有误差,可以修改个判断的,这里就不写了。
for i in range(data.shape[0]):
if data[i][-1]*(np.dot(w.T,data[i][:-1])+b)<=0:
w =w +gama*data[i][-1]*data[i][:-1]
b = b + gama*data[i][-1]
j =j+1
return w,b
#产生数据集
dataX,dataY = loadData()
data = np.column_stack((dataX,dataY))
#初始化参数w,b
w0 = np.array([0,0,0,0])
b0=0
#步长
gama = 0.05
w,b = perception(data,w0,b0,gama)
print(w,b)
def test(data,w,b):
s=0
n=data.shape[0]
for i in range(n):
if data[i][-1]*(np.dot(w.T,data[i][:-1])+b)>0:
s +=1
print('程序的正确率是:',s/n)
test(data,w,b)
感知机的简单代码
最新推荐文章于 2022-07-08 21:14:42 发布