线性回归之最小二乘法

简介: 线性回归线性回归是很常见的一种回归,线性回归可以用来预测或者分类,主要解决线性问题。最小二乘法线性回归过程主要解决的就是如何通过样本来获取最佳的拟合线。

线性回归

线性回归是很常见的一种回归,线性回归可以用来预测或者分类,主要解决线性问题。

最小二乘法

线性回归过程主要解决的就是如何通过样本来获取最佳的拟合线。最常用的方法便是最小二乘法,它是一种数学优化技术,它通过最小化误差的平方和寻找数据的最佳函数匹配。

代数推导:

  1. 假设拟合直线为 y=ax+b
  2. 对任意样本点 (xi,yi)
  3. 误差为 e=yi(axi+b)
  4. S=ni=1ei2 为最小时拟合度最高,即 ni=1(yiaxib)2 最小。
  5. 分别求一阶偏导
    Sb=2(i=1nyinbai=1nxi)

Sa=2(i=1nxiyibi=1nxiai=1nxi2)

6.分别让上面两式等于0,并且有 nx¯=ni=1xi ny¯=ni=1yi

7.得到最终解

a=ni=1(xix¯)(yiy¯)ni=1(xix¯)2

b=y¯ax¯

结果也可以如下

a=nxiyixiyinxi2(xi)2

b=xi2yixixiyinxi2(xi)2

代码实现

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()

运行结果

这里写图片描述

矩阵推导

  1. 对于 y=ax+b 转为向量形式
    W=[w0w1]$$X=[1x1]
  2. 于是 y=w1x1+w0=WTX
  3. 损失函数为
    L=1ni=1n(yn(WTX)2)=1n(yXW)T(yXW)

    最后可化为

1nXTWTXW2nXTWTy+1nyTy
  1. 令偏导为0

LW=2nXTXW2nXTy=0

另外, (XTX)1XTX=E EW=W
则,
(XTX)1XTXW=(XTX)1XTy

W=(XTX)1XTy

代码实现

import numpy as np
import matplotlib.pyplot as plt

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]

A = np.vstack([x,np.ones(len(x))]).T

a,b = np.linalg.lstsq(A,y)[0]
print("y = %10.5fx + %10.5f" %(a,b))
x = np.array(x)
y = np.array(y)

plt.plot(x,y,'o',label='data',markersize=10)
plt.plot(x,a*x+b,'r',label='line')
plt.show()

运行结果
这里写图片描述

========广告时间========

鄙人的新书《Tomcat内核设计剖析》已经在京东销售了,有需要的朋友可以到 https://item.jd.com/12185360.html 进行预定。感谢各位朋友。

为什么写《Tomcat内核设计剖析》

=========================

目录
相关文章
|
Java Apache
解决gradle下载慢的问题
解决gradle下载慢的问题
8814 0
|
应用服务中间件 数据安全/隐私保护 nginx
Gitlab----使用Docker方式安装部署Gitlab
Gitlab----使用Docker方式安装部署Gitlab
12893 1
Gitlab----使用Docker方式安装部署Gitlab
|
安全 物联网 传感器
带你读《工业物联网安全》之一:一个前所未有的机会
本书为读者提供了针对IIoT安全各个方面的综合理解,以及用来构建部署安全IIoT解决方案的实践技术。书中介绍IIoT安全的基本原则、威胁模型、参考架构,以及现实生活中的实例分析学习,涵盖了用来设计基于风险安全控制方案的各种实用工具,并且深入讨论了多层防御相关技术,包括IAM、终端安全、互联技术以及基于边界和云环境的应用。读者能够从本书中获得保护IIoT生命周期流程、标准化、治理与评估新兴技术适用性方面的实用经验,从而实现成规模、可靠且具有社会效益的互联系统。
|
缓存 安全 网络架构
Win10更新错误0x80070422?尝试这些解决方案快速修复!
Win10更新错误0x80070422?尝试这些解决方案快速修复!
|
数据可视化 UED Python
解锁Matplotlib的交互式图表功能
【4月更文挑战第17天】本文介绍了如何使用Matplotlib创建交互式图表,以增强数据探索体验。通过启用交互模式和利用`matplotlib.widgets`模块,可以创建滑动条、按钮等控件来改变图表属性。例如,滑动条可动态调整线宽,按钮用于切换图例显示。此外,还展示了如何使用Dropdown控件动态更新图表数据。掌握这些技巧能提升数据可视化的交互性和用户体验。
|
Java
深入理解Java中的instanceof运算符
深入理解Java中的instanceof运算符
550 0
|
机器学习/深度学习 算法 数据可视化
MATLAB
MATLAB(Matrix Laboratory,矩阵实验室)是由美国The MathWorks公司出品的商业数学软件。MATLAB是一种用于算法开发、数据可视化、数据分析以及数值计算的高级技术计算语言和交互式环境。除矩阵运算、绘制函数/数据图像等常用功能外,MATLAB还可用来创建用户界面,以及调用其它语言(包括C、C++、Java、Python、FORTRAN)编写的程序。
509 4
|
算法 网络安全 数据安全/隐私保护
|
存储 缓存 Java
java应用提速(速度与激情)
本文将阐述通过基础设施与工具的改进,实现从构建到启动全方面大幅提速的实践和理论。
50141 13
java应用提速(速度与激情)
|
存储 安全 区块链
php交易所源码分享
代币交易所搭建 交易所搭建app 交易所app搭建 搭建swap交易所 聊城交易所搭建 交易所合约搭建 交易所搭建方案 usdt交易所搭建 otc交易所搭建 swap交易所搭建 汇交易所搭建 搭建数字交易所 交易所搭建联系 交易所免费搭建 mgs交易所搭建