林海峰讲的python_线性回归模型与最小二乘法(附python源码)
线性回归 1、基本概念
线性回归假设因变量与自变量之间存在线性关系,因变量可通过自变量线性叠加而得到,即因变量和自变量之间可用如下方式表示。
式中
为自变量,
为权重系数,
为偏置。
线性回归就是要解决如何利用样本求取
拟合出上述表达式,获得最佳直线的问题。最常用的就是最小二乘法。
最小二乘法:最佳拟合线下,将已知样本的自变量代入拟合直线,得到的观测值与实际值之间的误差平方和最小。
2、一元线性回归
为了好理解,先从简单的情况开始,即一元线性回归。
2.1、利用方程组来解系数
假设因变量和自变量可用如下函数表示:
对于任意样本点
有误差
误差平方和
那什么样的a和b会使得误差平方和最小呢?
上面是求最值的问题,我们会想到导数和偏导数,这里在偏导数等于0的地方能取到极值,并且也是最值。
分别对a和b求偏导得到如下表达式:
通过对二元一次方程组
进行求解,可以得到如下解:
上面的数学过程用代码表示如下:
import numpy as np
import matplotlib.pyplot as plt
def calcAB(x,y):
n = len(x)
sumX, sumY, sumXY, sumXX = 0, 0, 0, 0
for i in range(0, n):
sumX += x[i]
sumY += y[i]
sumXX += x[i] * x[i]
sumXY += x[i] * y[i]
a = (n * sumXY - sumX * sumY) / (n * sumXX - sumX * sumX)
b = (sumXX * sumY - sumX * sumXY) / (n * sumXX - sumX * sumX)
return a, b
xi = [1,2,3,4,5,6,7,8,9,10]
yi = [10,11.5,12,13,14.5,15.5,16.8,17.3,18,18.7]
a,b=calcAB(xi,yi)
print("y = %10.5fx + %10.5f" %(a,b))
x = np.linspace(0,10)
y = a * x + b
plt.plot(x,y)
plt.scatter(xi,yi)
plt.show()
python数据散点和拟合的直线如下:
2.2、利用矩阵的方法来求解系数
函数
也可以表示成如下的形式
式中
对于n个样本,此时损失函数(即误差平方和)为:
假如我们将样本表示成如下形式:
则
进一步,可以将损失函数表示如下形式:
L对W求导,可得到
令导数为0,则有
从而
进而可以求得
上面的数学过程用代码表示如下:
x = [1,2,3,4,5,6,7,8,9,10]
y = [10,11.5,12,13,14.5,15.5,16.8,17.3,18,18.7]
X = np.vstack([np.ones(len(x)),x]).T
Y = np.array(y).T
W=np.dot(np.matrix(np.dot(X.T,X))**-1,np.dot(X.T,Y))
yi=np.dot(X,W.T)#这里公式里是不需要转置的,但由于矩阵运算时W自动保存成一行多列的矩阵,所以多转置一下,配合原公式的计算。
print(X)
print(Y)
print(W)
print(yi)#拟合出的预测点
plt.plot(x,y,'o',label='data',markersize=10)
plt.plot(x,yi,'r',label='line')
plt.show()
结果如下:
X=
[[ 1. 1.]
[ 1. 2.]
[ 1. 3.]
[ 1. 4.]
[ 1. 5.]
[ 1. 6.]
[ 1. 7.]
[ 1. 8.]
[ 1. 9.]
[ 1. 10.]]
Y=
[ 10. 11.5 12. 13. 14.5 15.5 16.8 17.3 18. 18.7]
W=
[[ 9.30666667 0.98606061]]
yi=
[[ 10.29272727]
[ 11.27878788]
[ 12.26484848]
[ 13.25090909]
[ 14.2369697 ]
[ 15.2230303 ]
[ 16.20909091]
[ 17.19515152]
[ 18.18121212]
[ 19.16727273]]
3、多元线性回归
将一元线性回归及回归系数的计算公式推广到多元线性回归也是一样。
损失函数可表示如下:
对L求导有
不防令
则上式可化简为
记
则
3.1、当矩阵满秩时(数据点的个数大于x的维度时)
令导数为0的方程组有足够的已知条件求解,令导数为0,则有
而
则有
从而有
3.2、当矩阵不满秩时
此时利用导数为0方程组个数不够,不能够全部解出参数,
可利用梯度下降法求近似最优解
而梯度下降步长初始化可随机设置,因而上式不防写成
最小二乘法多项式曲线拟合
多项式曲线拟合与多元线性回归拟合不同点在于,多元线性回归自变量有多个,因变量是多个自变量的线性组合,其形式为
而多项式拟合自变量还是一个,只不过因变量可以看作是自变量不同多项式的线性组合,其形式为
但利用矩阵计算时,如果满秩,两者系数的表达方式是一样的
概念
默认地认为因变量是自变量的多项式的线性组全,即有如下形式
最小二乘法多项式曲线拟合,根据给定的m个点,并不要求这条曲线精确地经过这些点,而是拟合曲线
上的数据点到原数据点的误差平方和最小。即有
回归系数求解
求最值问题,如果直接求解那么必然在可能的极值点获得(此时没有边界限制)。 对(1)式求偏导,如下
为便于理解,我们每次都只对w的一个维度求偏导,则有
即
即
即
写成矩阵形式有
将这个范德蒙得矩阵化简后可得到:
便得到了系数矩阵 A,同时,我们也就得到了拟合曲线。
其实我想说的是看到(2)中的矩阵等式,这个等式都不用推导的,因为函数的表达式就是这样的代入,代入样本后自然会有这样的等式。
而(3)通过矩阵运算自然就能得到。
用python代码编写多项式回归代码,结果如下:
最后图的代码有些长,想要代码的同学
1、朋友圈转发本文
2、将分享截图发送给本公众号
小编会在24小时内给你回复
林海峰讲的python_线性回归模型与最小二乘法(附python源码)相关推荐
- 线性回归模型之最小二乘法(python实现)
最小二乘法(Ordinary Least Square, OLS)是用数学公式直接求解线性回归方程的参数的方法.以最简单的一元线性回归为例,公式6-4中显示一系列的X值可以求出一系列的预测值Y',的目 ...
- 人工智能在线AI智能模型聊天AI网站系统源码
demo软件园每日更新资源,请看到最后就能获取你想要的: 1.人工智能在线AI智能模型聊天AI网站系统源码 PHP网站系统源码 API接口源码 AI网站系统源码仅23kb,实现用户管理,一键添加接 ...
- 【数学建模】基于matlab三维海浪模型仿真【含Matlab源码 1159期】
一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[数学建模]基于matlab三维海浪模型仿真[含Matlab源码 1159期] 点击上面蓝色字体,直接付费下载,即可. 获取代码方式2: 付 ...
- 回归方程的拟合优度检验_计量经济学第四讲(多元线性回归模型:基本假定,参数估计,统计检验)...
第三章.经典单方程计量经济学模型:多元线性回归模型 3.1多元线性回归模型及其基本假定 3.1.1多元回归模型及其表示 解释变量至少有两个的线性回归模型,一般形式为 如果不作说明, 是不包括常数项的解 ...
- 线性回归模型 —— 普通最小二乘法(OLS)推导与python实现
一般回归模型中 回归的核心任务就是要通过样本信息来估计总体回归函数 一元线性回归模型: 一元线性回归模型假设x是一维的,即只考虑一个因素对y的影响,模型为 y=+x+μ, E (μ|x)= 0 其中 ...
- 线性回归模型算法原理及Python实现
文章内容主要来自Aurelien Geron<Hands-on Machine Learning withi Scikit-Learn&TensorFlow> 目录 线性回归方程 ...
- python 线性回归模型_如何在Python中建立和训练线性和逻辑回归ML模型
python 线性回归模型 Linear regression and logistic regression are two of the most popular machine learning ...
- java多线程抽奖_java 线程池、多线程并发实战(生产者消费者模型 1 vs 10) 附案例源码...
导读 前二天写了一篇<Java 多线程并发编程>点我直达,放国庆,在家闲着没事,继续写剩下的东西,开干! 线程池 为什么要使用线程池 例如web服务器.数据库服务器.文件服务器或邮件服务器 ...
- C语言实现adaline模型(附完整源码)
adaline模型 实现adaline模型的完整源码(定义,实现,main函数测试) 实现adaline模型的完整源码(定义,实现,main函数测试) #include <assert.h> ...
- word2vec模型原理(附python实现代码)
附python实现代码 模型训练 import logging import gensim from gensim.models import word2vec # 设置输出日志 logging.ba ...
最新文章
- word分散对齐调整宽度_Word中文字很难对齐?有了这4个方法,2秒可对齐Word中所有文字...
- leetcode day1 -- Reverse Words in a String Evaluate Reverse Polish Notation Max Points on a Li
- 冷静处理因为一时疏忽产生的错误。是提升自己的重要方法
- caffe基础(7): 命令行解析
- 7、JPA-映射-双向一对多
- 通过uwsgi+nginx启动flask的python web程序
- 打开文件对话框控件的演示 c# 1614993940
- 2021-06-18激活函数的意义
- LiveWallPaper 让您的壁纸动起来 连载(三)——OpenGL ES特辑
- C#进行Post请求(解决url过长的问题)
- SQL SERVER 2008 “阻止保存要求重新创建表的更改”
- 牛客练习赛43F Tachibana Kanade Loves Game
- SpringBoot 中 get/post 请求处理方式,以及requestboy为Json时的处理
- 关于android studio报错Attempt to invoke virtual method 'void android.widget.ListView.setAdapter(android.
- Deeping Learning学习与感悟——《深度学习工程师》_3
- lincese oracle_关于Oracle数据库企业版的license价格
- 人工智能导论测试题——第1章绪论
- 【HTML】简单的表格设计
- 十二个一 之 十二生肖
- linux7.1装宝塔,CentOS 7.6 宝塔 + SSRPanel 安装
热门文章
- python中sqrt函数用法_Python : sqrt() 函数
- ctf中对于rar压缩包的暴力破解问题
- 数据聚合技术Aggregation
- 注册表中shell文件不见了_win10系统注册表中的shell文件不小心被删除的恢复教程...
- word快速切换多个文件窗口
- win10的ie保存html文件夹,win10系统IE缓存文件夹在哪里,教您IE缓存文件在哪里
- ie ajax十分卡,解决jquery .ajax 在IE下卡死问题的解决方法
- ASP.NET Core (视频)教程汇总
- LNMP(nginx php-fpm mysql) 环境部署——php
- 新手想做IT运维工程师该详细学习哪些知识?