感知器 - 西瓜好坏自动识别——python

任务描述

本关任务:使用感知机算法建立一个模型,并根据感知器算法流程对模型进行训练,得到一个能够准确对西瓜好坏进行识别的模型。

相关知识

为了完成本关任务,你需要掌握:1.什么是感知器,2.感知器算法流程。

数据介绍
西瓜数据集中的样本特征一共有 30 个,包括:色泽、根蒂、敲声等。类别为是好瓜与不是好瓜。部分数据如下:
在这里插入图片描述
由于我们的模型只能对数字进行计算。所以,我们用x1表示色泽,x2表示根蒂,x3 表示敲声 。y 表示类别。其中,x1 = 0,表示青绿,x2 = 2,表示稍蜷, y=-1,表示不是好瓜。具体如下图:
在这里插入图片描述
而我们的任务就是,用感知器算法建立一个模型,利用训练集上的数据对模型进行训练,并对测试集上的数据进行分类。

什么是感知器
我们希望构建一个感知器模型,根据色泽、根蒂、敲声这三个特征来判断是好瓜还是坏瓜。

在这里插入图片描述
比如说,输入的特征值分别是青绿,蜷缩,浊响对应特征向量为 (0,0,0)。感知器模型会首先将样本特征值x转换为增广特征向量y,对y乘以一个对应的权值向量a,所得到的值如果大于等于 0,则判断为 +1 类别,即为好瓜,如果得到的值小于 0,则判断为 -1 类别,即不是好瓜。数学模型如下:
在这里插入图片描述
感知器算法流程
我们能否正确对西瓜好坏进行预测,完全取决于权向量的值是否正确,那么如何找到正确的参数呢?可以利用训练样本,使用梯度下降法优化感知器准则(损失函数),将权向量求解出来。
在这里插入图片描述
那么,感知器准则是怎么样的呢?
感知器准则函数是误分类点到决策边界的函数距离:

在这里插入图片描述
在这里插入图片描述
综上,感知机只针对误分类的点对参数进行更新,利用随机梯度下降算法,每次迭代值取一个样本,具体流程如下:
在这里插入图片描述

提示:

  1. 可利用np.column_stack()函数将样本转化为增广样本;
  2. dot()函数计算向量点积。

编程要求

根据提示,在右侧编辑器中的 begin-end 之间补充 python 代码,构建一个感知机模型,底层代码会调用您实现的感知机模型进行训练,并对测试集上数据进行分类。

测试说明

程序内部会检测您的代码,预测正确率大于 0.8 则视为过关。

代码

#encoding=utf8
import numpy as np
#构建感知机算法
class Perceptron(object):
    def __init__(self, learning_rate = 0.01, max_iter = 200):
        self.lr = learning_rate
        self.max_iter = max_iter
    def fit(self, data, label):
        '''
        input:data(ndarray):训练数据特征
              label(ndarray):训练数据标签
        output:a(ndarray):训练好的权重
               b(ndarry):训练好的偏置
        '''
        #编写感知机训练方法,a为增广权向量
        # datat = np.column_stack((data,np.ones(data.shape[0]))) #将样本转化为增广样本
        self.w = np.array([1.]*data.shape[1])
        self.b = np.array([1.])
        #********* Begin *********#
        for i in range(len(label)):
            while label[i]*(np.matmul(self.w,data[i])+self.b) <= 0:
                self.w = self.w + self.lr * (label[i]*data[i])
                self.b = self.b + self.lr * label[i]
        #********* End *********#
    def predict(self, data):
        '''
        input:data(ndarray):测试数据特征
        output:predict(ndarray):预测标签
        '''
        #********* Begin *********#
        yc = np.matmul(data,self.w) + self.b
        for i in range(len(yc)):
            if yc[i] >= 0:
                yc[i] = 1
            else:
                yc[i] = -1
        predict = yc
        #********* End *********#
        return predict
感知机(Perceptron)是一种基本的线性分类器,用于二分类任务。在西瓜识别的例子中,我们将使用机器学习的方法来训练一个模型,决定西瓜是否新鲜或腐烂。由于这个过程涉及到编程和数据处理,我将提供一个简化的Python示例,使用sklearn库中的Perceptron模型。首先,假设我们有西瓜的一些特征数据(如颜色、纹理、大小等),以及标签(好或坏)。以下是简单的代码框架: ```python # 导入所需库 from sklearn.linear_model import Perceptron from sklearn.model_selection import train_test_split import pandas as pd # 假设你有一个CSV文件,其中包含西瓜数据 # df = pd.read_csv('watermelon_data.csv') # 加载数据预处理(可能包括特征缩放) # X = df.drop('label', axis=1) # 特征 # y = df['label'] # 目标变量 # 划分训练集和测试集 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) # 创建Perceptron分类器 perceptron = Perceptron() # 训练模型 perceptron.fit(X_train, y_train) # 预测测试集 predictions = perceptron.predict(X_test) # 评估模型性能(例如使用accuracy_score) from sklearn.metrics import accuracy_score accuracy = accuracy_score(y_test, predictions) print("Accuracy: ", accuracy) # 如果你想看到完整的代码,这里是一个简化版: # 先实例化模型 # perceptron = Perceptron() # 使用fit方法训练模型 # perceptron.fit(X, y) # 对新数据进行预测 # new_rainbow = [[color, texture, size]] # 新鲜西瓜的特征 # prediction = perceptron.predict(new_rainbow)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Vicky__3021

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值