线性回归之最小二乘法

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

线性回归

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

最小二乘法

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

代数推导:

  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=1xiny¯=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内核设计剖析》

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

目录
相关文章
|
10月前
MATALB运用——最小二乘法拟合
MATALB运用——最小二乘法拟合
122 0
|
机器学习/深度学习 数据可视化 Python
逻辑回归那些事—使用牛顿法解决实际问题
逻辑回归是机器学习中的重要章节,本文将带你从公式推导到算法实现详细讲述这部分内容,想学习这个高大上的技能么,快来看吧!!!
5468 0
|
1月前
|
机器学习/深度学习 数据挖掘 C#
用C#实现简单的线性回归
用C#实现简单的线性回归
29 1
|
2月前
什么是线性回归
【7月更文挑战第21天】什么是线性回归。
47 2
|
2月前
|
数据可视化 Python
数学方法解决线性回归问题
【7月更文挑战第21天】数学方法解决线性回归问题
37 2
|
2月前
|
机器学习/深度学习 算法 数据挖掘
线性回归
【7月更文挑战第21天】线性回归。
33 1
|
4月前
|
机器学习/深度学习 算法 调度
多元线性回归梯度下降法
梯度下降法是一种通用的优化算法,尤其适用于机器学习中找到最优解。与解析解法不同,它不局限于特定情况,能在数据规模较大时依然有效。该方法通过迭代逐步接近最优解,每次迭代利用损失函数的梯度信息调整参数。学习率是控制参数更新幅度的关键因素,太大会导致发散,太小则收敛慢。全量梯度下降每次使用所有样本更新,收敛稳定但速度慢;随机梯度下降每次仅用一个样本,速度快但可能产生较大波动;小批量梯度下降取两者之间,以一定的样本批量进行更新,兼顾速度和稳定性。
56 1
|
4月前
R方和线性回归拟合优度
R方和线性回归拟合优度
|
机器学习/深度学习 人工智能 算法