感知机的简单代码

本文介绍了一个简单的感知机模型实现过程,使用了经典的鸢尾花数据集进行训练,并展示了如何通过Python和NumPy来手动实现感知机的学习算法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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)

当然,我可以给你介绍一下简单感知机Python代码感知机是一种二分类的线性分类模型,它的基本思想是通过调整权重和偏置来使得输入样本被正确分类。 下面是一个简单感知机Python代码示例: ```python import numpy as np class Perceptron: def __init__(self, input_size): self.weights = np.zeros(input_size) self.bias = 0 def predict(self, inputs): summation = np.dot(inputs, self.weights) + self.bias if summation > 0: return 1 else: return 0 def train(self, training_inputs, labels, epochs): for _ in range(epochs): for inputs, label in zip(training_inputs, labels): prediction = self.predict(inputs) self.weights += (label - prediction) * inputs self.bias += (label - prediction) ``` 在这个代码中,我们定义了一个`Perceptron`类,它有三个方法: - `__init__`方法用于初始化感知机的权重和偏置,`input_size`参数表示输入特征的维度。 - `predict`方法用于预测输入样本的类别,它通过计算输入样本与权重的点积加上偏置,并根据结果返回0或1。 - `train`方法用于训练感知机模型,`training_inputs`参数是一个二维数组,每一行表示一个输入样本的特征向量,`labels`参数是一个一维数组,表示每个输入样本的类别标签,`epochs`参数表示训练的迭代次数。在训练过程中,我们使用随机梯度下降的方法来更新权重和偏置。 这只是一个简单感知机实现示例,实际应用中可能需要更复杂的模型和算法来解决问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值