机器学习——感知机模型

机器学习系列文章

入门必读:机器学习介绍


文章目录

  • 机器学习系列文章
  • 前言
  • 1. 感知机
    • 1.1 感知机定义
    • 1.2 感知机学习策略
  • 2. 代码实现
    • 2.1 构建数据
    • 2.2 编写函数
    • 2.3 迭代
  • 3. 总结


前言

大家好,大家好✨,这里是bio🦖。这次为大家带来的是感知机模型。下面跟我一起来了解感知机模型吧!

感知机 (Perceptron) 是二类分类的线性分类模型 ,其输入为实例的特征向量 ,输出为实例的类别 ,分别为 +1-1。1957年,由康奈尔航空实验室(Cornell Aeronautical Laboratory)弗兰克·罗森布拉特 (Frank Rosenblatt)提出。它可以被视为一种最简单形式的前馈神经网络,是一种二元线性分类器。在人工神经网络领域中,感知机也被指为单层的人工神经网络,以区别于较复杂的多层感知机。在这里插入图片描述


1. 感知机

1.1 感知机定义

感知器使用特征向量来表示二元分类器,把矩阵上的输入 x \mathcal{x} x(实数值向量)映射到输出值 y \mathcal{y} y 上(一个二元的值)。
f ( x ) = { + 1 , i f w ⋅ x + b > 0 − 1 , e l s e f(x) = \begin{cases} +1,\,\, if\,w\cdot x+b>0\\ -1,\,\,else\\ \end{cases} f(x)={+1,ifwx+b>01,else

w \mathcal{w} w 是实数的表示权重的向量, w ⋅ x \mathcal{w} \cdot \mathcal{x} wx 是点积。 b \mathcal{b} b 是偏置,一个不依赖于任何输入值的常数。


1.2 感知机学习策略

假设训练数据集是线性可分的 ,如下图所示。感知机学习的目标是求得一个能够将训练集正实例点和负实例点完全正确分开的直线 L \mathcal{L} L。 为了找出这样的超平而 , 即确定感知机模型参数 w \mathcal{w} w b \mathcal{b} b ,需要确定一个学习策略 , 即定义损失函数并将损失函数极小化 。

损失函数的一个选择是误分类数据点的数量 。 但是这样的损失函数不是参数 w \mathcal{w} w b \mathcal{b} b 的连续可导函数,不易优化 。 损失函数的另一个选择是误分类数据点到直线 L \mathcal{L} L 的总距离。感知机所采用的就是后者 。
在这里插入图片描述

  • 对于错误分类的数据点 ( x i , y i ) (\mathcal{x_i, y_i}) (xi,yi),总有:
    − y i ⋅ ( w ⋅ x i + b ) > 0 \mathcal{-y_i\cdot(w\cdot x_i+b) > 0} yi(wxi+b)>0
  • 错误分类点到直线 L \mathcal{L} L 的距离为:
    1 ∥ w ∥ ∣ w ⋅ x i + b ∣ \mathcal{\frac{1}{\|w\|} \vert w \cdot x_i +b \vert} w1wxi+b
  • 假设直线 L \mathcal{L} L 的误分类点集合为 m \mathcal{m} m , 那么所有误分类点到直线 L \mathcal{L} L 的总距离为:
    − 1 ∥ w ∥ ∑ i m y i ⋅ ( w ⋅ x i + b ) \mathcal{-\frac{1}{\|w\|} \sum_{i}^{m}y_i\cdot(w \cdot x_i +b)} w1imyi(wxi+b)
  • 不考虑 1 ∥ w ∥ \mathcal{\frac{1}{\|w\|}} w1,感知机的损失函数为:
    K ( w , b ) = − ∑ i m y i ⋅ ( w ⋅ x i + b ) \mathcal{K(w, b)= - \sum_{i}^{m}y_i\cdot(w \cdot x_i +b)} K(w,b)=imyi(wxi+b)

显然,损失函数 K \mathcal{K} K 是非负的。如果没有误分类点,损失函数值是 0 。而且,误分类点越少,误分类点离超平面越近,损失函数值就越小 。

而感知机的优化算法采用的是随机梯度下降算法 (Stochastic Gradient Descent)(后续更新),用误分类数据驱动损失函数 K \mathcal{K} K 不断减小。本文将采取二维数据,来展示感知机的工作过程。


2. 代码实现

2.1 构建数据

首先创建二维数据,并用线性回归模型拟合出直线 L \mathcal{L} L。代码如下:

import numpy as np
from sklearn.datasets import make_classification
from sklearn import linear_model
import matplotlib.pyplot as plt
import random# two-dimention data
td_data = make_classification(n_samples=20, n_features=2, n_informative=2, n_redundant=0, n_clusters_per_class=1, random_state=24)td_data = list(td_data)
td_data[1] = np.array([1 if i == 0 else -1 for i in td_data[1]])
td_data = tuple(td_data)# visualized data
fig, ax = plt.subplots()
scatter = ax.scatter(td_data[0][:, 0], td_data[0][:, 1], c=td_data[1], alpha=0.6, cmap="cool")
legend_1 = ax.legend(*scatter.legend_elements(), title="Classes", loc="upper left")
ax.add_artist(legend_1)
ax.set_xlabel("Feature_1")
ax.set_ylabel("Feature_2")# add minimal residual sum of squares line as gold standard
reg = linear_model.LinearRegression()# reshape for model fitting
reg.fit(td_data[0][:, 0].reshape(-1, 1), td_data[0][:, 1].reshape(-1, 1))
print(f"the intercept is {reg.intercept_[0]} and the coefficient is {reg.coef_[0][0]}")
formula = f"f(x)={round(reg.coef_[0][0], 2)}*x1-x2{round(reg.intercept_[0], 2)}"# create a x axis for plotting
create_x_axis = np.linspace(min(td_data[0][:, 0]), max(td_data[0][:, 0]), 100).reshape(-1, 1)
predicted_value = reg.predict(create_x_axis)ax.plot(create_x_axis, predicted_value, c="gold", alpha=0.8, label=formula)
handles, labels = ax.get_legend_handles_labels()
legend_2 = ax.legend(handles, labels, loc="lower right")plt.show()

根据代码输出的结果可知,由线性回归模型拟合出的直线 L = 0.53 x 1 + x 2 − 0.6 \mathcal{L = 0.53x_1+x_2-0.6} L=0.53x1+x20.6
在这里插入图片描述

2.2 编写函数

接下来编写可复用的函数,减少代码编写量。partial_derivative_w 函数用于对变量 w \mathcal{w} w 求偏导,partial_derivative_b 函数用于对变量 b \mathcal{b} b 求偏导,decision_funtion 函数用于决策是否继续进行迭代,plot_function 函数绘制迭代结果图。

# take the partial derivative of w and b
def partial_derivative_w(data_point, label_point):# feature_1 * feature_2 * yresult_w_1 = data_point[0] * label_pointresult_w_2 = data_point[1] * label_pointreturn [result_w_1, result_w_2]def partial_derivative_b(label_point):# labelresult_b = label_pointreturn result_b# decision function. w and b will be change if exist data point make 
def decision_funtion(weight_1, weigh_2, intercept):# if y*(w*x+b) < 0, the data point is wrongly classified.result = td_data[1] * ((td_data[0][:, 0] * weight_1) + (td_data[0][:, 1] * weight_2) + intercept)if len(result[np.where(result < 0)]) != 0:print(result)wrong_dp_index = np.where(result == result[np.where(result < 0)][0])[0][0]wrong_dp = td_data[0][wrong_dp_index]wrong_lb = td_data[1][wrong_dp_index]return [True, wrong_dp, wrong_lb]else:print("interation end")return [False, None, None]def plot_function(weight_1, weight_2, intercept):fig, ax = plt.subplots()scatter = ax.scatter(td_data[0][:, 0], td_data[0][:, 1], c=td_data[1], alpha=0.6)ax.legend(*scatter.legend_elements(), title="Classes")ax.set_xlabel("Feature_1")ax.set_ylabel("Feature_2")b = intercept/weight_2hyperplane = [(-(weight_1/weight_2) * i) - b for i in create_x_axis]ax.plot(create_x_axis, hyperplane, c='green', alpha=0.5)plt.show()

2.3 迭代

设置特征一的初始权重为 0,特征二的初始权重为 0,初始截距为 0,学习率为 0.1,迭代次数为1000次,随机从数据中选择一个数据点作为分类错误数据点后开始迭代。

# initiate weight, intercept and learning rate
weight_1 = 0
weight_2 = 0
intercept = 0
learn_rate = 0.1# iteration times
iteration_times = 1000# random value in two dimention data
random_index = random.randint(0, 19)
feature_point = td_data[0][random_index]
label_point = td_data[1][random_index]
# it is not correctly classified for any data point resulting in loss function equte 0.for iteration in range(iteration_times):# w1 = w0 + (learn_rate * y * x)new_weight_1 = weight_1 + (learn_rate * partial_derivative_w(feature_point, label_point)[0])new_weight_2 = weight_2 + (learn_rate * partial_derivative_w(feature_point, label_point)[1])# b1 = b0 + learn_rate * ynew_intercept = intercept + (learn_rate * partial_derivative_b(label_point))# decisiondecision_condition, wrong_dp, wrong_lp = decision_funtion(new_weight_1, new_weight_2, new_intercept)if decision_condition:weight_1 = new_weight_1weight_2 = new_weight_2intercept = new_intercept# wrong data pointfeature_point = wrong_dplabel_point = wrong_lpprint(f"The {iteration + 1} iteration\tweight_1={weight_1}\tweight_2={weight_2}\tintercept={intercept}\n")plot_function(weight_1, weight_2, intercept)else:print(f"The {iteration + 1} iteration\tweight_1={new_weight_1}\tweight_2={new_weight_2}\tintercept={new_intercept}\n")plot_function(new_weight_1, new_weight_2, new_intercept)break

迭代结果如下表所示,在迭代到第八次的时候,感知机模型成功将所有数据点正确分类。

迭代次数效果图片
1在这里插入图片描述
2在这里插入图片描述
3在这里插入图片描述
4在这里插入图片描述
5在这里插入图片描述
6在这里插入图片描述
7在这里插入图片描述
8在这里插入图片描述

3. 总结

以上就是本次更新的全部内容。关于本次内容有一下缺点:

  • 用于迭代的错误分类数据点没有被绘制出来。
  • 由于跳过了大部分数学知识,内容衔接没有做好。
  • 迭代数据点完全随机,复现过程可能不同。

后续将会更新:

  • 感知机模型的数学解释
  • 随机梯度算法的解释
  • 可视化迭代过程的错误分类数据点(可能)

喜欢本次内容的小伙伴麻烦👍点赞+👍关注。

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

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

相关文章

基于springboot+vue的在线远程考试系统

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战&#xff0c;欢迎高校老师\讲师\同行交流合作 ​主要内容&#xff1a;毕业设计(Javaweb项目|小程序|Pyt…

亚马逊使用什么国外代理IP?跨境电商代理IP推荐

代理IP作为网络活动的有力工具&#xff0c;同时也是跨境电商的必备神器。亚马逊作为跨境电商的头部平台&#xff0c;吸引了大量的跨境电商玩家入驻&#xff0c;想要做好亚马逊&#xff0c;养号、测评都需要代理IP的帮助。那么应该使用什么代理IP呢&#xff1f;如何使用&#xf…

钡铼技术R40工业路由器稳定可靠支持环境检测应用

在现代工业化进程中&#xff0c;环境监测已经成为确保生产安全、提升环保效能的关键环节。而在这个领域中&#xff0c;钡铼技术的R40工业路由器以其卓越的稳定性和可靠性&#xff0c;在环境检测应用中发挥着至关重要的作用。 首先&#xff0c;钡铼技术R40工业路由器采用了先进…

水下蓝牙耳机有哪些?绝对物有所值的4大游泳耳机分享!

随着科技的不断进步&#xff0c;运动爱好者们对于耳机的需求也在不断提升。在众多运动场景中&#xff0c;游泳无疑是最为特别的一个。水下蓝牙耳机的出现&#xff0c;不仅解决了传统耳机无法防水的问题&#xff0c;更让游泳者可以在享受音乐的同时进行锻炼。然而&#xff0c;在…

【Spring底层原理高级进阶】Spring Batch清洗和转换数据,一键处理繁杂数据!Spring Batch是如何实现IO流优化的?本文详解!

&#x1f389;&#x1f389;欢迎光临&#xff0c;终于等到你啦&#x1f389;&#x1f389; &#x1f3c5;我是苏泽&#xff0c;一位对技术充满热情的探索者和分享者。&#x1f680;&#x1f680; &#x1f31f;持续更新的专栏《Spring 狂野之旅&#xff1a;从入门到入魔》 &a…

论文阅读_世界模型

1 2 3 4 5 6 7 8英文名称: World Models 中文名称: 世界模型 链接: https://arxiv.org/abs/1803.10122 示例: https://worldmodels.github.io/ 作者: David Ha, Jurgen Schmidhuber 机构: Google Brain, NNAISENSE, Swiss AI Lab, IDSIA (USI & SUPSI) 日期: 27 Mar 2018 引…

【MetaGPT】多智能体协作——你画我猜(文字版)

多智能体协作 本篇将学习 MetaGPT中的 Environment 、 Team 组件。 1. Muti Agent 概念概述 多智能体系统 (Multi-Agent System, MAS) 是由一群具有一定自主性、协同性和学习能力的智能体组成的系统。智能体在环境中相互协作&#xff0c;以达到某种目标或完成特定任务。 2. 多…

阿珊解说Vue中`$route`和`$router`的区别

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

ResponseStatusException

目录 概述&#xff1a; 综合实例&#xff1a; 继承 ResponseStatusException-自定义异常类 继承 ResponseStatusException-自定义响应头信息 继承 ResponseStatusException-定制更多异常处理逻辑 继承 ResponseStatusException-根据异常发生的上下文动态改变 HTTP 状态码…

C++之类(一)

1&#xff0c;封装 1.1 封装的引用 封装是C面向对象三大特性之一 封装的意义&#xff1a; 将属性和行为作为一个整体&#xff0c;表现生活中的事物 将属性和行为加以权限控制 1.1.1 封装意义一&#xff1a; 在设计类的时候&#xff0c;属性和行为写在一起&#xff0c;表…

事务失效的八种情况!!!!

一、非publi修饰的方法。 /*** 私有方法上的注解&#xff0c;不生效&#xff08;因私有方法Spring扫描不到该方法&#xff0c;所以无法生成代理&#xff09;*/ Transactional private boolean test() {//test code }二、类内部访问。 类内部非直接访问带注解标记的方法 B&…

类初步认识与对象

一&#xff0c;对于面向对象的认识 Java是一门面向对象的语言&#xff0c;一切都可以称为对象。将一个大象装进冰箱&#xff0c;甭管步骤多复杂&#xff0c;大象便是对象&#xff1b;将牛奶放进冰箱&#xff0c;牛奶便是对象&#xff1b;你我均是对像。 再比如洗一个衣服&…

如何在Linux中安装ARM交叉环境编译链

安装ARM交叉环境编译链过程如下&#xff1a; 首先创建一个文件夹如下&#xff1a; mkdir -p Linux_ALPHA/toolcahin然后将arm交叉编译工具链安装包拖到Linux中如下&#xff1a; 先输入mv 拖入的安装包即可 mv /var/run/vmblock-fuse/blockdir/pXeysK/gcc-4.6.4.tar.xz .直接…

进程:守护进程

一、守护进程的概念 守护进程是脱离于终端控制&#xff0c;且运行在后端的进程。&#xff08;孤儿进程&#xff09;守护进程不会将信息显示在任何终端上影响前端的操作&#xff0c;也不会被终端产生的任何信息打断&#xff0c;例如&#xff08;ctrlc&#xff09;.守护进程独立…

【数据结构】哈希

在一个数据序列中查找某一个数据元素&#xff0c;是数据管理时经常涉及的&#xff0c;通常以比较的方式来完成&#xff0c;典型的案例有无序序列的暴力查找&#xff08;O(N)&#xff09;、有序序列的二分查找&#xff08;O(logN)&#xff09;、平衡搜索树&#xff08;O(logN)&a…

融合软硬件串流多媒体技术的远程控制方案

远程技术已经发展得有相当水平了&#xff0c;在远程办公&#xff0c;云游戏&#xff0c;云渲染等领域有相当多的应用场景&#xff0c;以向日葵&#xff0c;todesk rustdesk等优秀产品攻城略地&#xff0c;估值越来越高。占据了通用应用的方方面面。 但是细分市场&#xff0c;还…

试用Claude3

1 简介 好消息是&#xff0c;2024 年 3 月 4 日发布了 Claude3&#xff0c;据传比 GPT-4 更好&#xff0c;snooet 版本可以免费试用&#xff0c;坏消息是我们这儿不能用。 在官网注册时&#xff0c;需要选择国家并使用手机接收短信验证码。而在选项中没有中国这个选项。即使成…

IT外包怎样帮助企业控制成本?

在当今激烈的商业竞争中&#xff0c;企业不仅需要保持创新&#xff0c;还需要有效控制成本。IT外包作为一种管理模式&#xff0c;成为许多企业降低成本的得力工具。究竟IT外包如何帮助企业控制成本呢&#xff1f; 首先&#xff0c;IT外包在减少人力资源成本方面发挥了至关重要的…

【微服务生态】Nginx

文章目录 一、概述二、Nginx 的安装三、常用命令四、Nginx 配置4.1 反向代理配置&#xff08;1&#xff09;反向代理实例1&#xff08;2&#xff09;反向代理实例2 4.2 负载均衡配置4.3 动静分离4.4 集群配置 五、nginx 原理与优化参数配置 一、概述 本次为简易版&#xff0c;…

3.6 day1 FreeRTOS

1.总结keil5下载代码和编译代码需要注意的事项 注意要将魔术棒的的debug选项中的setting中的flashdownload中的reset and run 勾选上&#xff0c;同时将pack中的enable取消勾选 2.总结STM32Cubemx的使用方法和需要注意的事项 可以通过功能列表对引脚进行设置&#xff0c;并且可…