logistic回归是一种分类方法,用于两分类的问题,其基本思想为:

  1. 寻找合适的假设函数,即分类函数,用来预测输入数据的结果;
  2. 构造损失函数,用来表示预测的输出结果与训练数据中实际类别之间的偏差;
  3. 最小化损失函数,从而获得最优的模型参数。

首先来看一下sigmoid函数:

\(g(x)=\frac{1}{1-e^{x}}\)

它的函数图像为:

logistic回归中的假设函数(分类函数):

\(h_{\theta }(x)=g(\theta ^{T}x)=\frac{1}{1+e^{-\theta ^{T}x}}\)

解释:

\(\theta \) —— 我们在后面要求取的参数;

\(T\) —— 向量的转置,默认的向量都是列向量;

\(\theta ^{T}x\) —— 列向量\(\theta\)先转置,然后与\(x\)进行点乘,比如:

\(\begin{bmatrix}1\\ -1\\ 3\end{bmatrix}^{T}\begin{bmatrix}1\\ 1\\ -1\end{bmatrix} = \begin{bmatrix}1 & -1 & 3\end{bmatrix}\begin{bmatrix}1\\ 1\\ -1\end{bmatrix}=1\times 1+(-1)\times1+3\times(-1) = -3\)

logistic分类有线性边界和非线性边界两种:

线性边界形式为:\(\theta_{0}+\theta_{1}x_{1}+\cdots+\theta_{n}x_{n}=\sum_{i=0}^{n}\theta_{i}x_{i}=\theta^{T}x\)

非线性边界的形式为:\(\theta_{0}+\theta_{1}x_{1}+\theta_{2}x_{2}+\theta_{3}x_{1}^{2}+\theta_{4}x_{2}^{2}\)

在概率上计算输入\(x\)结果为1或者0的概率分别为:

\(P(y=1|x;\theta)=h_{\theta}(x)\)

\(P(y=0|x;\theta)=1-h_{\theta}(x)\)

损失函数被定义为:\(J(\theta)=\frac{1}{m}\sum_{m}^{i=1}cost(h_{\theta}(x^{i}), y^{i})\)

其中:

这里\(m\)是所有训练样本的数目;

\(cost(h_{\theta}(x), y)=\left\{\begin{matrix}\ \ \ \ \ -log(h_{\theta}(x)) \ \ \ if\ y=1\\ -log(1-h_{\theta}(x)) \ \ \ if \ y=0\end{matrix}\right.\)

\(cost\)的另一种形式是:\(cost(h_{\theta}(x), y)=-y\times log(h_{\theta}(x))-(1-y)\times log(1-h_{\theta}(x))\)

将\(cost\)代入到\(J(\theta)\)中可以得到损失函数如下:

\(J(\theta)=-\frac{1}{m}[\sum_{m}^{i=1}y^{(i)}logh_{\theta}(x^{(i)})+(1-y^{(i)})log(1-h_{\theta}(x^{(i)}))]\)

梯度法求\(J(\theta)\)的最小值

\(\theta\)的更新过程如下:

\(\theta_{j}:=\theta_{j}-\alpha\frac{\partial }{\partial\theta_{j}}J(\theta),\ \ \ (j=0\cdots n)\)

其中:\(\alpha\)是学习步长。

\(\begin{align*} \frac{\partial }{\partial\theta_{j}}J(\theta) &= -\frac{1}{m}\sum_{m}^{i=1}\left ( y^{(i)}\frac{1}{h_{\theta}(x^{(i)})} \frac{\partial }{\partial\theta_{j}}h_{\theta}(x^{(i)})-(1-y^{(i)})\frac{1}{1-h_{\theta}(x^{(i)})}\frac{\partial }{\partial\theta_{j}}h_{\theta}(x^{(i)})\right )  \\  &=-\frac{1}{m}\sum_{m}^{i=1}\left ( y^{(i)}\frac{1}{g\left ( \theta^{T}x^{(i)} \right )}-\left ( 1-y^{(i)} \right )\frac{1}{1-g\left ( \theta^{T}x^{(i)} \right )} \right )\frac{\partial }{\partial\theta_{j}}g\left ( \theta^{T}x^{(i)} \right ) \\   &= -\frac{1}{m}\sum_{m}^{i=1}\left ( y^{(i)}\frac{1}{g\left ( \theta^{T}x^{(i)} \right )}-\left ( 1-y^{(i)} \right )\frac{1}{1-g\left ( \theta^{T}x^{(i)} \right )} \right ) g\left ( \theta^{T}x^{(i)} \right ) \left ( 1-g\left ( \theta^{T}x^{(i)} \right ) \right ) \frac{\partial }{\partial\theta_{j}}\theta^{T}x^{(i)} \end{align*}\)

\(\begin{align*} \frac{\partial }{\partial\theta_{j}}J(\theta) &= -\frac{1}{m}\sum_{m}^{i=1}\left ( y^{(i)}\left ( 1-g\left ( \theta^{T}x^{(i)} \right ) \right )-\left ( 1-y^{(i)} \right )g\left ( \theta^{T}x^{(i)}\right) \right )x_{j}^{\left (i  \right )} \\ &= -\frac{1}{m}\sum_{m}^{i=1}\left ( y^{(i)} -g\left ( \theta^{T}x^{(i)}\right) \right )x_{j}^{\left (i  \right )} \\ &=-\frac{1}{m}\sum_{m}^{i=1}\left ( y^{(i)} -h_{\theta}\left ( x^{(i)}\right) \right )x_{j}^{\left (i  \right )} \\&=\frac{1}{m}\sum_{m}^{i=1}\left ( h_{\theta}\left ( x^{(i)}\right)-y^{(i)} \right )x_{j}^{\left (i  \right )} \end{align*}\)

把偏导代入更新过程那么可以得到:

\(\theta_{j}:=\theta_{j}-\alpha\frac{1}{m}\sum_{m}^{i=1}\left ( h_{\theta}\left ( x^{(i)}\right)-y^{(i)} \right )x_{j}^{\left (i  \right )}\)

学习步长\(\alpha\)通常是一个常量,然后省去\(\frac{1}{m}\),可以得到最终的更新过程:

\(\theta_{j}:=\theta_{j}-\alpha\sum_{m}^{i=1}\left ( h_{\theta}\left ( x^{(i)}\right)-y^{(i)} \right )x_{j}^{\left (i  \right )}, \ \ \ \ \left ( j=0\cdots n \right )\)

向量化梯度

训练样本用矩阵来描述就是:

\(X= \begin{bmatrix} x^{(1)}\\ x^{(2)}\\ \cdots \\ x^{(m)}\end{bmatrix}=\begin{bmatrix} x_{0}^{(1)} & x_{1}^{(1)} & \cdots & x_{n}^{(1)}\\ x_{0}^{(2)} & x_{1}^{(2)} & \cdots & x_{n}^{(2)}\\ \cdots & \cdots & \cdots & \cdots \\  x_{0}^{(m)} & x_{1}^{(m)} & \cdots & x_{n}^{(m)} \end{bmatrix}, \ \ Y=\begin{bmatrix} y^{\left ( 1 \right )}\\  y^{\left ( 2 \right )}\\  \cdots \\ y^{\left ( m \right )}\end{bmatrix}\)

参数\(\theta\)的矩阵形式为:

\(\Theta=\begin{bmatrix} \theta^{\left ( 1 \right )}\\  \theta^{\left ( 2 \right )}\\  \cdots \\ \theta^{\left ( m \right )}\end{bmatrix}\)

先计算\(X\cdot \Theta\),并记结果为\(A\):

\(A=X\cdot\Theta\),其实就是矩阵的乘法

再来求取向量版的误差\(E\):

\(E=h_{\Theta}\left ( X \right )-Y=\begin{bmatrix} g\left ( A^{1} \right )-y^{\left (1  \right )}\\ g\left ( A^{1} \right )-y^{\left (1  \right )}\\  \cdots \\  g\left ( A^{1} \right )-y^{\left (1  \right )}\end{bmatrix} = \begin{bmatrix} e^{(1)}\\ e^{(2)}\\ \cdots \\ e^{(m)}\end{bmatrix}\)

当\(j=0\)时的更新过程为:

\(\begin{align*} \theta_{0}&=\theta_{0}-\alpha\sum_{m}^{i=1}\left ( h_{\theta}\left ( x^{(i)}\right)-y^{(i)} \right )x_{0}^{\left (i  \right )}, \ \ \ \ \left ( j=0\cdots n \right ) \\  &= \theta_{0}-\alpha\sum_{m}^{i=1}e^{\left ( i \right )}x_{0}^{\left ( i \right )} \\ &= \theta_{0}-\alpha \begin{bmatrix} x_{0}^{\left ( 1 \right )} & x_{0}^{\left ( 2 \right )} & \cdots & x_{m}^{\left ( 0 \right )} \end{bmatrix} \cdot E \end{align*}\)

对于\(\theta_{j}\)同理可以得到:

\(\theta_{j} = \theta_{j}-\alpha \begin{bmatrix} x_{j}^{\left ( 1 \right )} & x_{j}^{\left ( 2 \right )} & \cdots & x_{j}^{\left ( m \right )} \end{bmatrix} \cdot E\)

用矩阵来表达就是:

\(\begin{align*}\begin{bmatrix} \theta_{0}\\ \theta_{1}\\ \cdots \\ \theta_{n}\end{bmatrix} &= \begin{bmatrix} \theta_{0}\\ \theta_{1}\\ \cdots \\ \theta_{n}\end{bmatrix} - \alpha \cdot \begin{bmatrix} x_{0}^{\left ( 1 \right )} & x_{0}^{\left ( 2 \right )} & \cdots & x_{0}^{\left (m \right )}\\  x_{1}^{\left ( 1 \right )} & x_{1}^{\left ( 2 \right )} & \cdots & x_{1}^{\left (m \right )}\\ \cdots & \cdots  &  \cdots &  \cdots\\ x_{n}^{\left ( 1 \right )} & x_{n}^{\left ( 2 \right )} & \cdots & x_{n}^{\left (m \right )}\\ \end{bmatrix} \cdot E \\  &= \theta - \alpha \cdot x^{T} \cdot E \end{align*}\)

以上就三个步骤:

1. 求取模型的输出:\(A=X \cdot \Theta\)

2. sigmoid映射之后求误差:\(E=g\left ( A \right )-Y\)

3. 利用推导的公式更新\(\Theta\),\(\Theta:=\Theta-\alpha \cdot X^{T} \cdot E\),然后继续回到第一步继续。

logistic回归学习的更多相关文章

  1. 机器学习5—logistic回归学习笔记

    机器学习实战之logistic回归 test5.py #-*- coding:utf-8 import sys sys.path.append("logRegres.py") fr ...

  2. 机器学习实战(Machine Learning in Action)学习笔记————05.Logistic回归

    机器学习实战(Machine Learning in Action)学习笔记————05.Logistic回归 关键字:Logistic回归.python.源码解析.测试作者:米仓山下时间:2018- ...

  3. 《机器学习实战》学习笔记第五章 —— Logistic回归

    一.有关笔记: 1..吴恩达机器学习笔记(二) —— Logistic回归 2.吴恩达机器学习笔记(十一) —— Large Scale Machine Learning 二.Python源码(不带正 ...

  4. 机器学习实战3:逻辑logistic回归+在线学习+病马实例

    本文介绍logistic回归,和改进算法随机logistic回归,及一个病马是否可以治愈的案例.例子中涉及了数据清洗工作,缺失值的处理. 一 引言 1 sigmoid函数,这个非线性函数十分重要,f( ...

  5. SAS学习笔记29 logistic回归

    变量筛选 当对多个自变量建立logistic回归模型时,并不是每一个自变量对模型都有贡献.通常我们希望所建立的模型将具有统计学意义的自变量都包含在内,而将没有统计学意义的自变量排除在外,即进行变量筛选 ...

  6. 吴恩达深度学习:2.12向量化logistic回归

    1.不使用任何for循环用梯度下降实现整个训练集的一步迭代. (0)我们已经讨论过向量化如何显著加速代码,在这次视频中我们会设计向量化是如何实现logistic回归,这样酒桶同时处理m个训练集,来实现 ...

  7. 神经网络、logistic回归等分类算法简单实现

    最近在github上看到一个很有趣的项目,通过文本训练可以让计算机写出特定风格的文章,有人就专门写了一个小项目生成汪峰风格的歌词.看完后有一些自己的小想法,也想做一个玩儿一玩儿.用到的原理是深度学习里 ...

  8. 如何在R语言中使用Logistic回归模型

    在日常学习或工作中经常会使用线性回归模型对某一事物进行预测,例如预测房价.身高.GDP.学生成绩等,发现这些被预测的变量都属于连续型变量.然而有些情况下,被预测变量可能是二元变量,即成功或失败.流失或 ...

  9. Logistic回归分类算法原理分析与代码实现

    前言 本文将介绍机器学习分类算法中的Logistic回归分类算法并给出伪代码,Python代码实现. (说明:从本文开始,将接触到最优化算法相关的学习.旨在将这些最优化的算法用于训练出一个非线性的函数 ...

随机推荐

  1. mysql-8.0.11 比较坑的地方dba门要淡定

    [事件描述] 突然之间大量的连接进入数据库.并放开手干,这个使得mysql使用了大量的内存,触发了linux的oom机制.然后mysql就这样 被linux给干掉了.没错MySQL宕机了,要相信我说的 ...

  2. html select与option标签

    1.select 元素 select 元素可创建单选或多选菜单.<select> 元素中的 <option> 标签用于定义列表中的可用选项 常用属性如下: autofocus: ...

  3. laravel路由不生效,404,除了/ 都不行,关于nginx环境下laravel除了默认路由都出现404报错的处理方法

    其实出现这个问题只会出现在laravel被部署在二级目录中,其原因是,除了请求根目录/ (http://www.xxx.com/public/),会请求public/index.php 你在浏览器输入 ...

  4. java的跳转和重定向,加载显示层

    HttpServltRequest  req,   HttpDervletResponse resp 的 req.sendRedirect('页面');跳转到页面  浏览器地址跳转 --------- ...

  5. SaaS多租户模式数据存储方案

    云计算多租户几乎用于所有软件即服务 (Software as a Service, SaaS) 应用程序,因为计算资源是可伸缩的,而且这些资源的分配由实际使用决定.话虽如此,用户可以通过 Intern ...

  6. c# vs2010 excel 上传oracle数据

    excel 数据表上传到oracle数据库.过程例如以下: 1.打开本地excel文件 2.用OleDb连接excel文件 3.将来excel的数据读取到dataset中 4.把dataset 中数据 ...

  7. [hihoCoder] 第四十八周: 拓扑排序·二

    题目1 : 拓扑排序·二 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi和小Ho所在学校的校园网被黑客入侵并投放了病毒.这事在校内BBS上立刻引起了大家的讨论,当 ...

  8. 【Unity】7.4 游戏外设输入

    分类:Unity.C#.VS2015 创建日期:2016-04-21 一.简介 Unity可以处理摇杆.游戏手柄.方向盘等标准游戏外设的输入,使用的方法如下图所示: 虚拟按键需要在输入管理器中配置,把 ...

  9. 【Unity】第6章 Unity脚本开发基础

    分类:Unity.C#.VS2015 创建日期:2016-04-16 一.简介 游戏吸引人的地方在于它的可交互性.如果游戏没有交互,场景做得再美观和精致,也难以称其为游戏. 在Unity中,游戏交互通 ...

  10. Java 虚拟机类加载器

    虚拟机设计团队把类加载阶段张的”通过一个类的全限定名来获取此类的二进制字节流”这个动作放到Java虚拟机外部去实现,以便让应用程序自己决定如何去获取所需要的类.实现这个动作的代码模块称为”类加载器”. ...