机器学习——感知机模型

文章目录

  • 前言
  • 1.感知机模型介绍
    • 1.1基本概念
    • 1.2数学表达
    • 1.3几何解释
    • 1.4优缺点
  • 2.二分类应用
    • 2.1应用介绍
    • 2.2准备数据集
      • 2.2.1环境检查
      • 2.2.2数据集介绍
      • 2.2.3获取数据
      • 2.2.4划分数据集
    • 2.3可视化训练集
    • 2.4训练过程
      • 2.4.1首轮梯度下降
      • 2.4.2多轮梯度下降
    • 2.5可视化分类结果
    • 2.6在验证集验证
  • 结语

前言

在学习神经网络模型时,最先接触的大概率是感知机模型,本篇博客主要介绍了感知机模型以及其应用的二分类模型,使用的数据集是我们常见的鸢尾花数据集。

1.感知机模型介绍

1.1基本概念

神经网络:由具有适应性的简单单元组成的广泛并行互联的网络,它的组织能够模拟生物神经系统对真实世界物体所做出的交互反应
感知机:由两层神经元组成输入层(用于接收外界信号)和输出层(做出判断)

1.2数学表达

感知机可以看作是一个线性分类器。它接收输入向量x=(x1,x2,x3,…,xn),其中n为输入特征的数量,例如在鸢尾花分类任务中,输入特征可能是花的花瓣长度、花瓣宽度等。
将所有输入按照一定的权重w=(w1,w2,w3,…,wn)进行累加与阈值进行运算,结果通过激活函数输出。因此感知机模型的输出表达可以写为:
感知机输出表达式
其中,wx表示向量,sign()是阶跃函数
阶跃函数

1.3几何解释

  • 在二维空间中(n=2,输入特征为x1和x2),感知机模型的决策边界是一条直线。
  • 对于线性可分的数据,感知机的目标是找到合适的w和b,使得这条直线能够将不同类别的数据点分开。例如,在一个简单的两类数据集(如正类和负类)中,正类的数据点在直线的一侧,负类的数据点在直线的另一侧。
  • 在高维空间中,决策边界是一个超平面,超平面的方程为wx+b=0,它将高维空间划分为两个区域,分别对应两个不同的类别。

1.4优缺点

  • 优点:
    1.简单易懂,计算效率高。它的结构和学习算法都比较直观,容易理解和实现。
    2.对于线性可分的数据,感知机能够保证在有限的迭代次数内找到一个能够正确分类所有数据的决策边界。
  • 缺点:
    1.只能处理线性可分的数据。如果数据不是线性可分的,感知机无法收敛,即无法找到一个合适的决策边界来正确分类所有样本。
    2.它没有考虑数据中的概率信息,只是简单地进行二分类,在处理复杂的实际问题时,可能无法提供足够准确的分类结果。

2.二分类应用

2.1应用介绍

从 iris 数据集中取出[sepal length,sepal width]两个属性作为样本特征,取前两类样本训练感知机网络进行二分类实验。每一类取前 40 个样本作为训练集,剩余的 10 个样本作为测试集。

2.2准备数据集

2.2.1环境检查

本案例使用的是鸢尾花数据集,该数据集封装在sklearn库中,所以如果没有安装该库,可以在终端执行下行代码安装该库:

pip install scikit-learn

在这里插入图片描述

2.2.2数据集介绍

如果你对鸢尾花数据集并不熟悉,可以通过下面代码进行了解:

from sklearn.datasets import load_iris
iris=load_iris()
print(iris.DESCR)

在这里插入图片描述
该数据集共四个特征,可以分为三类,每类50个样本,这时我们可以通过下面代码具体查看数据集的信息。

print(iris.data)
print(iris.target)
print(iris.values())

这里为了方便换成jupyter notebook,部分代码的执行可能需要加print().
在这里插入图片描述

2.2.3获取数据

dataset=iris.data[:100,:2]
datalabel=iris.target[:100]
datalabel,dataset

运行结果:
在这里插入图片描述

2.2.4划分数据集

将数据集划分为训练集和验证集,在划分数据集前需要将标签置为{-1,1}

datalabel[:50]=-1
datalabel[50:]=1
x_train=[]
x_test=[]
y_train=[]
y_test=[]
x_train.append(dataset[:40])
x_test.append(dataset[40:50])
y_train.append(datalabel[:40])
y_test.append(datalabel[40:50])
x_train.append(dataset[50:90])
x_test.append(dataset[90:100])
y_train.append(datalabel[50:90])
y_test.append(datalabel[90:100])
import numpy as np
x_train=np.array(x_train).reshape(80,2)
y_train=np.array(y_train).reshape(80,1)
x_test=np.array(x_test).reshape(20,2)
y_test=np.array(y_test).reshape(20,1)
x_train.shape,x_test.shape,y_train.shape,y_test.shape

在这里插入图片描述
这里数据集的划分有多种方式,上述仅供参考,代码略显冗长

2.3可视化训练集

使用matplotlib模块可视化散点图

import matplotlib.pyplot as plt
plt.scatter(x_train[:40,0],x_train[:40,1],c='r')
plt.scatter(x_train[40:,0],x_train[40:,1],c='g')
plt.show()

在这里插入图片描述

2.4训练过程

采用随机梯度下降,更新公式为:

在这里插入图片描述

2.4.1首轮梯度下降

w=[1,1]
b=0
learning_rate=0.1
indices = np.random.permutation(len(y_train))
loss=0
for i in indices:predict=np.sign(np.dot(w,x_train[i])+b)if predict*y_train[i]<=0:loss+=1w+=learning_rate*y_train[i]*x_train[i]b+=learning_rate*y_train[i]
loss,w,b

运行结果:
在这里插入图片描述

2.4.2多轮梯度下降

在这里插入图片描述
此时在训练集上已经无误差,即能够正确分类。

2.5可视化分类结果

plt.scatter(x_train[:40,0],x_train[:40,1],c='r')
plt.scatter(x_train[40:,0],x_train[40:,1],c='g')
x=np.linspace(3,8,100)
y=-(w[0]*x+b)/w[1]
plt.plot(x,y,c='b')
plt.show()

在这里插入图片描述

2.6在验证集验证

right=0
for i in range(len(y_test)):predict=np.sign(np.dot(w,x_test[i])+b)if predict==y_test[i]:right+=1
right/len(y_test)

在这里插入图片描述

结语

至此已经完成了利用感知机完成分类问题,对神经网络和梯度下降应该有了更深的理解,上述代码可能有问题欢迎批评指正!!!

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

11.20[JAVAEXP3]重定向细究【DEBUG】

设置了根域名访问为testServlet,让他重定向到首页为test.jsp&#xff0c;事实上也都触发了&#xff0c;但是最后显示的为什么不是test.jsp生成页面&#xff0c;依然还是index.jsp生成的页面&#xff1f;&#xff1f; 重定向是通过Dispatcher进行的&#xff0c;而不是sendRedir…

YOLOv11模型改进-注意力-引入卷积和注意力融合模块(CAFM) 提升小目标和遮挡检测

本篇文章将介绍一个新的改进机制——卷积和注意力融合模块CAFM&#xff0c;并阐述如何将其应用于YOLOv11中&#xff0c;显著提升模型性能。首先&#xff0c;CAFM是为了融合卷积神经网络&#xff08;CNNs&#xff09;和 Transformer 的优势&#xff0c;同时对全局和局部特征进行…

APM装机教程(五):测绘无人船

文章目录 前言一、元生惯导RTK使用二、元厚HXF260测深仪使用三、云卓H2pro遥控器四、海康威视摄像头 前言 船体&#xff1a;超维USV-M1000 飞控&#xff1a;pix6c mini 测深仪&#xff1a;元厚HXF160 RTK&#xff1a;元生惯导RTK 遥控器&#xff1a;云卓H12pro 摄像头&#xf…

基于MinIO打造高可靠分布式“本地”文件系统

MinIO是一款高性能的对象存储服务&#xff0c;而S3协议是由亚马逊Web服务&#xff08;AWS&#xff09;制定的一种标准协议&#xff0c;用于云存储服务之间的数据交换。MinIO与S3协议的关系在于&#xff0c;MinIO实现了S3协议的接口&#xff0c;这意味着用户可以使用与AWS S3相同…

Luma 视频生成 API 对接说明

Luma 视频生成 API 对接说明 随着 AI 的应用变广&#xff0c;各类 AI 程序已逐渐普及。AI 已逐渐深入到人们的工作生活方方面面。而 AI 涉及的行业也越来越多&#xff0c;从最初的写作&#xff0c;到医疗教育&#xff0c;再到现在的视频。 Luma 是一个专业高质量的视频生成平…

基础算法——搜索与图论

搜索与图论 图的存储方式2、最短路问题2.1、Dijkstra算法&#xff08;朴素版&#xff09;2.2、Dijkstra算法&#xff08;堆优化版&#xff09;2.3、Bellman-Ford算法2.4、SPFA求最短路2.5、SPFA判负环2.6、Floyd算法 图的存储方式 2、最短路问题 最短路问题可以分为单源最短路…

Online Monocular Lane Mapping

IROS 2023 港科大 文章链接&#xff1a;http://arxiv.org/abs/2307.11653 github&#xff1a;GitHub - HKUST-Aerial-Robotics/MonoLaneMapping: Online Monocular Lane Mapping Using Catmull-Rom Spline (IROS 2023) 动机 摆脱高精地图&#xff0c;使用车端的传感器来实现车端…

29.两数相除 python

两数相除 题目题目描述示例 1:示例 2:提示&#xff1a;题目链接 题解解题思路python实现代码解释提交结果 题目 题目描述 给你两个整数&#xff0c;被除数 dividend 和除数 divisor。将两数相除&#xff0c;要求 不使用 乘法、除法和取余运算。 整数除法应该向零截断&#x…

MicroBlaze软核开发(二):GPIO

实现功能&#xff1a;使用 MicroBlaze软核&#xff0c;配置GPIO用拨码开关控制LED灯 Vivado版本&#xff1a;2018.3 目录 引言 vivado部分&#xff1a; 一、配置GPIO 二、生成HDL文件编译 SDK部分&#xff1a; 一、导出硬件启动SDK 二、新建应用程序工程 三、编写程序代…

sdk项目的git 标记新tag的版本号

在 Git 中&#xff0c;tag 是用来标记某个特定的提交点&#xff08;通常是发布版本或重要的里程碑&#xff09;的工具。通过 git tag&#xff0c;你可以为版本号创建标记&#xff0c;帮助团队跟踪不同版本的代码。 如果你想创建一个新的版本号标签&#xff0c;可以按照以下步骤…

40分钟学 Go 语言高并发:服务注册与发现

服务注册与发现 一、系统架构设计 让我们先通过流程图了解服务注册与发现的整体架构&#xff1a; 二、核心组件实现 1. 服务注册中心 package discoveryimport ("context""sync""time" )// ServiceInstance 服务实例 type ServiceInstance…

〔 MySQL 〕索引

目录 1. 没有索引&#xff0c;可能会有什么问题 2. 认识磁盘 MySQL与存储 先来研究一下磁盘&#xff1a; 在看看磁盘中一个盘片​编辑 扇区 定位扇区​编辑 结论 磁盘随机访问(Random Access)与连续访问(Sequential Access) 3. MySQL 与磁盘交互基本单位 4. 建立共识…

微信小程序里的小游戏研发需要什么技术栈

研发小程序里的小游戏通常需要以下技术栈&#xff1a; 前端技术 HTML5 / CSS3&#xff1a;用于构建游戏的界面布局和样式。JavaScript&#xff1a;作为核心编程语言&#xff0c;实现游戏的逻辑和交互。小程序开发框架&#xff1a;如微信小程序的开发框架&#xff0c;了解其 API…

php 生产者-消费者实现

一、项目背景 mes报工需求&#xff0c;原项目接口接收产线上位抛来的数据&#xff0c;处理无误后存储在本地&#xff0c;最后抛给工厂接口。 但是有时候工厂数据响应太慢&#xff0c;也导致mes响应给上位变慢&#xff0c;拖慢了mes系统。 现要求&#xff0c;将原接口中抛给工厂…

SpringBoot 解决跨域问题

SpringBoot 解决跨域问题 遇到前端跨域访问问题&#xff0c;类似于这样的&#xff1a; 在Springboot项目里加上这个配置文件CorsConfig.java&#xff0c;重启之后即可实现跨域访问&#xff0c;前端无需再配置跨域。 1、添加跨域工具包CorsConfig 2、写跨域代码 import org.sp…

IO基础(缓冲流)

FileInputStream、FileOutputStream、FileReader、FileWriter属于基础流。 缓冲流是高级流。能够高效的处理数据。原理&#xff1a;底层自带了长度为8192的缓冲区提高性能 字节缓冲流&#xff1a;BufferedInputStream、BufferedOutputStream 字符缓冲流&#xff1a;Buffered…

云数据库 Memcache

Memcached 是一个高性能的分布式内存缓存系统&#xff0c;主要用于加速动态网页应用的访问速度&#xff0c;通过减少数据库查询次数来提高系统性能。Memcached 将常用的数据存储在内存中&#xff0c;因此提供了非常快速的读取和写入操作&#xff0c;通常用于缓存热点数据&#…

高转化的Facebook广告文案的秘诀

Facebook 广告文案是制作有效 Facebook 广告的关键方面。它侧重于伴随广告视觉元素的文本内容。今天我们的博客将深入探讨成功的 Facebook 广告文案的秘密&#xff01; 一、广告文案怎么写&#xff1f; 正文&#xff1a;这是帖子的正文&#xff0c;出现在您姓名的正下方。它可…

算法基础学习Day2(双指针)

文章目录 1.题目2.题目解答1.快乐数题目及题目解析算法学习代码提交 2.题目2题目及题目解析算法学习代码提交 1.题目 202. 快乐数 - 力扣&#xff08;LeetCode&#xff09;11. 盛最多水的容器 - 力扣&#xff08;LeetCode&#xff09; 2.题目解答 1.快乐数 题目及题目解析 …

Web3与人工智能的跨界融合:数据隐私与去中心化的新机遇

随着Web3和人工智能&#xff08;AI&#xff09;技术的不断发展&#xff0c;两者的结合正在成为未来互联网的重要趋势。Web3代表着去中心化的未来&#xff0c;AI则提供了强大的智能化能力。当这两者结合时&#xff0c;不仅为数据隐私保护提供了新的解决方案&#xff0c;还推动了…