目录
[1 最小二乘法MSE](#1 最小二乘法MSE)
[1.1 前景知识:矩阵相关公式](#1.1 前景知识:矩阵相关公式)
[1.2 最小二乘法](#1.2 最小二乘法)
[1.3 API](#1.3 API)
[1.4 示例代码](#1.4 示例代码)
1 最小二乘法MSE
x1 | x2 | x3 | x4 | x5 | x6 | x7 | x8 | x0 | y |
---|---|---|---|---|---|---|---|---|---|
0 | 14 | 8 | 0 | 5 | -2 | 9 | -3 | 1 | 339 |
-4 | 10 | 6 | 4 | -14 | -2 | -14 | 8 | 1 | -114 |
-1 | -6 | 5 | -12 | 3 | -3 | 2 | -2 | 1 | 30 |
5 | -2 | 3 | 10 | 5 | 11 | 4 | -8 | 1 | 126 |
-15 | -15 | -8 | -15 | 7 | -4 | -12 | 2 | 1 | -395 |
11 | -10 | -2 | 4 | 3 | -9 | -6 | 7 | 1 | -87 |
-14 | 0 | 4 | -3 | 5 | 10 | 13 | 7 | 1 | 422 |
-3 | -7 | -2 | -8 | 0 | -6 | -5 | -9 | 1 | -309 |
1.1 前景知识:矩阵相关公式

1.2 最小二乘法
这就是最小二乘法公式,是欧几里得范数的平方,也就是每个元素的平方相加
虽然这个案例中n=8,但是常常令n=2,因为是一个常数 求最小值时n随便取哪个正数都不会影响W结果,但是求导过程可以约掉前面的系数,会加速后面的计算
表示
第1行分别和W相乘
表示
第2行分别和W相乘
高斯把公式给了,但是何时loss最小呢?
1.二次方程导数为0时最小
求导:
2.先展开矩阵乘法:
3.进行求导(注意X,y都是已知的,W是未知的)
4.令导数loss'=0
5.矩阵没有除法,使用逆矩阵转化
第二种方式链式求导(推荐,因为后期深度学习全是这种):
内部函数是,外部函数是
,其中
。
外部函数的导数:
内部函数的导数:
应用链式法则,我们得到最终的梯度:
有了W,回到最初的问题:
求如果karen的各项指标是:
被爱:11 学习指数:14 抗压指数:8 运动指数:10 饮食水平:5 金钱:10 权利:8 压力:1
那么karen的健康程度是多少?
分别用W各项乘以新的X 就可以得到y健康程度
1.3 API
sklearn.linear_model.LinearRegression()
功能: 普通最小二乘法线性回归, 权重和偏置是直接算出来的,对于数量大的不适用,因为计算量太大,计算量太大的适合使用递度下降法
参数:
fit_intercept bool, default=True
是否计算此模型的截距(偏置)。如果设置为False,则在计算中将不使用截距(即,数据应中心化)。
属性:
coef_ 回归后的权重系数
intercept_ 偏置
print("权重系数为:\n", estimator.coef_) #权重系数与特征数一定是同样的个数。
print("偏置为:\n", estimator.intercept_)
1.4 示例代码
python
from sklearn.linear_model import LinearRegression
import numpy as np
data=np.array([[0,14,8,0,5,-2,9,-3,399],
[-4,10,6,4,-14,-2,-14,8,-144],
[-1,-6,5,-12,3,-3,2,-2,30],
[5,-2,3,10,5,11,4,-8,126],
[-15,-15,-8,-15,7,-4,-12,2,-395],
[11,-10,-2,4,3,-9,-6,7,-87],
[-14,0,4,-3,5,10,13,7,422],
[-3,-7,-2,-8,0,-6,-5,-9,-309]])
x,y = data[:,:-1],data[:,-1]
model = LinearRegression(fit_intercept=False) #不计算偏置项 b=0
model.fit(x, y)
print("偏置系数,w向量:",model.coef_)
print("偏置项:",model.intercept_)
w = model.coef_
b = model.intercept_s
x = [[0,14,8,0,5,-2,9,-3]]
y_pred = model.predict(x)#x@w.T+b#np.sum(w*x)+b
print("预测值:",y_pred)
输出结果:
python
偏置系数,w向量: [ 3.41704677 9.64733333 9.96900258 0.49065266 10.67072206 4.50852922
17.60894156 12.27111727]
偏置项: 18.18163864119797
预测值: [399.]