三、学习分类 - 基于图像大小进行分类

news2024/10/5 15:30:15

天下一半剑仙是我友

谁家娘子不娇羞

我以醇酒洗我剑

谁人说我不风流

1 设置问题

根据图片的尺寸,把图片分为纵向图像和横向图像。这种把图像分成两种类别的问题,就是二分类问题

纵向图片示例:
 

 横向图片示例:

 这样就有了两个训练数据:

增加训练数据,并在图像中表示出来:

可以得到一条分隔两边的线,这次分类的目的就是找到这条线:

只要找到这条线,就可以根据点在线的哪一边来判断图像是横向的还是纵向的了

2 内积

上面图中的直线像学习回归时的一次函数一样,但是这次我们不是求斜率与截距了,而是找向量了。

图中的虚线,是使权重向量成为法线向量的直线

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

实向量空间的内积是各元素乘积的和,表达式也可以写成:

法线是与某条直线相垂直的向量。

和学习回归一样,使用假设法,现在我们假设权重向量w = (1,1),代入表达式中可得:

在图中表示:

然后再把权重向量加上:

回到刚开始,一开始并不存在画的那条虚线,我们要先通过训练找到权重向量,最后才能得到与这个向量垂直的直线,最后根据这条直线就可以对数据进行分类了

3 感知机

那么具体要怎么求出权重向量呢?

基本的做法和回归时相同,就是将权重向量用作参数,创建更新表达式来更新参数。

感知机模型(perceptron)

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

先准备一些训练数据。设表示宽的轴为x1,表示高的轴为x2,用y来表示图像是横向还是纵向的,横向的值为1,纵向的值为-1。

根据参数向量x来判断图像是横向还是纵向的函数,即返回1或者-1的函数fw(x)的定义如下:

这个被称为判别函数。

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

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

cos θ的图:

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

在图中的体现:

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

根据上面的内容,可以推导出权重向量的更新表达式:

通过判别函数对宽和高的向量x进行分类的结果与实际的标签y是否相同:

判别结果准确,fw(x(i))=y(i),即分类成功,直接代入w。

判别结果失败,即分类失败,不能直接代入w。

更新示例:

先随意画一个权重向量:

在这个状态下,假设第一个训练数据是x(1)=(125,30):

w和x(1)之间的夹角θ的范围是90◦<θ<270◦,内积为负。也就是说,判别函数fw(x(1))的分类结果为-1,说明分类失败。

随后更新表达式:

这个w+x(1)就是下一个新的w,画一条与新的权重向量垂直的直线,相当于把原来的线旋转了一下:

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

这次θ<90◦,所以内积为正,判别函数fw(x)的分类结果为1。而且x(1)的标签也为1,说明分类成功了。

这就是更新参数的权重向量。

4 线性可分

因为感知机只是简单的模型,他有一个很大的缺点,就是它只能解决线性可分的问题

有下面这张图里的数据,其中圆点为1,叉号为-1,这样的图形无法用一条直线对这些数据进行分类。

这种感知机被称为简单感知机或单层感知机,实际上使用的神经网络是多层感知机。

5 逻辑回归

能应用于线性不可分问题的算法,这个算法与感知机的不同之处在于,它是把分类作为概率来考虑的。即图片为纵向的概率是,为横向的概率是,这里设横向的值为1、纵向的值为0。

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

这个函数的名字叫sigmoid函数

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

P中的竖线是条件概率。

阈值为0.5,从而分类横向或纵向:

表达式改写:

下面像学习感知机时那样,设横轴为图像的宽(x1)、纵轴为图像的高(x2)。

然后像学习回归时那样,先随便确定θ再具体地去考虑。比如当θ是这样的向量时,画一下θTx≥0的图像:

代入数据:

画出不等式对应的图:

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

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

实际应用时这个决策边界并不能正确地分类图像,是因为我们刚开始决定参数的时候太随意了。

为了求得正确的参数θ而定义目标函数,进行微分,然后求参数的更新表达式。这种算法就称为逻辑回归

6 似然函数

现在来求参数的更新表达式。

首先要明确,既然fθ(x)是x为横向时的概率,那么在y=1时fθ(x)=1, y=0时fθ(x)=0的关系就是理想的。

简单来说:

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

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

作用在训练数据上:

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

想一想扔2次骰子的情况。第1次的结果是1点,且第2次的结果是2点的概率是多少呢?首先1点出现的概率是1/6,接下来2点出现的概率是1/6,二者连续发生的概率就要使用乘法计算,其表达式是这样的:

同理,第1次的概率是P(y(1)=0|x(1)),第2次的概率是P(y(2)=0|x(2))……我们要计算的是连续发生6次的概率。

联合概率的表达式一般化:

 分开考虑,首先向指数y(i)代入1:

 再代入y(i)代入0:

这就是它的目标函数,接下来考虑的是使这个目标函数最大化的参数θ。

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

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

7 对数似然函数

下面就是对似然函数进行微分,求出参数θ。

但是,直接对似然函数进行微分有点困难,在此之前要把函数变形,取似然函数的对数,两边加上log即可,如下:

然后把对数似然函数进行变形:

 最后,逻辑回归就是将这个对数似然函数用作目标函数:

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

 和回归的时候是一样的,我们把似然函数也换成这样的复合函数,然后依次求微分:

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

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

8 线性不可分

逻辑回归应用于线性不可分问题。

下面的图像是线性不可分的:

对于这个问题,虽然直线不能分类,但是曲线可以分类:

我们可以像多项式回归一样,增加函数的次数:

 假设参数,代入试试:

在图中的表示:

之前的决策边界是直线,现在则是曲线了。参数θ是随便定的,所以数据完全没有被正确地分类。

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

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

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

相关文章

【Go语言开发】简单了解一下搜索引擎并用go写一个demo

写在前面 这篇文章我们一起来了解一下搜索引擎的原理,以及用go写一个小demo来体验一下搜索引擎。 简介 搜索引擎一般简化为三个步骤 爬虫:爬取数据源,用做搜索数据支持。索引:根据爬虫爬取到的数据进行索引的建立。排序&#xf…

Wsl 错误 0x80004002 解决

wsl2安装教程:https://www.jianshu.com/p/6e7488440db2 我安装的过程中出现了如下错误: 解决办法: 已管理员身份运行Powershell运行以下命令以获取包的全名 Get-AppxPackage |? { $_.Name -like "*WindowsSubsystemforLinux*"…

(33)(33.3) 连接实例

文章目录 前言 33.3.1 嵌入在集体PPM/总信号通道中的RSSI 33.3.2 模拟电压型RSSI被输送到一个专用引脚 33.3.3 PWM类型的RSSI输送到一个专用引脚 前言 以下是典型的 RC 接收机 RSSI 连接方案示例: 33.3.1 嵌入在集体PPM/总信号通道中的RSSI 通常的做法是在一根…

NLog写日志到数据库

需求&#xff1a;NLog写日志到数据库 一、必须要安装&#xff1a; System.Data.SqlClient 二、 NLog配置&#xff1a; <?xml version"1.0" encoding"utf-8" ?> <nlog xmlns"http://www.nlog-project.org/schemas/NLog.xsd" …

存css实现动态时钟背景

代码实现 <!DOCTYPE html> <html lang"en"> <head><meta http-equiv"Content-Type" content"text/html; charsetUTF-8"><title>Title</title><meta name"referrer" content"no-referrer…

Spring的控制翻转(IOC)与依赖注入(DI)

SpringIOC 即 Inversion of Control&#xff0c;缩写为 IOC&#xff0c;就是由 Spring IoC 容器管理对象&#xff0c;而非传统实现中由程序代码直接操控. 使用IOC容器管理bean&#xff08;IOC&#xff09; 在IOC容器中将有依赖关系的bean进行关系绑定 最终达到的目的&#…

【C】回调函数和qsort详解

回调函数概念 回调函数就是一个通过函数指针调用的函数。如果你把函数的指针&#xff08;地址&#xff09;作为参数传递给另一 个函数&#xff0c;当这个指针被用来调用其所指向的函数时&#xff0c;我们就说这是回调函数。回调函数不是由该 函数的实现方直接调用&#xff0c;…

七大排序算法——快速排序,通俗易懂的思路讲解与图解(完整Java代码)

文章目录 一、排序的概念排序的概念排序的稳定性七大排序算法 二、快速排序核心思想Hoare法挖坑法前后指针法(选学) 三、性能分析四、算法优化优化基准的选取优化少量数据时的排序方案优化后的完整代码 五、七大排序算法 一、排序的概念 排序的概念 排序&#xff1a;所谓排序…

基于ChatGPT和私有知识库搭建Quivr项目

准备工作 安装docker和docker-compose申请supabase账号 拉取Quivr代码 git clone https://github.com/StanGirard/Quivr.git 复制.XXXXX_env文件 cp .backend_env.example backend/.env cp .frontend_env.example frontend/.env 更新backend/.env和frontend/.env文件 ba…

靶场的安装

sqli-lab 1.将安装包解压放到WWW目录下 2.修改 db-creds.inc文件里面的数据库的用户名密码为自己的用户名密码 路径&#xff1a;D:\phpStudy_64\phpstudy_pro\WWW\sqli-labs-master\sql-connections\db-creds.inc 3. 更改php版本位5.9版本&#xff0c;不然会报错 4.安装数…

【采用有限元法技术计算固有频率和欧拉屈曲荷载】使用有限元法的柱子的固有频率和屈曲荷载(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

Android JNI 异常处理 (十一)

🔥 Android Studio 版本 🔥 🔥 创建包含JNI的类 JNIException.java 🔥 package com.cmake.ndk1.jni;public class JNIException {static {System.loadLibrary("exception-lib");}public native void nativeInvokeJavaException();public native void nativ…

B站这些“搬运工”还能有这么高的流量吗?

飞瓜数据&#xff08;B站版&#xff09;观察发现&#xff0c;B站经常有一些搬运视频能够获得超高流量。 比如拉取近15天的B站热门视频&#xff0c;位列前排的就有两个是搬运二创视频&#xff0c;播放量高达900万上下&#xff0c;可以说是爆款视频了。 这些视频有一个相同的点就…

Qt Https通信: TLS initialization failed 解决方法

Qt Https通信&#xff1a; TLS initialization failed 解决方法&#xff0c;Window端使用Qt 做开发请求Https资源时&#xff0c;会经常遇到 TLS initialization failed。 原因分析&#xff1a; 在Qt中并未包含 SSL所包含的库&#xff0c;因此需要开发者&#xff0c;自己将库拷贝…

最新华为鸿蒙4.0安装谷歌服务框架,安装Play商店,谷歌Google,GMS

最近华为推出了最新鸿蒙4.0开发者Beta版本&#xff0c;让用户测试体验。那么测试体验的机器主要是最近发布的几款机器为P60,P60 Pro, mate50,mate50 pro等几款产品可以先期进行体验测试鸿蒙4.0&#xff0c;那么很多的用户在疑问我升级到鸿蒙4.0。是不是还是可以使用Google谷歌服…

LINUX环境小实验

实验报告 实验名称 小环境搭设 实验目的 1.搭建DHCP服务器&#xff08;IP&#xff1a;192.168.100.253静态IP网卡vmnet1&#xff09; 2.搭建DNS&#xff08;通过DHCP服务器分到指定的IP&#xff1a;192.168.100.252&#xff09; 3.搭建网站服务&#xff08;通过DHCP服务器分…

波分复用(WDM)基本原理

文章目录 波分复用WDMDWDM解决问题&#xff0c;特点&#xff0d;超长距离无电中继传输&#xff0c;降低成本 波分系统的基本组成DWDM网元基本类型波分常见站点类型OM/OD技术&#xff0d;波分复用器主要参数 DWDM系统关键技术光转发技术 OM/OD技术&#xff0d;波分复用器件 波分…

Bun 0.6.14发布,1.0版预计发布于9月7日

Bun 是一个 JavaScript 运行时。 Bun 是一个从头开始构建的新 JavaScript 运行时&#xff0c;旨在服务现代 JavaScript 生态系统。它有三个主要设计目标&#xff1a; 速度。包子启动快&#xff0c;运行也快。它扩展了 JavaScriptCore&#xff0c;即为 Safari 构建的注重性能的 …

Office如何通过VSTO进行PPT插件开发?

文章目录 0.引言1.工具准备2.PPT外接程序创建和生成3.外接程序生成并使用 0.引言 VSTO&#xff08;Visual Studio Tools for Office &#xff09;是VBA的替代&#xff0c;是一套用于创建自定义Office应用程序的Visual Studio工具包。VSTO可以用Visual Basic 或者Visual C#扩展O…

EIK+Filebeat+Kafka

目录 Kafka 概述 为什么需要消息队列&#xff08;MQ&#xff09; 使用消息队列的好处 消息队列的两种模式 Kafka 定义 Kafka 简介 Kafka 的特性 Kafka 系统架构 Partation 数据路由规则&#xff1a; 分区的原因 部署 kafka 集群 1.下载安装包 2.安装 Kafka 修改配…