机器学习 day04


前言

通过今天的学习,我掌握了机器学习中的线性回归的相关基本概念,包括损失函数的概念,最小二乘法的理论与算法实现。


一、线性回归的基本概念

要理解什么是线性回归,就要先理解什么是回归。

回归是通过训练带标签的样本数据得到模型参数,对连续型数据进行预测。

像这样的式子: 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ˉ=n1i=1n(yiwxib)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=n1i=1n(h(xi)yi)2=n1∣∣(XWy)2=21∣∣(XWy)2这就是最小二乘法公式∣∣A2是欧几里得范数的平方也就是每个元素的平方相加

由于我们是研究使得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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值