感知机的简单代码

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)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值