分类算法(Classification algorithms)

逻辑回归(logical regression):

逻辑回归这个名字听上去好像应该是回归算法的,但其实这个名字只是在历史上取名有点区别,但实际上它是一个完全属于是分类算法的。

我们为什么要学习它呢?在用我们的线性回归时会遇到一个很大的问题,就比如一下的图形。

在这里我们把以上的图形进行了我们的线性回归得到了在0.5纵坐标的分界线,在0.5左侧是我们的良性肿瘤而在右边是我们的恶性肿瘤,这时我们得到了我们判断是否是良性肿瘤的方法,但当我们再添加一个数据时。

  

我们会发现我们的线性回归往右边平移了,而判断是否为良性肿瘤的值也往右边移动了,这时我们的模型就会因为我们的数据而发生变化,这很明显不是一个准确的方法,让我们得到我们需要的数据。所以我们需要学习一种叫做逻辑回归的算法。

逻辑函数(sigmoid function)

所以我们要创建一种新的函数。 

这里我们使用了sigmoid函数, 

可以看到我们这个函数,g(z)=\frac{1}{1+e^{-z}},它所得到的函数可以是我们上图所示的样子。(可以自己手动画一下)在无限接近正无穷的地方它还是在缓慢的上升,而在负无穷处它则是无限接近于0。

那我们如何才能写一个逻辑回归函数呢?

第一步:我们的回归函数是f_{w,b}(\vec{x}),它的具体写法是z = \vec{w}\cdot \vec{x}+b.。

第二步:我们sigmoid函数是g(z)=\frac{1}{1+e^{-z}}

第三步:我们把第一个式子代入,也就变成了f_{w,b}(x)=g( \vec{w}\cdot \vec{x}+b)=\frac{1}{1+e^{-( \vec{w}\cdot \vec{x}+b)}}

我们解释一下我们得到的函数,在原来g(z)=\frac{1}{1+e^{-z}}函数中我们知道它的y值在0到1,所以我们输入的x总会得到我们的一个值,而这个值一定在0和1之间,举一个例子。就那我们的判断肿瘤是否是恶性的例子,当我们的值为1时,则肿瘤为恶性肿瘤,当我们的值为0时,则它为良性肿瘤,当我们代入一个值时,y值输出为0.7,那么它就表示你有70%的概率会是恶性肿瘤。那为良性肿瘤的概率则为我们的30%。

这里有几个写法需要我们注意:1.p(y=1)+p(y=0)=1,它指的是我们为1和为0的概率加起来为100%。2.f_{w,b}(\vec{x})=p(y=1|\vec{x};\vec{w},\vec{b}),它代表的意思就是我们的y=1时,我们的概率,而这里的w,b他们代表的只是它们对我们的答案会造成影响。

决策边界(Decision Boundary):

简单来说我们的决策边界就是当我们的逻辑函数曲线,在y值等于0.5时,也就是我们的z=0时,我们可以看看这个图。

也就是 \vec{w}\cdot \vec{x}+b = 0。我们举一个例子。比如得到了以下的图形。

在图中我们的❌指的是我们的好的事物,而⭕️指的是坏的事物,这时,我们要找到我们的决策分界线。

我们得到的数据是f_{w,b}(x)=g( \vec{w}\cdot \vec{x}+b)=g(x1\cdot w1+x2\cdot w2+b),这时我们假设我们的w1=1,w2=1,b=-3。这时我们得到的决策函数也就是x_{1}+x_{2}+b=0,x_{1}+x_{2}=3,这时我们就可以画出完美的决策边界。

在上面就是我们的好事物,下面就是坏事物。这里有一个要强调,我们一般把0.5以上的看作是1,把0.5以下的看作成0。 

当然也有多项式的情况,比如下图。

逻辑函数的成本函数(cost function):

在这个例子里面,我们的判断是否是一个良性肿瘤需要多组训练集,这里在前面几个特征与线性回归类似,而最后一个判断是否是良性或恶性用的是1和0来表示。

我们用原来的线性回归中,使用的成本函数,我们得到的图形将是。凹凸不平的,这让我们用梯度下降时只能取到我们的局部最小值,而不能得到我们的全局最小值。 

所以我们要用一个不一样的成本函数。

我们得到了一个新的成本函数:L(f_{\vec{w},b}(\vec{x}^{(i)}),y^{(i)}) ,它的值和\frac{1}{2}(f_{\vec{w},b}(\vec{x}^{(i)})-y^{(i)})^{2}相同,这个比较难推导,可以自己试一下(不建议)。

这时我们会得到两个对数函数,我们会在1和0时用到不同的函数去进行计算。

我们先看上面那一个方程,我们会发现预测的值越接近于1我们的损失就会越小,而我们接近于0的损失就会变大。同样的道理对于下面拿个方程。 

这里的损失函数,每一个都是一个单独的训练项,而不是一个集合。所以在这里的完整的成本函数写法是:J(\vec{w},b)=\frac{1}{m}\sum_{i=1}^{m}L(f_{\vec{w},b}(\vec{x}^{(i)},y^{(i)})) 

因为在这里我们的\hat{y}不是1就是0,所以我们可以简化我们的式子,那么它就变成了:

L(f_{\vec{w},b}(\vec{x}^{(i)}),y^{(i)})=y^{(i)}log(f_{\vec{w},b}(\vec{x}^{(i)}))-(1-y^{(i)})log(1-f_{\vec{w},b}(\vec{x}^{(i)}))J(\vec{w},b)=-\frac{1}{m}\sum_{i=1}^{m}(y^{(i)}log(f_{\vec{w},b}(\vec{x}^{(i)}))-(1-y^{(i)})log(1-f_{\vec{w},b}(\vec{x}^{(i)})))

很明显它与我们在上面的式子是等价的。它是一种叫做最大似然估计的统计原理。

逻辑回归的梯度下降(gradient descent for logical regression):

在我们得到了我们的成本函数,接下来我们就要进行我们的梯度下降,还是一样的公式。

得到了我们的成本函数的式子:J(\vec{w},b)=-\frac{1}{m}\sum_{i=1}^{m}(y^{(i)}log(f_{\vec{w},b}(\vec{x}^{(i)}))-(1-y^{(i)})log(1-f_{\vec{w},b}(\vec{x}^{(i)})))

然后我们还是用相同的方法进行我们的梯度下降。

{ w_{j}=w_{j}-\alpha \frac{\partial }{\partial w_{j}}J(\vec{w},b) }b=b-\alpha \frac{\partial }{\partial b}J(\vec{w},b)

同样的道理,在这里的w,b的值是同时进行改变的,而没有先后的关系。两个偏导数算完之后我们才可以得到我们在上面的两个我们需要的特征值。

上面这个式子似乎和我们一开始在线性回归中用到的函数似乎是一样的但其实我们的f函数是完全不一样的,我们在我们的线性回归中,我们的函数是:f_{\vec{w},b}(\vec{x})=\vec{w}\cdot \vec{x}+b,而在我们的逻辑回归中我们的函数是sigmoid函数(逻辑函数)。只是在我们算我们的梯度下降时我们用到的公式相同罢了。

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

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

相关文章

前端框架的发展历史介绍

前端框架的发展历史是Web技术进步的一个重要方面。从最初的简单HTML页面到现在的复杂单页应用程序(SPA),前端框架和库的发展极大地推动了Web应用程序的构建方式。以下是一些关键的前端框架和库,以及它们的发布年份、创建者和主要特…

java-ssm-jsp的问卷调查系统的设计与实现

java-ssm-jsp的问卷调查系统的设计与实现 获取源码——》公主号:计算机专业毕设大全

第十五章垃圾回收相关算法

第十五章垃圾回收相关算法 文章目录 第十五章垃圾回收相关算法1. 垃圾标记阶段的算法之引用计数算法1.1 垃圾标记阶段:对象存货判断1.2 方式一:引用计数算法循环引用 1.3 小结 2. 垃圾标记阶段的算法之可达性分析算法2.1 方式二:可达性分析&a…

Qt 定时器事件

文章目录 1 定时器事件1.1 界面布局1.2 关联信号槽1.3 重写timerEvent1.4 实现槽函数 启动定时器 2 定时器类 项目完整的源代码 QT中使用定时器,有两种方式: 定时器类:QTimer定时器事件:QEvent::Timer,对应的子类是QTi…

HttpURLConnection详解及使用

HttpURLConnection 请求响应流程 设置连接参数的方法 setAllowUserInteractionsetDoInputsetDoOutputsetIfModifiedSincesetUseCachessetDefaultAllowUserInteractionsetDefaultUseCaches 发送URL请求 建立实际连接之后,就是发送请求,把请求参数传到…

docker-swarm集群搭建

目录 一、docker swarm介绍 二、部署docker 三、搭建集群 3.1 工作模式 3.2 将当前主机作为leader 3.3 将第二个节点slave1加入到worker 3.4 将第三个节点slave2也加入到worker 3.5 将第四个节点(slave3)加入到manager 四、总结 一、docker swarm介绍 Docker Swarm…

java中{ }对变量可用scope的限制

改变变量定义位置可解决 y定义在{}内,属于局部变量,只能再在{}其中有效使用,因此第二个输出报错。 将int y6放在main()后,{}前可解决

浅析开源内存数据库Fastdb

介绍: Fastdb是免费开源内存数据库,其优秀的性能,和简洁的C代码,让我学习使用过程中收益颇多,但是国内中文相关研究的文章相当稀少,外文我查询相当不便。有兴趣的朋友可以通过以下网站访问:Mai…

《vtk9 book》 官方web版 第3章 - 计算机图形基础 (3 / 6)

3.8 演员几何 我们已经看到了光照属性如何控制演员的外观,以及相机如何结合变换矩阵将演员投影到图像平面上。剩下的是定义演员的几何形状,以及如何将其定位在世界坐标系中。 建模 计算机图形学研究中的一个重要主题是建模或表示物体的几何形状。…

一劳永逸的方法解决:LNK1168无法打开 xxx.exe 进行写入 报错问题

这种错误的产生原因: 运行程序退出不是按正常流退出,是按窗口右上角的 “X” 来关闭程序,但是后台的xxx.exe控制台程序还在运行;修改程序的代码后再运行,就会报LNK1168的错误; 报错示例: 解决方…

文本生成视频:从 Write-a-video到 Sora

2024年2月15日,OpenAI 推出了其最新的文本生成视频模型——Sora。Sora 能够根据用户的指令生成一分钟长度的高质量视频内容。这一创新的发布迅速在社会各界引发了广泛关注与深入讨论。本文将围绕本实验室发表于SIGGRAPH AISA 的 Write-a-video和 Sora 展开&#xff…

8核16G服务器多少钱?2024年腾讯云8核16G轻量服务器性能测评

腾讯云8核16G轻量服务器CPU性能如何?18M带宽支持多少人在线?轻量应用服务器具有100%CPU性能,18M带宽下载速度2304KB/秒,折合2.25M/s,系统盘为270GB SSD盘,月流量3500GB,折合每天116.6GB流量&…

真实案例分享:MOS管电源开关电路,遇到上电冲击电流超标

做硬件,堆经验。 分享一个案例:MOS管电源开关电路,遇到上电冲击电流超标,怎么解决的呢? 下面是正文部分。 —— 正文 —— 最近有一颗用了挺久的MOSFET发了停产通知,供应链部门找到我们研发部门&#xff0c…

Pycharm与Anaconda安装

网址: Pycharm:https://www.jetbrains.com/pycharm/ Anaconda:https://www.anaconda.com/download/ 官网下载速度太慢可以选择到清华源下载:https://repo.anaconda.com/archive/ 一:Anaconda安装 安装: …

Building Systems with the ChatGPT API

Building Systems with the ChatGPT API 本文是 https://www.deeplearning.ai/short-courses/building-systems-with-chatgpt/ 这门课程的学习笔记。 文章目录 Building Systems with the ChatGPT APIWhat you’ll learn in this course Language Models, the Chat Format and…

【C++ vector 类】

1. 标准库中的vector类 vector 类 的介绍: 注意: 1. vector是表示可变大小数组的序列容器。 2. 就像数组一样,vector 也采用的连续存储空间来存储元素。也就是意味着可以采用下标对vector的元素进行访问,和数组一样高效。但是…

长度为n的数组a初始值全为0,目标是把数组a变为数组b(1<=bi<=n), 可以进行任意次操作:选择长度为k的数组c,(1<=ci<=n且两两不同)

对于1<i<k, 把 a[c[i]] 改为c[i % k 1]。给定n&#xff0c;k和数组b&#xff0c;判断能否得到数组b。 题目 思路&#xff1a; #include <bits/stdc.h> using namespace std; #define int long long #define pb push_back #define fi first #define se second #d…

消息服务--Kafka的简介和使用

消息服务--Kafka的简介和使用 前言异步解耦削峰缓存1、消息队列2、kafka工作原理3、springBoot KafKa整合3.1 添加插件3.2 kafKa的自动配置类3.21 配置kafka地址3.22 如果需要发送对象配置kafka值的序列化器3.3 测试发送消息3.31 在发送测试消息的时候由于是开发环境中会遇到的…

STM32按键控制LED蜂鸣器光敏联动

GPIO输入模式下的硬件和电路 以下为不同类型传感器电路图 硬件电路讲解 上面两种接线方式表示按键按下时是低电平&#xff0c;下面两种接线方式表示按键按下时引脚是高电平默认使用上面两种方式比较多。 C语言知识回顾 不同的数据类型 &#xff1a; char short int long longl…

Linux(Ubuntu)中安装vscode

①首先去vscode的官网下载.deb文件 网址&#xff1a;https://code.visualstudio.com/docs/?dvlinuxarm64_deb 注&#xff1a;如果linux端无法打开网页下载文件&#xff0c;可以在Windows端下载好用WinSCP传输到Linux。下载前注意下你的系统架构是arm还是amd&#xff0c;系统…