线性回归的数学原理以及代码实现
来源:互联网 发布:mysql复杂查询实例 编辑:程序博客网 时间:2024/05/23 02:07
线性回归的数学原理以及代码实现
首先要说的是线性模型想要得到的是一个线性组合。狭义的线性回归是想要把所有的点(或者叫特征)用一条直线来拟合,也就是图像上的点要尽可能地落到直线上。而广义的线性回归就不一定非要是直线了,例如在逻辑回归中用的就是一条对数几率的曲线,也就是图像上的点要尽可能的落到那条曲线上面。
在这篇文章中主要对线性回归作讨论:
首先呈上线性模型
【优点】
每个x前面的w,也就是系数很直观,他们就是权重系数,当我们拟合出一个模型的时候,对于每一个x我们都能通过w知道它到底重要不重要。
【缺点】
线性模型,顾名思义,他只对线性的数据点拟合的好,而现实中存在着大量的非线性特征,拟合效果就大打折扣了。
线性回归是用梯度下降法对最小二乘误差进行优化
我们既然已经确定了任务是找到这样一条直线,
但是总归要回到现实中来,不可能有那么完美的例子,那我们只能力求他们的距离之和接近0了。或者再退一步,接近不了0也行,距离之和越小总还是越好的吧!那么就有了下面的数学表述:
用
用
于是就有了距离的表达式:
这里用到了平方,是一种数学的技巧,为了达成下面两个目的:
+ 距离有正有负,我们这个加和的思想可不是为了抵消正负值的,所以我们必须要去掉他们的符号
+ 去掉符号也可以用绝对值,但是平方之后有一个放大的效应:如果距离不是很大,平方之后就还好,如果距离很大,平方之后就会被放的更大。(这里可以想象一下
【简单讲两句】:
上面这个距离表达式,学名叫做“欧式距离”,是计算距离的一种常用的数学方法,今后在机器学习其他算法中也会经常遇到。
我们继续之前的思路,就是要最小化这个距离值,由于直线由w和b决定,那么我们需要优化的参数就是w和b,换成数学语言,就是:
我们希望要距离平方和最小化的方法,称为最小二乘法。
如果从损失函数(loss function)的角度看,这个叫做“平方损失”。如果我们用
+ 令
在这里前面有了一个1/2的操作,纯粹了为了数学上的方便,反正在最小化的计算中,数倍的缩放没有什么影响
线性回归是残差高斯分布的最大似然估计
残差
残差就是预测值和真实值之间的差,也就是上面的
我们通常认为线性回归的残差应该满足均值为0,方差为
正态分布x概率表达式:
上式中的x即是线性回归的误差/残差,那么就把x替换成
接下来,我们想要达成,或者说最大限度地达成我们之间关于残差的假设,我们就必须让这个概率最大,也就是用极大似然法来求解,也就是最大化样本中每一个点分布的乘积。
由于连乘计算难度大,我们两边都取对数,这样就变成连加:
进一步化简:
去掉一些常数项,得到我们要最大化的目标:
殊途同归啊!
下面开始求解:
+ 向量化w、x和y,在这里统统用大写字母表示向量
+ 把b吸入向量w中,他们两个组合其他就是我们的参数
向量化的表达方式可以让我们在接下来的运算中取消加和符号,看上去更加简便一些
=
=
结果对
【矩阵求偏导】
令偏导等于0:
这里暂时默认
得出参数
import numpy as npdef train(X,y): """训练数据""" # 如果X^T·X是可逆的话: if np.linalg.det(X.T * X) != 0: # 计算参数theta theta = ((X.T.dot(X).I).dot.(X.T).dot(y)) return thetadef test(x,theta): """拟合数据""" return x.T.dot(theta)
*在本篇文章中涉及但是没有深入的概念会在后续的文章中陆续讲解,包括但不限于:
+ 极大似然法及其概率背景
+ 正则化
- 线性回归的数学原理以及代码实现
- 线性回归的代码实现
- 线性回归中的数学原理
- 机器学习--- 一元线性回归数学推导以及Python实现
- 线性回归 (linear regression model) 原理与代码实现
- 【机器学习一】五种线性回归原理以及代码实现(python基于SCIKIT-LEARN库)
- 线性回归的实现
- 逻辑回归的数学推导及java代码实现
- 线性回归原理和实现基本认识
- 线性回归原理与spark/sklearn实现
- 线性回归的java实现
- 线性回归的python实现
- 回归分析---线性回归原理和Python实现
- 梯度下降原理及线性回归代码实现(python/java/c++)
- 线性回归简介及python代码实现
- 线性回归与岭回归python代码实现
- 线性回归以及梯度下降的学习
- 线性回归原理篇
- 每天一个linux命令(20):find命令之exec
- jpg转bmp操作方法
- hdu 1269 迷宫城堡 tarjan模板
- 图解Android系统的启动过程
- websocket
- 线性回归的数学原理以及代码实现
- 美赛数模论文之公式写作
- 牛腩新闻发布系统总结
- Android各类有用的开源库项目
- 第K小数
- php核心学习-设计模式的学习-责任链模式
- Digital.Vision.Phoenix.v2015.3.020.Win64 1DVD
- Myeclipse错误:Errors occurred during the build. Errors running builder 'DeploymentBuilder' on project
- 【实验楼】基于BP神经网络的手写体识别——python3版