线性回归

线性回归的数学推导主要涉及到以下几个知识点。

1. 利用矩阵的知识对线性公式进行整合

2. 误差项的分析

3. 似然函数的理解

4. 矩阵求偏导

5. 线性回归的最终求解

例子

本故事纯属虚构如有雷同那肯定是巧合。

A去银行办信用卡,柜台的漂亮妹子询问:"请问您的年龄和月收入是多少?"A:"20岁,月收入2万元"。妹子:“您可办理的额度为1万元”。此时,B同样办信用卡,妹子同样询问:“请问您的年龄和月收入是多少?”B:“19岁,月收入1.9万元”。妹子:“您可办理的额度为1.1万元”。A此时就郁闷了,我月收入比他高,为什么额度比他低呢。别问为什么!机器算的!那么机器怎么算的呢?这个时候我们就可以拿出机器学习中最基本也是最重要的算法之一线性回归

  岁数 月收入/万元 信用卡额度/万元
A 20 2 1
B 19 1.9 1.1

图中的横坐标X1 和 X2 分别代表着 两个特征(年龄、工资) 。纵坐标Y代表目标(信用卡额度)。其中红点代表的就是实际的目标值(每个人可使用的信用卡额度).而平面上和红点竖向相交的点代表着我们根据线性回归模型得到的点。也就是说实际得到的钱和预估的钱之间是有一定误差的,这个就是误差项。
      因为误差项是真实值和误差值之间的一个差距。那么肯定我们希望误差项越小越好。(见“第二节代价函数”)

这个图可以看出机器如何进行预测的,它会根据大量的之前办理信用卡的人的数据就是图中红色的点(年龄、工资、信用卡额度)找出来最好的拟合线(面)来进行预测,这样你的数据来了之后直接带入进去就可以得出来该给你多少额度。

ps:有同学可能说不是线性模型么,咋图是个面呢?

线性不等于直线,特征是一维的,线性模型在二维空间构成一条直线;特征是二维的,线性模型在三维空间中构成一个平面;若特征是三维的,则最终模型在四维空间中构成一个体;以此类推……好呗,后面的需要大家自己想象啦。

1、模型

假设是年龄,则是年龄的参数;是工资,则是工资的参数。则拟合的平面为:(其中b是偏移量)当然实际情况中,银行的漂亮妹妹会让你填大量的信息,也就是模型不止两个特征和参数,可以把模型改写为通用矩阵形式:

其中,  

至此我们得到线性回归的模型。

2、代价函数

1.误差项分析:

真实值和预测值之间肯定是存在差异的(用ε来表示误差)也就是说A去银行办信用卡,本应该给1万元,但实际可能给9千或者1万,这样就不可避免的产生误差。对于每个样本:

既然说到误差了,咱们就来好好唠一下,首先银行的目标得让误差越小越好,这样才能够使得我们的结果是越准确的。那么这个误差有什么规律可循吗?

误差 是独立并且具有相同的分布,并且服从均值为0方差为ε的高斯分布。

独立:A和B的信用卡额度不会相互影响,不会因为给A额度高了,就给B低。

同分布:都是一家银行,一家预测系统

高斯分布:银行可能会多给,也可能会少给,但是绝大多数情况下这个浮动不会太大,极小情况下浮动会比较大,符合正常情况,所以我们认为该误差是可以服从高斯分布的。

误差项ε是独立且具有相同的分布,服从均值为0方差为的高斯分布

下面是高斯分布的图,忘记的同学们可以回忆下。

2.推导

(1)预测值和误差:

(2)由于误差服从高斯分布:

(3)将(1)带入(2):

上式的意思就是我去办信用卡,得到的额度恰好是等于真实情况下就该给我这么多的概率。(预测值和真实值对应的可能性大小)那么银行当然希望这个概率越大越好呀,越大代表越准确呀。

误差项肯定是越小越好了,那么接下来要讨论的就是什么样的参数和特征的组合能够让误差项最小呢? 这里就引入了似然函数的作用。似然函数的作用就是要根据样本来求什么样的参数和特征的组成能够最接近真实值。越接近真实值则误差越小。

(4)又因为设定样本是独立同分布的,对其求似然函数:

似然函数最大化是为了逼近我们的数据。

(5)上式,是一个累乘,我们可以转换成加法,于是引入对数,即对数似然函数:

(6)上式展开后得到:

因为      为常数,所以只需要求    ,要让最大,即让减号后面部分最小。所以我们定义代价函数:

其中 1/2 保留是为了后续求导系数约分。

总结:到这里我们终于推导出来了,银行只需要做一件事就可以了,那就是最小化这个函数,其实说白了就是要让我们的预测值和真实值之间的差异越小越好,这就是最小二乘法!

通过上面一系列推导,就把式子转化为最小二乘法的相关知识了。这就是在线性回归中使用似然函数的相关知识。

3、优化算法

对损失函数进行优化也就是求出参数w,b,使的损失函数最小化。有两种求解方法:

(1)求导法

对各参数求偏导,并使其偏导为0,进而求出最优的参数。但此方法不适用于不可导函数,且计算量过大。

矩阵求导运算常用公式(有么有很贴心,如果大家记不得可以参考):

首先我们把展开方便求导:

这里X是一个m*n的矩阵,表示m个样本,每个样本有n个特征(),"1"是对应偏置量常数,W是模型参数n*1的列向量。

求上面式子的最小值该怎么办呢?求导啊,另导数等于0

以上就是按矩阵方法优化损失函数,但上面方法有一定的局限性,就是要可逆;下面我们来说一说另外一个优化方法梯度下降法。

(2)梯度下降法

梯度下降法基于的思想为:要找到某函数的极小值,则沿着该函数的梯度方向寻找。若函数为凸函数且约束为凸集,则找到的极小值点则为最小值点。 梯度下降基本算法为: 首先用随机值填充(这被称为随机初始化),然后逐渐改进,每次步进一步(步长α),每一步都试图降低代价函数,直到算法收敛到最小。

这两种方法的优缺点对比:

梯度下降 方程求解
需要选择学习率,可能由于学习率选择的不合适,导致模型效果差 不需要
需要多次迭代 一次运算得出
特征维数较大时,同样适用 因为矩阵求逆计算度比较复杂,一般N<10000时可以采用。
适用于各种模型 有局限性,比较逻辑回归就不适用

已知:

从而在梯度下降中每一步向量W的迭代公式如下:

其中,α为梯度下降法的步长。

    实践中,我们一般不用操心优化方法,大部分机器学习库都内置了各种逻辑回归的优化方法,不过了解至少一种优化方法还是有必要的。

from:http://blog.51cto.com/12133258/2051527

from:https://mp.weixin.qq.com/s/VgZK16ZMND3aMyiC0xkOMQ

逻辑回归

逻辑回归是一个分类算法,它可以处理二元分类以及多元分类。虽然它名字里面有“回归”两个字,却不是一个回归算法。那为什么有“回归”这个误导性的词呢?个人认为,虽然逻辑回归是分类模型,但是它的原理里面却残留着回归模型的影子,本文对逻辑回归原理做一个总结。

 逻辑回归的定位

首先,逻辑回归是一种分类(Classification)算法。比如说:

  • 给定一封邮件,判断是不是垃圾邮件
  • 给出一个交易明细数据,判断这个交易是否是欺诈交易
  • 给出一个肿瘤检查的结果数据,判断这个肿瘤是否为恶性肿瘤

逻辑回归是互联网上最流行也是最有影响力的分类算法,也是深度学习(Deep Learning)的基本组成单元。

从线性回归到逻辑回归

 我们知道,线性回归的模型是求出输出特征向量Y和输入样本矩阵X之间的线性关系系数θ(即W),满足Y=Xθ。此时我们的Y是连续的,所以是回归模型。如果我们想要Y是离散的话,怎么办呢?一个可以想到的办法是,我们对于这个Y再做一次函数转换,变为g(Y)。如果我们令g(Y)的值在某个实数区间的时候是类别A,在另一个实数区间的时候是类别B,以此类推,就得到了一个分类模型。如果结果的类别只有两种,那么就是一个二元分类模型了。逻辑回归的出发点就是从这来的。下面我们开始引入二元逻辑回归。

一个逻辑回归的例子

比如有下面一组数据:一门考试之前学生的复习时间与这个学生最后是否Pass这门考试的数据

通过这些数据,利用逻辑回归算法进行模型训练,可以得到最终的模型结果是这个样子:

这样,给出任何复习时间,就可以预测出是否通过的概率

3 逻辑回归拟合函数:Sigmod函数(逻辑函数)

可以看到,逻辑回归最后的分类结果是0/1,因此,我们选择Sigmod函数(貌似是一个专业术语)来拟合训练数据。Sigmod函数的形式如下,它的x可以无限取值,但是y就在(0,1)之间

对于最简单的,只有一个自变量(x)的二元分类(y=0/1)逻辑回归中,构造出来的拟合函数为

所以,要得到最终的模型,就是根据样本点,计算a和b的值.

在上一节的复习时间和考试的例子中,最终计算出参数a=1.5046,b=-4.0777,因此可以得到下面的拟合函数的图像:

上一节我们提到对线性回归的结果做一个在函数g上的转换,可以变化为逻辑回归。这个函数g在逻辑回归中我们一般取为sigmoid函数,形式如下:

二元逻辑回归的损失函数

回顾下线性回归的损失函数,由于线性回归是连续的,所以可以使用模型误差的的平方和来定义损失函数。但是逻辑回归不是连续的,自然线性回归损失函数定义的经验就用不上了。不过我们可以用最大似然法来推导出我们的损失函数。我们知道,按照二元逻辑回归的定义,假设我们的样本输出是0或者1两类。那么我们有:

二元逻辑回归的损失函数的优化方法

对于二元逻辑回归的损失函数极小化,有比较多的方法,最常见的有梯度下降法,坐标轴下降法,等牛顿法等。这里推导出梯度下降法中θ每次迭代的公式。由于代数法推导比较的繁琐,我习惯于用矩阵法来做损失函数的优化过程,这里给出矩阵法推导二元逻辑回归梯度的过程。

矩阵求导大家可能很困惑:(分别用到了上图中三个矩阵求导公式)

 求偏导数,分三步,首先是对log求导得,再对求导得,再对X求导,(注意这里X其实是)得

from:https://www.cnblogs.com/pinard/p/6029432.html

from:https://www.cnblogs.com/hezhiyao/p/7577960.html

也可借鉴不用矩阵求导的方式:

https://blog.csdn.net/ljp1919/article/details/79120761

机器学习算法(3)——线性回归与逻辑回归相关推荐

  1. 机器学习算法总结--线性回归和逻辑回归

    1. 线性回归 简述 在统计学中,线性回归(Linear Regression)是利用称为线性回归方程的最小平方函数对一个或多个自变量和因变量之间关系进行建模的一种回归分析.这种函数是一个或多个称为回 ...

  2. 机器学习模型1——线性回归和逻辑回归

    前置知识 最大似然估计 最小二乘法 梯度下降算法 高斯分布 主要内容 注意:下面的w和θ指的都是自变量的斜率. 线性回归 利⽤回归⽅程(函数)对⼀个或多个⾃变量(特征值)和因变量(⽬标值)之间关系进⾏ ...

  3. 【机器学习算法笔记系列】逻辑回归(LR)算法详解和实战

    逻辑回归(LR)算法概述 逻辑回归(Logistic Regression)是用于处理因变量为分类变量的回归问题,常见的是二分类或二项分布问题,也可以处理多分类问题,它实际上是属于一种分类方法. 逻辑 ...

  4. 机器学习算法(3)—— 逻辑回归算法

    逻辑回归算法 1 逻辑回归介绍 2 损失及优化 3 逻辑回归的使用 4 分类评估方法 4.1 混淆矩阵 4.2 ROC曲线与AUC指标 4.3 ROC曲线绘制 5 分类中类别不平衡问题 5.1 过采样 ...

  5. 机器学习算法(四)逻辑回归理论与python实现+经典示例(从疝气病预测病马的死亡率)

    学习笔记更新 什么是逻辑回归? 简要介绍     逻辑回归是用来解决线性回归问题的,它将线性回归得到的结果通过逻辑函数映射到[0,1]之间,因此称逻辑回归.逻辑回归模型主要用于解决二分类问题,是一个分 ...

  6. 【机器学习算法-python实现】逻辑回归的实现(LogicalRegression)

    1.背景知识       在刚刚结束的天猫大数据s1比赛中,逻辑回归是大家都普遍使用且效果不错的一种算法.   (1)回归           先来说说什么是回归,比如说我们有两类数据,各有50十个点 ...

  7. python机器学习库keras——线性回归、逻辑回归、一般逻辑回归

    全栈工程师开发手册 (作者:栾鹏) python数据挖掘系列教程 线性回归 import numpy as npfrom keras.models import Sequential from ker ...

  8. 机器学习(多元线性回归模型逻辑回归)

    多元线性回归 定义:回归分析中,含有两个或者两个以上自变量,称为多元回归,若自变量系数为1,则此回归为多元线性回归. (特殊的:自变量个数为1个,为一元线性回归)多元线性回归模型如下所示: 如上图所示 ...

  9. 机器学习-算法背后的理论与优化(part1)--从线性回归到逻辑回归

    学习笔记,仅供参考,有错必纠 参考自:机器学习-算法背后的理论和优化: 从线性回归到逻辑回归 线性回归估算的是一个连续变量的条件期望: E ( y ∣ x ) = w T x (1) E(y|x)=w ...

最新文章

  1. RabbitMQ (十五) 镜像集群 + HAProxy1.7.8 负载均衡
  2. 快速编辑 Shell 命令行
  3. 如何在Java中将字节数组转换为InputStream和OutputStream
  4. ApacheCN 交流社区热点汇总 2019.3
  5. 电源大师课笔记 1.5
  6. 显卡煲机测试软件,铁三角耳机煲机方法三分钟让您学会煲耳机
  7. 程序员集体意识大爆发:996背后的深问题
  8. Greenplum 数据库和schema管理
  9. 【每日早报】2019/07/19
  10. 北京大学计算机研究生怎么样,北京大学计算机专业在职研究生怎么样?
  11. 25.优化算法4:求解信赖域子问题及其收敛性
  12. 初学编程该如何选择编程语言?
  13. 指导生活的算法解读--分享
  14. 中国怪企 许昌怪人----胖东来
  15. WICC 2021来袭 融云领衔探索互联网通信云技术新方向
  16. jquery height 获取不到隐藏元素高度的问题
  17. 从Matlab .fig文件中读取数据,并重新绘图
  18. Eagle下载 - 素材管理工具
  19. JAVA中的Exception和Error之间的区别
  20. php使用接口 知乎,【微信服务号开发】03.实战 回复知乎日报,返回8个最新知乎日报图文消息...

热门文章

  1. linux学习查看系统资源和磁盘分区
  2. android 元素点击位置,appium自动化操作之元素定位点击事件全家桶(find_element_by、find_elements_by)...
  3. ES6-symbol-创建symbol
  4. 在deepin中安装docker
  5. python面向对象学习(七)单例
  6. 数据结构(六) 排序
  7. Struts2之数据标签(二)
  8. G++编译Note Pad++
  9. Matlab Tricks(三十) —— 任意区间的均匀分布
  10. 添加毛玻璃的两中方法