模式识别实验三

实验三

一  实验名称

感知器设计

二 目的和意义

使用感知器完成线性分类任务

三 操作步骤或算法结构

  1. 数据预处理。载入数据文件( iris.csv 文件)中的数据,并将其分成样本向量矩阵X和样本分类结果向量 G \bf G G

  2. 4 4 4 列向量的 X X X 在最前增加一列常数 1 1 1,得到增广向量 y y y 。定义增广权向量 α α α,取各项初值为 1 1 1

  3. 根据错分惩罚的感知器准则函数原理设计感知器(公式 8.1 8.1 8.1 8.4 8.4 8.4,及教材 150 页算法 8-1 ),将包含三类的样本 X X X 分别训练。取出每一类的 80 % 80\% 80% 作为训练样本,剩余 20 % 20\% 20% 作为对比样本。第一次训练,将第一类训练样本保持不变,第二第三类取负值,分类判断出第一类样本。第二次训练,将剩余样本的第二类保持不变,第三类取负值,试训练第二类样本。观察两次训练的结果是否收敛。

    • 公式 8.1 8.1 8.1
      f ( x ) = sign ( ω T x + b ) = { + 1    ω T x + b ≥ 0 − 1    o t h e r s f(\textbf x) = \textbf {sign} (\omega^T\textbf x+b) = \begin{cases}+1 \ \ \omega^Tx +b \geq 0 \\-1\ \ others\end{cases} f(x)=sign(ωTx+b)={+1  ωTx+b01  others

    • 公式 8.2 8.2 8.2
      sign ( x ) = { + 1    x ≥ 0 − 1    x < 0   \textbf {sign}(\textbf x) =\begin{cases}+1\ \ \textbf x \geq 0 \\-1\ \ \textbf x < 0\ \end{cases} sign(x)={+1  x01  x<0 

    • 公式 8.3 8.3 8.3
      − 1 ∣ ∣ ω ∣ ∣ ∑ x i ∈ M y i ( ω T x i + b ) -\frac{1}{||\omega||}\sum\limits_{x_i \in M}y_i(\omega^T\textbf x_i+b) ∣∣ω∣∣1xiMyi(ωTxi+b)

    • 公式 8.4 8.4 8.4
      ∂ L i ( ω , b ) ∂ ω = − y i x i ∂ L i ( ω , b ) ∂ b = − y i \frac{\partial L_i(\omega,b)}{\partial \omega} = -y_i\textbf x_i\\\frac{\partial L_i(\omega,b)}{\partial b} = -y_i ωLi(ω,b)=yixibLi(ω,b)=yi

  4. 调整上述步骤中的步长、训练样本分类方式和迭代次数参数,重复实验,观察结果。试推测感知器训练不收敛的可能原因。

四 结构程序设计

读取数据

import pandas as pd

iris = pd.read_csv('iris.csv')

训练模型

import pandas as pd
import numpy as np
from sklearn.datasets import load_iris
import matplotlib.pyplot as plt

iris = load_iris()
df = pd.DataFrame(iris.data, columns=['sepal length', 'sepal width', 'petal length', 'petal width'])
df['label'] = iris.target

data = np.array(df.iloc[:100, [0, 1, -1]])
X, y = data[:, :-1], data[:, -1]
y = np.array([1 if i == 1 else -1 for i in y])

# 感知机模型
class Model:
    def __init__(self):
        self.w = np.ones(len(data[0]) - 1, dtype=np.float64)
        self.b = 0
        self.rate = 0.1

    def sign(self, x, w, b):
        y = np.dot(x, w) + b
        return y

    def fit(self, X_train, y_train):
        fault = False
        while not fault:
            wrong_count = 0
            for d in range(len(X_train)):
                x = X_train[d]
                y = y_train[d]
                if y * self.sign(x, self.w, self.b) <= 0:
                    self.w = self.w + self.rate * np.dot(y, x)
                    self.b = self.b + self.rate * y
                    wrong_count += 1
            if wrong_count == 0:
                fault = True
        return "success"

perceptron = Model()
perceptron.fit(X, y)

x = np.linspace(3, 6, 10)
y = -(perceptron.w[0] * x + perceptron.b) / perceptron.w[1]
plt.plot(x, y)

plt.plot(data[:50, 0], data[:50, 1], 'bo', color="blue", label="0")
plt.plot(data[50:100, 0], data[50:100, 1], 'bo', color="red", label="1")
plt.legend()
plt.show()

五 结果讨论与分析

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

可见感知机在该数据集上有非常好的分类效果。

对于较为简单的数据,不需要使用更加复杂的深度神经网络结构,使用传统的机器学习算法即可。不仅能够同样取得非常好的效果,并且在可解释性和算力要求上有优势。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/302537.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Objective-C中使用STL标准库Queue队列

1.修改.m文件为mm 2.导入queue头 #include<queue> 3.使用&#xff1a; #import <Foundation/Foundation.h> #include <cmath> #include <queue> using namespace std;int main(int argc, const char * argv[]) {autoreleasepool {NSLog("C标准…

软件测试|Python中的变量与关键字详解

简介 在Python编程中&#xff0c;变量和关键字是非常重要的概念。它们是构建和控制程序的基本要素。本文将深入介绍Python中的变量和关键字&#xff0c;包括它们的定义、使用方法以及一些常见注意事项。 变量 变量的定义 变量是用于存储数据值的名称。在Python中&#xff0…

RT-Thread: CPU 使用率应用

关键词&#xff1a;RT-Thread cpu使用率&#xff0c;cpuusage.c , cpuusage.h 说明&#xff1a;使用 RT-Thread 希望知道 mcu 计算能力的使用率或cpu使用率。 注意&#xff1a;在调试CUP使用率时&#xff0c;根据参考资料移植了 cpuusage.c , cpuusage.h ,也调用了 void cpu_…

【C/C++】轻量级跨平台 开源串口库 CSerialPort

文章目录 1、简介2、支持的平台3、已经支持的功能4、Linux下使用5、使用vcpkg安装CSerialPort6、交叉编译7、效果图8、基于CSerialPort的应用8.1、CommMaster通信大师8.2、CommLite串口调试器 1、简介 Qt 的QSerialPort 已经是跨平台的解决方案&#xff0c;但Qt开发后端需要 Q…

面试算法100:三角形中最小路径之和

题目 在一个由数字组成的三角形中&#xff0c;第1行有1个数字&#xff0c;第2行有2个数字&#xff0c;以此类推&#xff0c;第n行有n个数字。例如&#xff0c;下图是一个包含4行数字的三角形。如果每步只能前往下一行中相邻的数字&#xff0c;请计算从三角形顶部到底部的路径经…

高级RAG(五):TruLens 评估-扩大和加速LLM应用程序评估

之前我们介绍了&#xff0c;RAGAs评估&#xff0c;今天我们再来介绍另外一款RAG的评估工具:TruLens , trulens是TruEra公司的一款开源软件工具&#xff0c;它可帮助您使用反馈功函数客观地评估基于 LLM 的应用程序的质量和有效性。反馈函数有助于以编程方式评估输入、输出和中间…

java 创建一个可执行的jar包小程序

第1步&#xff1a;写好代码 public class Main {public static void main(String[] args) {String str "hahah";if (StringUtils.isBlank(str)) {System.out.println(str);}System.out.println("Hello world!");} }第2步&#xff1a;设置 Artifact 选择入…

多模态推荐系统综述:二、特征交互 Fusion

二、Fusion 融合不同的多模态信息&#xff0c;与bridge相比&#xff0c;融合更关注项目之间的多模态内部关系。 它可以灵活地融合不同权重和焦点的多模态信息。 注意机制是应用最为广泛的特征融合。 2.1 粗粒度注意力。 一些模型应用注意力机制在粗粒度级别融合来自多种模式…

游客管理+导航系统(地图显示并实时更新线路)——MySQL数据库+javase+GUI+迪杰斯特拉算法

记录大二上学期——数据结构项目实训&#xff0c;要求实现求得两点的最短路径&#xff08;无向赋权图&#xff09; 本人—hl—一人完成代码的实现&#xff0c;废话不多说直接看功能 所需技术&#xff1a;javase数据库迪杰斯特拉GUI 统一工具&#xff1a;idea编辑器&#xff0c…

编程语言的语法糖,你了解多少?

什么是语法糖 语法糖是一种编程语言的特性&#xff0c;通常是一些简单的语法结构或函数调用&#xff0c;它可以通过隐藏底层的复杂性&#xff0c;并提供更高级别的抽象&#xff0c;从而使代码更加简洁、易读和易于理解&#xff0c;但它并不会改变代码的执行方式。 为什么需要语…

Day1Qt

1、实现登录窗口界面 头文件 #ifndef MAINWINDOW_H #define MAINWINDOW_H#include <QMainWindow> #include <QIcon>//图标 #include <QLabel>//标签类 #include <QMovie>//动态类 #include <QLineEdit>//行编辑类 #include <QPushButton>…

有趣的前端知识(二)

推荐阅读 智能化校园&#xff1a;深入探讨云端管理系统设计与实现&#xff08;一&#xff09; 智能化校园&#xff1a;深入探讨云端管理系统设计与实现&#xff08;二&#xff09; 文章目录 推荐阅读HTML元素元素属性头部元素列表元素区块元素表单元素 颜色字符实体 HTML元素 …

过流继电器 GL-11/5 整定电流3.5A,动作时限0.5S josef约瑟

系列型号&#xff1a; GL-11过流继电器; GL-12过流继电器; GL-13过流继电器; GL-14过流继电器; GL-15过流继电器; GL-16过流继电器; GL-17过流继电器; GL-11/10过流继电器; GL-15/10过流继电器; GL-17/10过流继电器; GL-11/5过流继电器; GL-15/5过流继电器; GL-17/5过流继电器;…

Open3D 基于统计滤波去除噪点(5)

Open3D 基于统计滤波去除噪点&#xff08;5&#xff09; 一、什么是统计滤波二、具体实现1.代码 一、什么是统计滤波 统计滤波是一种常用的点云滤波方法&#xff0c;用于去除噪声和异常点。在统计滤波中&#xff0c;通过计算每个点邻域内的统计特征&#xff08;如平均值和标准…

C#之反编译之路(二)

先阅读C#之反编译之路(一)可以增加文章连续性 阅读C#之反编译之路(一) 如何快速定位代码位置 用一个小小的例子举例,用户反馈新能源车牌号无法录入,燃油车牌正常,查看日志报如下错误 拿到关键字车牌号长度错误直接反编译代码 打开dnSpy.exe→加载项目→CtrlF打开搜索框→输入…

ThreadLocal内存泄漏与解决

目录 什么是Threadlocal&#xff1f; Threadlocal的基本使用 ThreadLocal的内存泄漏举例 场景1 场景2 场景3 场景4 内存泄漏原因分析 总结 什么是Threadlocal&#xff1f; ThreadLocal 是 Java 中的一个类&#xff0c;它提供了线程本地变量的支持。线程本地变量是指被…

互联网加竞赛 基于卷积神经网络的乳腺癌分类 深度学习 医学图像

文章目录 1 前言2 前言3 数据集3.1 良性样本3.2 病变样本 4 开发环境5 代码实现5.1 实现流程5.2 部分代码实现5.2.1 导入库5.2.2 图像加载5.2.3 标记5.2.4 分组5.2.5 构建模型训练 6 分析指标6.1 精度&#xff0c;召回率和F1度量6.2 混淆矩阵 7 结果和结论8 最后 1 前言 &…

RBAC基于角色的访问控制

一 什么是RBAC 概念 RBAC 是基于角色的访问控制&#xff08;Role-Based Access Control &#xff09;在 RBAC 中&#xff0c;权限与角色相关联&#xff0c;用户通过成为适当角色的成员而得到这些角色的权限。这就极大地简化了权限的管理。这样管理都是层级相互依赖的&#…

Django 4.2.7 ORM 连接MySQLServer 完成单表CRUD

文章目录 Django ORM介绍1.使用pycharm新建一个Django项目2.修改settings.py文件中 DATABASES3.创建APP4.创建模型5.操作数据库 Django ORM介绍 Django 模型使用自带的 ORM。 对象关系映射&#xff08;Object Relational Mapping&#xff0c;简称 ORM &#xff09;用于实现面向…

Java程序员面试-场景篇

前言 裁员增效潮滚滚而来&#xff0c;特总结一些实际场景方案的面试题&#xff0c;希望对大家找工作有一些帮助。 注册中心 题目&#xff1a; 有三台机器&#xff0c;分别部署了微服务A、微服务B、注册中心&#xff0c;其中A和B都有服务接口提供并正常注册到了注册中心&…