【几何角度】感知机

本质:将n维空间中的一些点线性投影到一维,在一维轴上找一个阈值对这些点进行二分类。

程序:

import numpy as npclass Perceptron:def __init__(self, learning_rate=0.01, n_iterations=1000):self.learning_rate = learning_rateself.n_iterations = n_iterationsdef fit(self, X, y):self.weights = np.zeros(1 + X.shape[1])self.errors = []for _ in range(self.n_iterations):error = 0for xi, target in zip(X, y):update = self.learning_rate * (target - self.predict(xi))self.weights[1:] += update * xiself.weights[0] += updateerror += int(update != 0.0)self.errors.append(error)return selfdef net_input(self, X):return np.dot(X, self.weights[1:]) + self.weights[0]def predict(self, X):return np.where(self.net_input(X) >= 0.0, 1, -1)# 创建一些简单的训练数据
X_train = np.array([[2, 3], [4, 5], [1, 2], [5, 3]])
y_train = np.array([1, 1, -1, -1])# 创建感知机对象并进行训练
perceptron = Perceptron()
perceptron.fit(X_train, y_train)# 进行预测
X_test = np.array([[3, 4], [1, 1]])
predictions = perceptron.predict(X_test)
print("Predictions:", predictions)print(X_train.shape[1])
print(perceptron.weights)

逐句解释:

1,

import numpy as np

这一行导入了 NumPy 库,NumPy 是 Python 中用于科学计算的一个核心库,它提供了强大的数组和矩阵操作功能。

2,

class Perceptron:

这一行定义了一个名为 Perceptron 的类,用于实现感知机算法。

3,

  def __init__(self, learning_rate=0.01, n_iterations=1000):

这是 Perceptron 类的构造函数,用于初始化感知机的学习率和迭代次数,默认学习率为 0.01,迭代次数为 1000。

4,

        self.learning_rate = learning_rateself.n_iterations = n_iterations

这两行将传入的学习率和迭代次数保存在类的实例变量中,以便在类的其他方法中使用。

5,

    def fit(self, X, y):

这是 Perceptron 类的方法,用于训练感知机模型。它接受输入数据 X 和标签 y 作为参数。

6,

        self.weights = np.zeros(1 + X.shape[1])

这一行创建了一个初始权重向量,长度为输入特征数加 1,所有元素初始化为零。权重向量的第一个元素对应于偏置项。

7,

        self.errors = []

这一行创建了一个空列表,用于保存每次迭代中误分类样本的数量,以便后续可视化训练过程中的错误。

8,

        for _ in range(self.n_iterations):

这是一个迭代循环,用于执行感知机的训练过程,循环次数由 n_iterations 指定。

9,

            error = 0

在每次迭代开始时,将误分类样本的计数器初始化为零。

10,

            for xi, target in zip(X, y):

这是一个嵌套循环,遍历输入数据 X 和对应的标签 y,其中 xi 是当前样本的特征向量,target 是当前样本的真实标签。

11,

                update = self.learning_rate * (target - self.predict(xi))

计算当前样本的预测结果与真实标签之间的误差,并乘以学习率,得到权重更新值。

12,

                self.weights[1:] += update * xiself.weights[0] += update

根据误差更新权重向量。更新规则是:对于权重向量中除了偏置项以外的元素,按照输入特征与误差的乘积更新;偏置项单独更新。

13,

                error += int(update != 0.0)

更新误分类样本的计数器。

14,

            self.errors.append(error)

将当前迭代的误分类样本数量添加到错误列表中。

15,

        return self

训练结束后,返回训练好的感知机模型。

16,

    def net_input(self, X):

这是一个辅助方法,用于计算感知机的输入,即输入数据与权重向量的线性组合。

17,

        return np.dot(X, self.weights[1:]) + self.weights[0]

计算输入数据 X 与权重向量除偏置项外的部分的点积,再加上偏置项,得到感知机的输入。

18,

    def predict(self, X):

这是 Perceptron 类的方法,用于对输入数据进行预测。

19,

        return np.where(self.net_input(X) >= 0.0, 1, -1)

根据感知机的输入,通过阈值函数(大于等于0即为正类,否则为负类)对输入数据进行分类预测,返回预测结果。

20,

接下来是主程序部分,用于创建数据、训练感知机模型和进行预测。

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

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

相关文章

【Python基础】一文搞懂:Python 中 “requirements.txt“ 文件生成和使用

文章目录 1 引言2 什么是 requirements.txt?3 如何生成 requirements.txt?3.1 方法一:使用 pip freeze3.2 方法二:使用 pipreqs 3.3 使用 pip freeze 和 pipreqs 的对比4 如何使用 requirements.txt?4.1 安装依赖4.2 更…

[从零开发JS应用] 如何在VScode中配置Javascript环境,常见的调试方法有哪些?

一、安装VSCode和Node.js 记录环境配置:本文配置的环境主要针对单独JS文件的断点调试,主要是为了调试LeetCode里面的代码。 首先在官网下载对应的版本:https://nodejs.org/en/ 开始安装,可以自定义选择安装路径。 这里选择Add Pa…

【亲测,安卓版】快速将网页网址打包成安卓app,一键将网页打包成app,免安装纯绿色版本,快速将网页网址打包成安卓apk

背景:部分客户需求将自己网站打包成app,供用户在浏览器安装使用、 网页网址快速生成app 准备材料操作流程第一步:打开HBuilder X新建项目第二步创建Wap2App项目第三步修改App图标第四步发布app第五步查看apk 准备材料 1.需要打包的网页 2.ap…

在网页开发中,前后端如何更好地协同工作?

在网页开发中,前后端如何更好地协同工作是非常关键的,以下是一些方法和技巧可以帮助前后端更好地协同工作: 1.明确需求和规范:前后端应该共同讨论和明确项目的需求和规范,包括功能、界面、数据格式等。确保双方对项目…

页面加载不出来,报错[@umijs/runtime] load component failed

问题描述 页面加载不出来数据,一直在旋转,控制台输出内容如下: 原因分析: 之前页面是没有问题的,在写当前页面突然出现页面加载不出来,控制台报错,主要是页面引入了这行代码报错 import { …

MX Component基础使用(多点位读取,多点位写入)

步骤,先连接PLC,然后在填入对应的点位 D10 然后去读取。 using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Threading.Tasks;us…

边缘计算网关的主要功能有哪些?天拓四方

随着物联网(IoT)的快速发展和普及,边缘计算网关已经成为了数据处理和传输的重要枢纽。作为一种集成数据采集、协议转换、数据处理、数据聚合和远程控制等多种功能的设备,边缘计算网关在降低网络延迟、提高数据处理效率以及减轻云数…

民国漫画杂志《时代漫画》第13期.PDF

时代漫画13.PDF: https://url03.ctfile.com/f/1779803-1247458360-14efab?p9586 (访问密码: 9586) 《时代漫画》的杂志在1934年诞生了,截止1937年6月战争来临被迫停刊共发行了39期。 ps:资源来源网络!

数组的定义、顺序存储及特殊矩阵的存储

目录 一、数组的定义 1.1概念 1.2抽象数据类型定义 二、数组的顺序存储 2.1一维数组元素的存储位置 2.2二维数组元素的存储位置 2.3三维数组元素的存储位置 三、特殊矩阵的压缩存储 3.1相关概念 3.2对称矩阵 3.3三角矩阵 3.4对角矩阵(带状矩阵&#xff0…

【机器学习300问】102、什么是混淆矩阵?

一、混淆矩阵的定义 混淆矩阵是一种用于评估分类模型性能的评估指标。当模型对数据进行预测并将数据分配到预定义的类别时,混淆矩阵提供了一种直观的方式来总结这些预测与数据实际类别之间的对应关系。具体来说,它是一个表格。 二、分类模型性能评估一级…

私域用户画像分析

为什么做私域要分析用户画像? 1、更好地了解用户需求:通过分析用户画像,可以深入了解用户的需求、偏好、行为等特征,从而更好地满足他们的需求。 2、个性化营销:根据用户画像,可以为用户提供个性化的营销…

js setTimeout、setInterval、promise、async await执行顺序梳理

基础知识 async: 关键字用于标记一个函数为异步函数,该函数中有一个或多个promise对象,需要等待执行完成后才会继续执行。 await:关键字,用于等待一个promise对象执行完,并返回其中的值,只能在async函数内部使用。可…

云服务器平台AutoDL--基本介绍与使用感受

因为课程作业需要复现DreamBooth,找了几个教程之后,发现了AutoDL这个好东西,芜湖~ 相关概念 以下回答来自于ChatGPT。 云计算平台:云服务器平台是提供按需计算资源和服务的在线平台,通常包括存储、处理能力、数据库、…

搜维尔科技:使用Haption Virtuose 6D 力反馈通过机器人和虚拟现实完成远程操作项目

使用Haption Virtuose 6D 力反馈通过机器人和虚拟现实完成远程操作项目 搜维尔科技:使用Haption Virtuose 6D 力反馈通过机器人和虚拟现实完成远程操作项目

【Python设计模式06】代理模式

代理模式(Proxy Pattern)是一种结构型设计模式,它通过创建代理对象来控制对另一个对象的访问。代理模式可以用于延迟实例化、控制访问权限、记录日志等。代理模式的核心思想是为其他对象提供一种代理,以控制对这个对象的访问。 代…

System32文件夹千万不能删除,看完这篇你就知道为什么了

序言 C:\Windows\System32目录是Windows操作系统的关键部分,重要的系统文件存储在该目录中。网上的一些恶作剧者可能会告诉你删除它,但你不应该尝试去操作,如果你尝试的话,我们会告诉你会发生什么。 什么是System32文件夹 位于C:\Windows\System32的System32文件夹是所有…

Python深度学习:【模型系列】Transformer面试灵魂20问

1. transformer简介 Transformer模型是一种基于自注意力机制的神经网络架构,主要用于处理序列数据,如自然语言处理任务。它由Google在2017年提出,并在“Attention is All You Need”这篇论文中首次公开。Transformer模型的核心思想是利用自注意力机制来捕捉序列中的依赖关系…

MySQL 的表约束详解

在数据库设计中,约束(Constraints)是确保数据完整性和一致性的关键工具。MySQL 作为流行的关系型数据库管理系统,提供了多种约束类型来维护数据的准确性和可靠性。本文将详细探讨 MySQL 的各种表约束,包括它们的定义、…

【代码随想录】面试常考类型之动态规划01背包

前言 更详细的在大佬的代码随想录 (programmercarl.com) 本系列仅是简洁版笔记,为了之后方便观看 不同的二叉搜索树 96. 不同的二叉搜索树 - 力扣(LeetCode) 通过举例子发现重叠子问题 代码很简单,主要是思路问题&#xff0…

Windows内核函数 - 创建关闭注册表

在驱动程序的开发中,经常会用到对注册表的操作。与Win32的API不同,DDK提供另外一套对注册表操作的相关函数。首先明确一下注册表里的几个概念,避免在后面混淆。 图1 注册表概念 有5个概念需要重申一下: * 注册表项: 注…