感知机的简单代码

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)

猜你喜欢

转载自blog.csdn.net/tortelee/article/details/79659103