白话机器学习的数学-2-分类

1、设置问题

图片分类:只根据尺寸把它分类为 纵向图像和横向图像。

如果只用一条线将图中白色的点和黑色的点分开:

这次分类的目的就是找到这条线。

2、内积

找到一条线,这是否意味着我们要像学习回归时那样,求出一次函数的斜率和截距?

这个又不一样, 这次的目的是找出向量。

刚才画的那条线,是使权重向量成为法线向量的直线。

设权重 向量为 w,那么那条直线的表达式就是这样的:

实向量空间的内积是各相应元素乘积的和:

比如我们设权重向量为 w = (1, 1):

内积表达式表示的是这样的直线:

权重向量 w 和这条直线是垂直的, 这就是“使权重向量成为法线向量的直线”在图形上的解释。

用向量之间的夹角 θ 和 cos 计算内积的表达式:

这是内积的另一个表达式。用这个表达式也没有问题。

表达式中 的 |w| 和 |x| 是向量的长,因此必定是正数。

所以要想使内积为 0,只能使 cos θ = 0。

要想使 cos θ = 0,也就意味着 θ = 90◦ 或 θ = 270◦ ,这两种情况也是直角。

最终找到与上面画的直线成直角的权重向量就行了:

当然,一开始并不存在这条直线,而是要通过训练找到权重向量,然后才能得到与这个向量垂直的直线,最后根据这条直线就可以对数据进行分类了。

3、感知机

具体要如何求出权重向量?

基本做法和回归时相同:将权重向量用作参数,创建更新表达式来 更新参数。接下来,要说明的就是被称为感知机(perceptron) 的模型。

感知机是接受多个输入后将每个值与 各自的权重相乘,最后输出总和的模型:

感知机是非常简单的模型,基本不会应用在实际的问题中, 但它是神经网络和深度学习的基础模型。

训练数据的准备

设表示宽的轴为 x1、表示高的轴为 x2,用 y 来 表示图像是横向还是纵向的,横向的值为 1、纵向的值为 −1。

判别函数:

这是根据内积的符号(正或负)来给出不同返回值的函数。

如: 与权重向量 w 的内积为负的向量 x 是 什么样的向量?

 |w| 和 |x| 必定为正数,所以决定 内积符号的是 cos θ:

在 90◦ <θ< 270◦ 的时候 cos θ 为负。

所以与权重向量 w 之间的夹角为 θ,在 90◦ <θ< 270◦ 范围内的所有向量都符合条件:

同样使内积为正的向量:

这样就 可以根据内积的正负来分割。

内积是衡量向量之间相似程度的指标。结果为正,说明二者相似; 为 0 则二者垂直;为负则说明二者不相似。

权重向量的更新表达式

样定义权重向量的更新表达式:

更新表达式只有在判别函数分类失败的时候 才会更新参数值。

如: 现在权重向量 w 和训练数据的向量 x(1) 二者的方向几乎相 反,w 和 x(1) 之间的夹角 θ 的范围是 90◦ <θ< 270◦ ,内积为负, 判别函数 fw(x(1)) 的分类结果为 −1,实际 y(1) 为 1。

说明分类失败,需要更新权重:

刚才x(1) 与权重向量分居直线两侧,现在它们在同 一侧。

刚才处理的是标签值 y = 1 的情况,而对于 y = −1 的情况,只是 更新表达式的向量加法变成了减法而已,做的事情是一样的。

虽然有加法和减法的区别,但它们的做法都是在分类失败时更新权重向量,使得直线旋转相应的角度。

4、线性可分

感知机非常简单又容易理解,但相应地,缺点也有很多。

最大的缺点就是它只能解决线性可分的问题。

之前提到的感知机也被称为简单感知机或单层感知机,真的是很弱的模型。不过,既然有单层感知机,那么就会有多层感 知机。实际上多层感知机就是神经网络了。

5、逻辑回归

逻辑回归与感知机的方法不一样。

逻辑回归与感知机的不同之处在于,它是把分类作为概率来考虑的。

这里设横向的值为 1、纵向的值为 0。这个也和感知机的时候不一样了,纵向不是 −1 了。

只要是两个不同的值,用什么都可以。在学习感知机时之所以设 置值为 1 和 −1,是因为这样会使参数更新表达式看起来更简洁, 而现在则是设置为 1 和 0 会更简洁。

sigmoid 函数

学习回归时定义过这样一个带参数 的函数:

我们需要能够将未知数据分类为某个类别的函数 fθ(x):

这个函数的名字叫 sigmoid 函数,设 θTx 为横轴,fθ(x) 为纵轴:

θTx = 0 时 fθ(x)=0.5,以及 0 < fθ(x) < 1 是 sigmoid 函数的两 个特征。

因为 sigmoid 函数的取值范围是 0 < fθ(x) < 1,所以它可以作为概率来使用。

决策边界

把未知数据 x 是横向图像的概率作为 fθ(x):

这是在给出 x 数据时 y = 1,即图像为横向的概率。

应该是以 0.5 为阈值,然后根据 fθ(x) 的结果分类横向或纵向:

所以我们可以把上面的表达式改写:

下面像学习感知机时那样,设横轴为图像的宽(x1)、纵轴为图像的高(x2),并且画出图来考虑。

然后像学习回归时那样,先随便确定 θ 再具体地去考虑。 

比如当 θ 是这样的向量时,我们来画一下 θTx ⩾ 0 的图像:

这个不等式表示的范围也就是图像被分类为横向的范围了:

为纵向的范围:

也就是说,将 θTx = 0 这条直线作为边界线,就可以把这条线两侧的数据分类为横向和纵向了。

这样用于数据分类的直线称为决策边界。

实际应用时这个决策边界似乎不能正确地分类图像,这是因为我们决定参数时太随意了:

为了求得正确的参数 θ 而定义目标函数,进行微分,然后求参数的更新表达式。

这种算法就称为逻辑回归。

6、 似然函数

训练数据的标签 y 和 fθ(x)是什么样的关系会比较理想:

● y = 1 的时候,我们希望概率 P(y = 1|x) 是最大的 

● y = 0 的时候,我们希望概率 P(y = 0|x) 是最大的

这适用于全部的训练数据。对于一开始列举的那 6 个训练数据,我们期待的最大概率是这样

假定所有的训练数据都是互不影响、独立发生的,这种情况下整体的概率就可以用下面的联合概率来表示(同时发生的概率):

且联合概率的表达式是可以一般化的,写法如下:

(该联合乘法符号读作“派”)

接下来考虑一下使这个目标函数最大化的参数 θ。

回归的时候处理的是误差,所以要最小化,而现在考虑的是联合概率,我们希望概率尽可能大,所以要最大化。

这里的目标函数 L(θ) 也被称为似然,函数的名字 L 取自似 然的英文单词 Likelihood 的首字母。

它的意思是最近似的。我们可以认为似然函数 L(θ) 中,使其值最大的参数 θ 能够最近似地说明训练数据。

7、对数似然函数

直接对似然函数进行微分有点困难,在此之前要把函数变形。

首先它是联合概率。概率都是 1 以下的数,所以像联合概率这种 概率乘法的值会越来越小。

如果值太小,编程时会出现精度问题。另外还有一个,那就是乘法与加法相比,乘法的计算量要大得多。

解决方法:

只要取似然函数的对数就好了,像这样在等式两边加上 log 即可:

回归的时候是随便乘了个常数(1/2),这次随便取对数也没问题吗?

没问题的,因为 log 是单调递增函数:

单调递增函数是在 x1 < x2 时, f(x1) < f(x2) 的函数 f(x)。

现在考察的似然函数也是在 L(θ1) < L(θ2) 时,有 logL(θ1) < logL(θ2) 成立。

也就是说,使 L(θ) 最大化等价于使 logL(θ) 最大化。

把对数似然函数变形:

每一行的变形分别利用了下面这些特性:

● 第 2 行是 log(ab) = log a + log b 

● 第 3 行是 log ab = b log a 

● 第 4 行是 P(y(i) = 0|x(i) ) = 1 − P(y(i) = 1|x(i) ) 

似然函数的微分

总结一下就是逻辑回归将这个对数似然函数用作目标函数:

接下来对各个参数 θj 求微分:

把似然函数也换成这样的复合函数, 然后依次求微分:

log(v) 的微分是 1/v 。

不过对 log(1 − v) 微分时,要像这样通过复合函数来求。还要注意,这样做最后的表达式前面会有个负号:

微分结果是:

接下来是 v 对 θj 的微分:

sigmoid 函数的 微分是这样的:

求解:

v 对 z 微分:

z 对 θj 的微分:

得出:

最后代入各个结果:

接下来要做的就是从这个表达式导出参数更新表达式。

不过现在是以最大化为目标,所以必须按照与最小化时相反的方向移动参数。

也就是说,最小化时要按照与微分结果的符号相反的方向移动,而最大化时要与微分结果的符号同向移动:

为了与回归时的符号保持一致,也可以将表达式调整为下面这样:

注意,η 之前的符号和 ∑中的符号反转了。

8、 线性不可分

最后,我们将逻辑回归应用于线性不可分问题。

我们可以像学习多项式回归时那样,去增加次数, 向训练数据中加入 x1^2 :

假设 θ 是这样的向量,那么 θTx ⩾ 0 的图形是什么样的?

先代入:

移项后最终得到的表达式是 x2 ⩾ x1^2 ,将这个画成图:

之前的决策边界是直线,现在则是曲线了。

参数 θ 是随便定的,所以数据完全没有被正确地分类。

之后通过随意地增加次数,就可以得到复杂形状的决策边界了。 比如在 x1^2 之外再增加一个 x2^2,就会有圆形的决策边界。

在逻辑回归的参数更新中也可以使用随机梯度下降法。

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

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

相关文章

关于 K8s 的一些基础概念整理

〇、前言 Kubernetes&#xff0c;将中间八个字母用数字 8 替换掉简称 k8s&#xff0c;是一个开源的容器集群管理系统&#xff0c;由谷歌开发并维护。它为跨主机的容器化应用提供资源调度、服务发现、高可用管理和弹性伸缩等功能。 下面简单列一下 k8s 的几个特性&#xff1a; 自…

学习笔记-MyBatis的工作原理。

Mybatis的工作原理 读取MyBatis配置文件&#xff1a;mybatis-config.xml为MyBatis的全局配置文件&#xff0c;配置了MyBatis的运行环境等信息&#xff0c;例如数据库连接信息。加载映射文件。映射文件即SQL映射文件&#xff0c;该文件中配置了操作数据库的SQL语句&#xff0c;…

如何使用人工智能算法解决实际业务问题?

使用人工智能算法解决实际业务问题的过程可以概括为以下几个步骤&#xff1a; 问题定义和数据采集&#xff1a;首先&#xff0c;需要明确业务问题&#xff0c;并收集相关的数据&#xff0c;包括结构化和非结构化数据。这些数据可以来自不同的来源&#xff0c;如数据库、文本、图…

clickhouse连接工具dbeaver

地址 地址&#xff1a; Download | DBeaver Community 安装 表引擎 表引擎之TinyLog 以列文件的形式保存在磁盘上&#xff0c;不支持索引&#xff0c;没有并发控制。一般保存少量数据的小表&#xff0c; 生产环境上作用有限&#xff0c;多用于平时练习测试用。 内存引擎&am…

k8s 架构

主要组件 k8s有如下的主要组件&#xff1a; Control plane(s) and worker node(s)OperatorsServicesPods of containersNamespaces and quotasNetwork and policiesStorage. 一个k8s集群是有一个或多个 cp&#xff08;控制平面&#xff09;节点和一组worker 节点组成的。这个…

GaussDB数据库中的同义词SYNONYM

目录 一、前言 二、GasussDB数据库中的Synonym 1、Synonym的概念 2、语法介绍 3、Synonym的用途 三、Synonym在GaussDB数据库中是如何使用的 1、表的同义词使用&#xff08;示例&#xff09; 2、视图的同义词使用&#xff08;示例&#xff09; 3、函数的同义词使用&am…

Redis实现滚动周榜|滚动榜单|直播间榜单|排行榜|Redis实现日榜05

方法&#xff1a;写当日榜单当日滚动榜次日滚动榜定时任务处理历史数据 实际上&#xff0c;这个步骤并不复杂&#xff0c;主要是为了解决定时数据在时间间隔切换时无法平滑过渡的问题。具体来说&#xff0c;在编写代码时&#xff0c;我们需要执行以下三个操作。 获取7天、30天…

LeetCode1232. Check If It Is a Straight Line

文章目录 一、题目二、题解 一、题目 You are given an array coordinates, coordinates[i] [x, y], where [x, y] represents the coordinate of a point. Check if these points make a straight line in the XY plane. Example 1: Input: coordinates [[1,2],[2,3],[3,…

YOLO训练results.csv文件可视化(原模型与改进模型对比可视化)

一、单独一个文件可视化&#xff08;源码对应utils文件夹下的plots.py文件的plot_results类&#xff09; from pathlib import Path import matplotlib.pyplot as plt import pandas as pd def plot_results(fileruns/train/exp9/results.csv, dir):# Plot training results.c…

前后端分离nodejs+vue医院预约挂号系统6nrhh

医院预约挂号系统主要有管理员、用户和医生三个功能模块。以下将对这三个功能的作用进行详细的剖析。 运行软件:vscode 前端nodejsvueElementUi 语言 node.js 框架&#xff1a;Express/koa 前端:Vue.js 数据库&#xff1a;mysql 开发软件&#xff1a;VScode/webstorm/hbuiderx均…

ubuntu下的磁盘管理

1. 磁盘文件目录 磁盘文件是linux下的/dev/sd*文件 2. 磁盘和目录容量查询 df&#xff1a;列出文件系统的使用量,主要查看文件系统的使用量 du&#xff1a;评估文件系统的磁盘使用量&#xff0c;主要是单个文件大小 3. 磁盘的挂载与卸载 mount&#xff1a;磁盘挂载 mount…

YOLOv8改进 | 细节创新篇 | iAFF迭代注意力特征融合助力多目标细节涨点

一、本文介绍 本文给大家带来的改进机制是iAFF&#xff08;迭代注意力特征融合&#xff09;&#xff0c;其主要思想是通过改善特征融合过程来提高检测精度。传统的特征融合方法如加法或串联简单&#xff0c;未考虑到特定对象的融合适用性。iAFF通过引入多尺度通道注意力模块(我…

JDK9及之后版本使用 jlink 生成定制化的 JRE

许多java软件的运行需要依赖jre&#xff0c;在 jdk8 之后&#xff0c;不再提供默认的 jre&#xff0c;后续如果项目中还是想用 jre 的形式发布软件&#xff0c;那么可以使用 jlink 工具生成 jre。 一、jlink 命令详解 jlink 二、查看jdk中包含的所有模块 如果在 jdk 安装文件夹…

Hadoop之Yarn 详细教程

1、yarn 的基本介绍和产生背景 YARN 是 Hadoop2 引入的通用的资源管理和任务调度的平台&#xff0c;可以在 YARN 上运行 MapReduce、Tez、Spark 等多种计算框架&#xff0c;只要计算框架实现了 YARN 所定义的 接口&#xff0c;都可以运行在这套通用的 Hadoop 资源管理和任务调…

【经典算法】有趣的算法之---蚁群算法梳理

every blog every motto: You can do more than you think. 0. 前言 蚁群算法记录 1. 简介 蚁群算法(Ant Clony Optimization, ACO)是一种群智能算法,它是由一群无智能或有轻微智能的个体(Agent)通过相互协作而表现出智能行为,从而为求解复杂问题提供了一个新的可能性…

PB 按Excel动态创建对应字段

/* > Function: w_cwjk_xhyy.wf_dw_init >-------------------------------------------------------------------- > 描述: 按excel表格列名,创建对应字段,用于部分接口对应字段导出文件 >-------------------------------------------------------------------- …

VSCode远程开发配置

目录 概要远程开发插件安装开始连接SSH无密码登录开发环境配置 概要 现在很多公司都是直接远程到服务器上写代码&#xff0c;使用远程开发&#xff0c;可以在与生产环境相同的环境中开发、测试和部署代码&#xff0c;减少因环境不同而导致的问题。当下VSCode远程开发是支持的比…

STM32学习笔记十二:WS2812制作像素游戏屏-飞行射击游戏(2)探索时间间隔同步,双向链表

上章我们做好了空间的比例尺&#xff0c;不至于物体定位出错。这次我们尝试一下时间间隔的同步。当然&#xff0c;游戏中需要同步时间的地方很多&#xff0c;这里仅仅涉及很小的一个点。 我们已经创造了玩家飞机&#xff0c;是时候让它能发射子弹了。 发射子弹&#xff0c;哪…

ClickHouse基础知识(六):ClickHouse的副本配置

副本的目的主要是保障数据的高可用性&#xff0c;即使一台 ClickHouse 节点宕机&#xff0c;那么也可以 从其他服务器获得相同的数据。 1. 副本写入流程 2. 配置步骤 ➢ 启动 zookeeper 集群 ➢ 在hadoop101的/etc/clickhouse-server/config.d目录下创建一个名为metrika.xml…

天线根据什么进行分类

天线是信息化时代的一个标准&#xff0c;广播信号塔&#xff0c;通信基站塔&#xff0c;卫星天线还有每天都要用到的手机&#xff0c;都是含有天线的&#xff0c;只是各种天线的作用不同&#xff0c;大小不同。今天给大家说一下&#xff0c;天线是如何分类的。 1.按工作性质可…