文章目录
- 前言
- 一、线性回归的基本概念
- 二、损失函数
- 三、最小二乘法
前言
通过今天的学习,我掌握了机器学习中的线性回归的相关基本概念,包括损失函数的概念,最小二乘法的理论与算法实现。
一、线性回归的基本概念
要理解什么是线性回归,就要先理解什么是回归。
回归是通过训练带标签的样本数据得到模型参数,对连续型数据进行预测。
像这样的式子: y = w x + b y=wx+b y=wx+b就是一个线性回归模型,在实际的应用场景中往往不能找到某一个方程满足所有特征,这时我们就需要使用计算机根据实际的数据求解得到最优(也就是最接近真实值)的方程式作为模型完成预测任务。
例如,如果我们将数据描绘在坐标轴上:
线性回归的任务就是找到一条最佳直线拟合所有点。
二、损失函数
我们想通过线性回归,找到一条最优的直线拟合所有数据,有许多方式确定这条最优直线,这里我们使用损失函数进行评估。
对于线性回归而言,我们使用均方误差作为损失函数,即实际数据点数据到拟合直线的竖直距离的平方再求和。用公式可以表达为:
e ˉ = 1 n ∑ i = 1 n ( y i − w x i − b ) 2 \bar e = \frac{1}{n} \textstyle\sum_{i=1}^{n}(y_{i}-w x_{i} - b)^{2} eˉ=n1∑i=1n(yi−wxi−b)2
其中,每一个w值都会对应一个loss,我们要求的即是使得loss最小时的w值。
如果只有单个特征参数w,我们可以使用以前学习过的数学方法,如韦达定理,求导等直接解出;但如果有多个w值,我们就需要使用最小二乘法和梯度下降的思想进行求解了。
要推导接下来的最小二乘法和梯度下降,需要结合矩阵求导和矩阵除法的公式:
三、最小二乘法
假设一共有多个特征,即组成损失函数的是一个多元二次方程,即:
h ( x ) = w 1 x 1 + w 2 x 2 + w 3 x 3 + w 4 x 4 + w 5 x 5 + w 6 x 6 + w 7 x 7 + w 8 x 8 + w 0 x 0 h(x)=w_1x_1+w_2x_2+w_3x_3+w_4x_4+w_5x_5+w_6x_6+w_7x_7+w_8x_8+w_0x_0 h(x)=w1x1+w2x2+w3x3+w4x4+w5x5+w6x6+w7x7+w8x8+w0x0
l o s s = [ ( h 1 ( x ) − y 1 ) 2 + ( h 2 ( x ) − y 2 ) 2 + . . . ( h n ( x ) − y n ) 2 ] / n = 1 n ∑ i = 1 n ( h ( x i ) − y i ) 2 = 1 n ∣ ∣ ( X W − y ) ∣ ∣ 2 = 1 2 ∣ ∣ ( X W − y ) ∣ ∣ 2 这就是最小二乘法公式 ∣ ∣ A ∣ ∣ 2 是欧几里得范数的平方 也就是每个元素的平方相加 loss=[(h_1(x)-y_1)^2+(h_2(x)-y_2)^2+...(h_n(x)-y_n)^2]/n\\=\frac{1}{n} \textstyle\sum_{i=1}^{n}(h(x_{i})-y_{i})^{2}\\=\frac{1}{n}||(XW-y)||^2\\=\frac{1}{2}||(XW-y)||^2 这就是最小二乘法公式 \\ ||A||^2 是欧几里得范数的平方\,也就是每个元素的平方相加 loss=[(h1(x)−y1)2+(h2(x)−y2)2+...(hn(x)−yn)2]/n=n1∑i=1n(h(xi)−yi)2=n1∣∣(XW−y)∣∣2=21∣∣(XW−y)∣∣2这就是最小二乘法公式∣∣A∣∣2是欧几里得范数的平方也就是每个元素的平方相加
由于我们是研究使得loss最小时的w值而非关心loss具体的值,所以我们将n改为2,这可以便于后续求导运算。
接下来,我们对loss的矩阵形式进行化简和求导(此处不再赘述),最终可以得到最后可以得到w值组成的矩阵W:
W = ( X T X ) − 1 X T y W=(X^TX)^{-1}X^Ty W=(XTX)−1XTy
通过以上的式子,我们可以精确地求出每一个w值,我们将这种方法称为最小二乘法。
API用法:sklearn.linear_model.LinearRegression()
- 该函数返回模型的参数和偏置项,即coef_,intercept_
# 线性回归(最小二乘法)
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=True) # 可指定偏置项
model.fit(x,y)x_new=[[0,14,8,0,5,-2,9,-3]]
w = model.coef_
b = model.intercept_
# y_pred = model.predict(x_new)
# y_pred = w@x_new.T + b
y_pred = np.sum(w*x_new) + b
print(y_pred)
tips:由于该模型使用最小二乘法,需要进行逆矩阵的计算,在计算机中逆矩阵的运算会消耗大量的算力和内存空间,所以在实际应用中我们使用接下来介绍的梯度下降来求解参数。
THE END