欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

线性回归的常用求解方法之最小二乘法(二):最小二乘回归的数据计算意义

程序员文章站 2024-03-07 20:49:21
...

基础知识

  • 误差ε^(i)是独立并且具有相同的分布,并且服从均值为0方差为θ2的高斯分布

  • 独立:张三和李四一起来贷款,他俩没关系

  • 同分布:他俩都来得是我们假定的这家银行

  • 高斯分布:银行可能会多给,也可能会少给,但是绝大多数情况下这个浮动不会太大,极小情况下浮动会比较大,符合正常情况

高斯分布

蓝点是薪资
线性回归的常用求解方法之最小二乘法(二):最小二乘回归的数据计算意义
用线连起来,距离越长,误差越大。

误差是服从高斯分布的

预测值与误差:
线性回归的常用求解方法之最小二乘法(二):最小二乘回归的数据计算意义
由于误差服从高斯分布:
线性回归的常用求解方法之最小二乘法(二):最小二乘回归的数据计算意义
将(1)式带入(2)式得到:
线性回归的常用求解方法之最小二乘法(二):最小二乘回归的数据计算意义
似然函数(累乘):
线性回归的常用求解方法之最小二乘法(二):最小二乘回归的数据计算意义
解释:什么样的参数跟我们的数据组合后刚好是真实值

对数似然:
线性回归的常用求解方法之最小二乘法(二):最小二乘回归的数据计算意义
解释:乘法难解,假发就容易了,对数里面乘法可以转换成加法
展开化简:
线性回归的常用求解方法之最小二乘法(二):最小二乘回归的数据计算意义
目标:让似然函数(对数变换后也一样)越大越好

线性回归的常用求解方法之最小二乘法(二):最小二乘回归的数据计算意义
(这就是最小二乘法)

目标函数:
线性回归的常用求解方法之最小二乘法(二):最小二乘回归的数据计算意义
求偏导:
线性回归的常用求解方法之最小二乘法(二):最小二乘回归的数据计算意义
偏导等于0:
线性回归的常用求解方法之最小二乘法(二):最小二乘回归的数据计算意义

代码

未知数是w
y是一个矩阵
x也是一个矩阵

y = wx

想办法让x变成单位矩阵就求出来了w
x如果是长方形矩阵
怎么变成方阵?
先转置

线性回归的常用求解方法之最小二乘法(二):最小二乘回归的数据计算意义
线性回归的常用求解方法之最小二乘法(二):最小二乘回归的数据计算意义
求解w和b

import numpy as np
X = np.array([[4000,25],
             [8000,30]])
y = np.array([[20000],
             [70000]])
from sklearn.linear_model import LinearRegression
#fit_intercept  需不需要截距=偏置项=误差
lrg = LinearRegression(fit_intercept=False).fit(X,y)

#获取 系数  和  误差
lrg.coef_,lrg.intercept_

线性回归的常用求解方法之最小二乘法(二):最小二乘回归的数据计算意义

#检验
np.dot(X, lrg.coef_.T)

线性回归的常用求解方法之最小二乘法(二):最小二乘回归的数据计算意义

#换成5个样本,验算一下
NX = np.array([[4000,25],
             [8000,30],
             [5000,28],
             [7500,33],
             [12000,40]])
np.dot(NX, lrg.coef_.T)#最后三个有很大的误差

线性回归的常用求解方法之最小二乘法(二):最小二乘回归的数据计算意义

3个样本

X = np.array([[4000,25],
             [8000,30],
             [5000,28]])
y = np.array([[20000],
             [70000],
             [35000]])
#fit_intercept  需不需要截距=偏置项=误差
lrg = LinearRegression(fit_intercept=False).fit(X,y)

#获取 系数  和  误差
lrg.coef_,lrg.intercept_

线性回归的常用求解方法之最小二乘法(二):最小二乘回归的数据计算意义

np.dot(X,lrg.coef_.T)

线性回归的常用求解方法之最小二乘法(二):最小二乘回归的数据计算意义

5个样本

X = np.array([[4000,25],
             [8000,30],
             [5000,28],
             [7500,33],
             [12000,40]])
y = np.array([[20000],
             [70000],
             [35000],
             [50000],
             [85000]])
#fit_intercept  需不需要截距=偏置项=误差
lrg = LinearRegression(fit_intercept=False).fit(X,y)

#获取 系数  和  误差
lrg.coef_,lrg.intercept_

线性回归的常用求解方法之最小二乘法(二):最小二乘回归的数据计算意义

#loss
res = np.dot(X,lrg.coef_.T)
res

线性回归的常用求解方法之最小二乘法(二):最小二乘回归的数据计算意义

res - y

线性回归的常用求解方法之最小二乘法(二):最小二乘回归的数据计算意义