线性回归及其Python实现(最大似然法)
来源:互联网 发布:软件开发费用明细 编辑:程序博客网 时间:2024/06/06 08:23
线性回归及其Python实现(最大似然法)
标签: Python 机器学习
本节内容总结于博主在牛客网机器学习特训营的笔记
参考资料:《机器学习实战》
目录
1.什么是线性回归
2.回归系数公式推导
3.线性回归Python实现
4.线性回归的应用
5.总结
6.附录
1.什么是线性回归(Linear Regression)
维基百科:线性回归
在统计学中,线性回归是利用称为线性回归方程的最小二乘函数对一个或多个自变量和因变量之间关系进行建模的一种回归分析。
按照博主自己的理解,线性就是因变量的变化量和自变量的变化量成比例(比如1个鸡蛋1元钱,2个鸡蛋2元钱,3个鸡蛋3元钱,其中价格变化量:鸡蛋变化量始终为1:1),数学上表现为一阶导数为常数。例如这个例子的线性回归方程就是
线性回归就是把因变量和自变量之间的关系看做线性的关系,然后求它们之间线性关系,感觉是一种减熵的效果,所以是回归。比如把人脚底板长度作为自变量,身高作为因变量,那么在这两种数据之间就可以做一个简单线性回归,可以得到脚底板长度和身高的关系式。公安人员可以依据这种方法从犯罪现场的脚印推断出犯罪嫌疑人身高。
2.回归系数公式推导
假设因变量为
因为种种原因,数据是按照一定的误差分布在拟合的曲线两边,否则只需要少数的几个数据就能拟合出完美的直线了。幸运的是,这种误差符合正态分布,所以从此处入手开始推导线性回归方程。
假设一共有m个样本,对于第i个数据(注意不是平方),有
其中
结合(2)(3)式有
有了(4)式就可以得到似然函数
似然函数是根据样本估计分布参数
我们取目标函数
似然函数有最大值时,目标函数有最小值,我们对(7)式进行求导即可得到
对(8)式求向量
求目标函数的最小值,那么最小值的点应该是驻点,有
(10)就是推导出求
3.线性回归Python实现
代码主要分为两个部分,第一个部分模拟样本的采集,第二个部分是线性回归。
样本的生成公式为
其中
import numpy as npimport matplotlib.pyplot as pltimport mathimport random#制造样本x = np.arange(0, 100, 0.2)xArr = []yArr = []for i in x: lineX = [1] lineX.append(i) xArr.append(lineX) yArr.append( 0.5 * i + 3 + random.uniform(0, 1) * 4 *math.sin(i) )#线性回归xMat = np.mat(xArr)yMat = np.mat(yArr).TxTx = xMat.T * xMatif np.linalg.det(xTx) == 0.0: print "Can't inverse"ws = xTx.I * xMat.T * yMatprint wsy = xMat * ws#画图plt.title("linear regression")plt.xlabel("independent variable")plt.ylabel("dependent variable")plt.plot(x, yArr, 'go')plt.plot(x, y, 'r', linewidth = 2)plt.show()
样本数据和回归直线:
4.线性回归的应用
线性回归主要有两个用处,一个是预测,一个是分类。
4.1预测
以上面的线性回归为例子,我们只采集了自变量为[0,100]的数据,但是经过线性回归方程则可以预测出自变量在[100,200]内对应的因变量。常见的应用是GDP,石油价格和股票价格趋势预测(参考维基百科)。
4.2分类
上图中有圆形样本点和三角形样本点,中间红色的线是回归方程所对应的曲线,线性回归方程是
5.总结
- 线性回归应用广泛,计算简单,应当明白其推导过程和最终求解表达式
- 本文介绍了最大似然法求回归系数,还有梯度下降法求回归系数
- 线性回归最后的结果是一个直线,可能还不能达到我们的要求,比如本例想要得到接近
y=0.5∗x+3+4∗sinx 的结果,则可以使用局部加权线性回归 - 对于
XXT 不可逆的情况,可用岭回归方法 - 最后推荐3个良心资料
- Harrington P. 机器学习实战[J]. 人民邮电出版社, 北京, 2013.
- 李航. 统计学习方法[J]. 2012.
- 维基百科(有离线版)
6.附录
6.1维基百科中最大似然估计的一个例子
点击查看原图
- 线性回归及其Python实现(最大似然法)
- 线性回归python实现
- 线性回归---Python实现
- Python实现 线性回归(梯度下降)
- 线性回归的python实现
- 用python实现线性回归
- python实现简单线性回归
- Python实现机器学习一(实现一元线性回归)
- Python实现机器学习二(实现多元线性回归)
- 机器学习理论篇之线性回归(python实现)
- 机器学习-线性回归算法(python实现)个人理解
- 线性回归总结及python实现
- 多元线性回归的python实现
- 机器学习-线性回归python简单实现
- 线性回归算法及用python实现
- LWLR 局部加权线性回归---Python实现
- 线性逻辑回归的Python实现
- 机器学习之线性回归python实现
- CONNECT BY
- coalesce、nvl、nvl2比较
- Unicode下CString转char*
- boost timer库使用
- 图像哈希检索背景综述(一)
- 线性回归及其Python实现(最大似然法)
- 递归练习二
- qt发布
- 线程池
- 010SK: 数据库无法设置连接选项 SET_READONLY_TRUE
- 关于代码重构:是微修还是全部推倒重来
- Bochs调试指令
- RecyclerView的基本用法
- ### Android 判断app的状态 重启app