python学智能算法(二十)|SVM基础概念-感知机算法及代码

引言

前序学习进程中,已经学习了超平面的基础知识,学习链接为:超平面
在此基础上,要想正确绘制超平面,还需要了解感知机的相关概念。

感知机

感知机是对生物神经网络的模拟,当输入信号达到感知机的阈值时,会输出感应信号,否则不会有任何反应。
这里先对感知机建立数学模型。
对于向量F和向量G,有:
Fˉ=(f0,f1,f2,...,fn),Gˉ=(g0,g1,g2,...,gn)\bar {F}=(f0,f1,f2,...,fn),\bar{G}=(g0,g1,g2,...,gn) Fˉ=(f0,f1,f2,...,fn),Gˉ=(g0,g1,g2,...,gn)定义向量点积:H=Fˉ⋅Gˉ\ H=\bar {F} \cdot \bar {G} H=FˉGˉ

如果满足:
H={1if H≥0−1if H<0H=\left\{ \begin{matrix} 1 \quad \text{\quad if } H\geq 0 \\ -1 \quad \text{if } H< 0 \end{matrix} \right.H={1if H01if H<0
相应的,在numpy模块中,也有一个sign()函数可以对感知机的数学模型进行精炼表达,这有一个代码实例:

# 引入numpy模块
import numpy as np
# 引入数据
x=[1,2,3,-6,-8,-10]
# np.sign()函数测试
z=np.sign(x)
print('z=',z)

代码运行后的输出效果为:
np。sign()函数输出效果
非常明显,对于非负数,np.sign()函数输出1,对于负数则直接输出0。

一个关于感知机的项目

这里有一个感知机算法的简单项目:

# 引入模块
import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import make_classification
from matplotlib.colors import ListedColormap# 定义随机数种子
# 定义了随机数种子后,每次产生的随机数是一样的
# 使用不同的随机数种子,会得到不同的初始随机数
np.random.seed(88)def perceptron_learning_algorithm(x, y):# W是3个在[0,1)区间上均匀分布的随机数w = np.random.rand(3)# misclassified_examples是由predict()函数计算获得misclassified_examples = predict(hypothesis, x, y, w)while misclassified_examples.any():x_example, expect_y = pick_one_from(misclassified_examples, x, y)# 更新权重w = w + x_example * expect_y# 重新代入predict()函数进行评估misclassified_examples = predict(hypothesis, x, y, w)return w# hypothesis函数对w和x两个向量的点积进行感知机运算
# hypothesis函数返回值是1或者-1
def hypothesis(x, w):return np.sign(np.dot(w, x))# predict函数包括4个变量
def predict(hypothesis_function, x, y, w):# np.apply_along_axis函数先将x按照行取出,这是由axis=1决定的取值方式# hypothesis_function每次接收x的一行和wpredictions = np.apply_along_axis(hypothesis_function, 1, x, w)# y != predictions表示分类错误,这个!代表的不等于判断会输出布尔结果False和True# x[y != predictions]直接输出x[y != predictions]取值为True时对应x行的数据misclassified = x[y != predictions]return misclassified# pick_one_from函数
def pick_one_from(misclassified_examples, x, y):# 随机打乱分类样本的顺序np.random.shuffle(misclassified_examples)t = misclassified_examples[0]index = np.where(np.all(x == t, axis=1))[0][0]return x[index], y[index]# 使用sklearn生成线性可分的数据集
x, y = make_classification(n_samples=100,n_features=2,n_redundant=0,n_informative=2,n_clusters_per_class=1,random_state=42,class_sep=2.0
)# 将标签从0/1转换为-1/1
y = np.where(y == 0, -1, 1)# 添加偏置项
x_augmented = np.c_[np.ones(x.shape[0]), x]# 训练感知机模型
w = perceptron_learning_algorithm(x_augmented, y)
print("感知机权重:", w)# 绘制分类效果图
plt.figure(figsize=(10, 8))# 绘制数据点
plt.scatter(x[y==1][:, 0], x[y==1][:, 1], c='blue', marker='o', label='Class +1', edgecolor='k', s=70)
plt.scatter(x[y==-1][:, 0], x[y==-1][:, 1], c='red', marker='o', label='Class -1', s=70)# 绘制决策边界
x_min, x_max = x[:, 0].min() - 1, x[:, 0].max() + 1
y_min, y_max = x[:, 1].min() - 1, x[:, 1].max() + 1xx, yy = np.meshgrid(np.arange(x_min, x_max, 0.02),np.arange(y_min, y_max, 0.02))# 预测网格点的分类
Z = np.array([hypothesis(np.array([1, a, b]), w) for a, b in zip(xx.ravel(), yy.ravel())])
Z = Z.reshape(xx.shape)# 绘制分类区域
cmap_light = ListedColormap(['#FFAAAA', '#AAAAFF'])
plt.contourf(xx, yy, Z, cmap=cmap_light, alpha=0.3)# 绘制决策边界
plt.contour(xx, yy, Z, levels=[0], linewidths=2, colors='black')# 添加图例和标题
plt.title('Perceptron Classification Results', fontsize=16)
plt.xlabel('Feature 1', fontsize=14)
plt.ylabel('Feature 2', fontsize=14)
plt.legend(loc='upper right', fontsize=12)
plt.grid(True, linestyle='--', alpha=0.7)
plt.tight_layout()plt.show()

代码运行后,会获得直接的分类效果:
感知机
下一件文章将详细解读代码。

总结

学习了感知机的基本概念。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

操作HTML网页

一、HTML网页的介绍 HTML&#xff0c;即超文本标记语言&#xff08;HyperText Markup Language&#xff09;&#xff0c;它不是一种编程语言&#xff0c;而是一种标记语言&#xff0c;用于描述网页的结构。HTML 通过一系列标签来定义网页中的各种元素&#xff0c;如文本、图片…

Django--03视图和模板

Django–03视图和模板 Part 3: Views and templates 本教程承接第二部分&#xff0c;我们将继续开发投票应用&#xff0c;重点介绍 Django 的表单处理和通用视图。 文章目录Django--03视图和模板前言概述一、编写更多视图二、编写实际执行操作的视图三、快捷方式&#xff1a;r…

《每日AI-人工智能-编程日报》--2025年7月15日

介绍&#xff1a;AI &#xff1a;英伟达恢复向中国销售 H20 并推出新 GPU&#xff1a;7 月 15 日&#xff0c;英伟达官宣将恢复向中国销售 H20&#xff0c;并推出全新的 NVIDIA RTX PRO GPU&#xff0c;其中 B30 性能约为 H20 的 75%&#xff0c;定价在 6500 至 8000 美元之间&…

C++STL-list

一.基础概念相当于数据结构里面的双向链表二.基础操作1.list对象创建1. 默认构造函数list<int> l1;2. 初始化列表list<int> l2_1 { 9,8,7,6,5 };list<int> l2_2({ 9, 8, 7, 1, 5 });3. 迭代器list <int> l3(l2_1.begin(), l2_1.end());4. 全0初始化li…

【PTA数据结构 | C语言版】字符串插入操作

本专栏持续输出数据结构题目集&#xff0c;欢迎订阅。 文章目录题目代码题目 请编写程序&#xff0c;将给定字符串 t 插入到另一个给定字符串 s 的第 pos 个字符的位置。 输入格式&#xff1a; 输入先后给出主串 s 和待插入的字符串 t&#xff0c;每个非空字符串占一行&#…

Postman + Newman + Jenkins 接口自动化测试

💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 </

CAS单点登录架构详解

目录 概述核心概念 TGC (Ticket Granting Cookie)TGT (Ticket Granting Ticket)ST (Service Ticket) 架构设计 整体架构存储架构安全机制 工作流程 完整登录时序流程步骤详解 技术实现 会话管理数据同步问题最佳实践 参考资料 概述 CAS (Central Authentication Service) 是…

C++中正则表达式详解和实战示例

C 中的正则表达式&#xff08;Regular Expression&#xff09;主要通过标准库 <regex> 提供&#xff0c;能够用于字符串匹配、查找、替换、验证格式等。它在 C11 中首次引入&#xff0c;并在 C14 和 C17 中逐步完善。一、头文件和命名空间 #include <regex> #inclu…

深入解析Avro、Protobuf与JSON:序列化技术的选择与应用

在现代分布式系统和数据交换场景中&#xff0c;序列化技术是数据存储、传输和通信的核心。本文深入探讨三种主流序列化技术&#xff1a;Avro、Protobuf 和 JSON&#xff0c;从背景、特点、示例代码&#xff08;Python&#xff09;、优势及最佳实践等多个维度进行对比分析&#…

Vue 中 effectScope() 的全面解析与实战应用

一、effectScope 概述1.1 什么是 effectScopeeffectScope() 是 Vue 3.2 引入的核心 API&#xff0c;用于创建副作用作用域容器。它能够将多个响应式副作用&#xff08;如 watch、watchEffect 和 computed&#xff09;组织在一起&#xff0c;实现统一的生命周期管理。1.2 核心价…

嵌入式面试八股文(十六)·一文搞懂嵌入式常用名词IC、ASIC、CPU、MPU、MCU、SoC、SoPC、GPU、DSP

目录 1. IC&#xff08;Integrated Circuit&#xff0c;集成电路&#xff09; 2. ASIC&#xff08;Application-Specific Integrated Circuit&#xff0c;专用集成电路&#xff09; 3. CPU&#xff08;Central Processing Unit&#xff0c;中央处理器&#xff09; 4. M…

安全参綉25暑假第一次作业

第一天 1.首先讲了d0cker的部署&#xff0c; 这个是第一个Vulhub漏洞环境。所有环境都使用D0cker容器化&#xff0c;使其易于部署和隔离测试。 其中&#xff0c;国内的阿里用不了&#xff0c;你得搞个代理&#xff0c;下国外的&#xff1a;入门指南 | Vulhub 然后按这个…

RocketMQ源码级实现原理-消息消费总览

Overview可以看到&#xff0c;pull message和consume message实际上是两个过程&#xff0c;但是对于用户是透明的 注意这三个Offset的含义&#xff0c;physical offset就是commitLog中的全局偏移量分发dispatch如上图&#xff0c;Topic的每个queue&#xff0c;都绑定了唯一的一…

linux打包固件shell脚本

不打包 pack.sh解压后无父目录&#xff08;直接是文件&#xff09;生成 checksum.txt&#xff08;包含所有文件的 SHA256&#xff09;打包后 .tar.gz 移动到上级目录#!/bin/bash# 检查是否传入版本号参数 if [ -z "$1" ]; thenecho "Usage: $0 <version> …

用uniapp开发鸿蒙应用(暂停更新-根据项目更新,现在项目未开始)

1.根据博客生成.hap文件 【鸿蒙HarmonyOS开发技巧&#xff1a;如何不依赖华为商店直接安装uniapp生成的app文件&#xff1f;一键转换app至hap格式教程详解】_entry-default-signed.hap-CSDN博客 根据网络查询鸿蒙手机安装测试app&#xff0c;需要电脑命令安装 在鸿蒙HarmonyOS手…

Linux 文件系统实现层详解:原理、结构与驱动衔接

&#x1f4c2; Linux 文件系统实现层详解&#xff1a;原理、结构与驱动衔接 &#x1f3ac; 推荐搭配视频学习&#xff1a;Linux 文件系统子系统&#xff1a;三层架构全面掌握 一、为什么要重点理解文件系统实现层&#xff1f; 文件系统实现层是 Linux 文件系统的“地基”&…

区块链应用场景深度解读:金融领域的革新与突破

引言&#xff1a;区块链技术的演进与金融领域的变革区块链技术自2008年诞生以来&#xff0c;以其去中心化、不可篡改、可追溯等特性&#xff0c;在全球范围内引发了金融领域的深刻变革。从最初的数字货币实验&#xff0c;到如今在跨境支付、证券交易、供应链金融等领域的广泛应…

redisson tryLock

应用场景RLock rLock redissonClient.getLock(Constant_LOCK request.getId()); try {boolean isLocked rLock.tryLock();if (!isLocked) {throw new ServiceException(ErrConstant.OPERATION_FAILED, "请勿重复提交");}源码public interface RLock extends Lock,…

前端docx库实现将html页面导出word

前言&#xff1a;最近遇到一个需求&#xff0c;需要将页面的html导出为word文档&#xff0c;并且包含横向和竖向页面&#xff0c;并且可以进行混合方向导出。经过一段时间的实验&#xff0c;发现只有docx这个库满足这个要求。在这里记录一下实现思路以及代码。 docx官网 一、…

虚拟主机CPU占用100导致打不开的一次处理

背景 突然有一天&#xff0c;有个客户网站打不开了&#xff0c;发来这样一张图片问题排查 打开阿里云虚拟主机控制面板&#xff0c;CPU 使用率已经达到了100%&#xff0c;这说明网站已经在高负荷运转。分析访问日志发现&#xff0c;网站出现了大量循环路径&#xff0c;其 UserA…