【实用机器学习】3.3 线性模型

线性回归

举例说明线性回归 - 房价预测

  • 假设有三个特征: x 1 = x_1 = x1= #beds, x 2 = x_2 = x2= #baths, x 3 = x_3 = x3= #living sqft,
  • 假设预测值是所有输入特征的加权和: y = w 1 x 1 + w 2 x 2 + w 3 x 3 + b y=w_1 x_1+w_2 x_2+w_3 x_3+b y=w1x1+w2x2+w3x3+b
  • 权重 w 1 , w 2 , w 3 w_1,w_2,w_3 w1,w2,w3和偏移 b b b将会从训练数据中学习获得

线性回归的一般形式

一般来说,给定数据 x = [ x 1 , x 2 , … , x p ] \mathbf{x}=\left[x_1, x_2, \ldots, x_p\right] x=[x1,x2,,xp],即每个样本表示成 p p p维特征,那么线性模型就去预测

y ^ = w 1 x 1 + w 2 x 2 + … + w p x p + b = ⟨ w , x ⟩ + b \hat{y}=w_1 x_1+w_2 x_2+\ldots+w_p x_p+b=\langle\mathbf{w}, \mathbf{x}\rangle+b y^=w1x1+w2x2++wpxp+b=w,x+b

其实 w , x \mathbf{w}, \mathbf{x} w,x都是长为 p p p的向量, w \mathbf{w} w b b b都是可以学习的参数。

如果上面的式子要通过代码实现,可以写成如下形式:

# weight w has shape (p,1)
# bias b is a scalar
# data x has shape (p,1)
y_hat = (x*w).sum + b

目标函数

假设收集了 n n n个训练样本 X = [ x 1 , x 2 , … , x n ] T ∈ R n × p \mathbf{X}=\left[\mathbf{x}_1, \mathbf{x}_2, \ldots, \mathbf{x}_n\right]^T \in \mathbb{R}^{n \times p} X=[x1,x2,,xn]TRn×p X \mathbf{X} X是一个有 n n n p p p列的一个矩阵,同时 X \mathbf{X} X对应标签 y = [ y 1 , … , y n ] T ∈ R n \mathbf{y}=\left[y_1, \ldots, y_n\right]^T \in \mathbb{R}^n y=[y1,,yn]TRn

目标:最小化平均均方误差(mean square error, MSE)

w ∗ , b ∗ = argmin ⁡ w , b ℓ ( X , y , w , b ) = argmin ⁡ w , b 1 n ∑ i = 1 n ( y i − ⟨ x i , w ⟩ − b ) 2 \begin{aligned}\mathbf{w}^*, \mathbf{b}^* & =\underset{\mathbf{w}, b}{\operatorname{argmin}} \ell(\mathbf{X}, \mathbf{y}, \mathbf{w}, b) \\& =\underset{\mathbf{w}, b}{\operatorname{argmin}} \frac{1}{n} \sum_{i=1}^n\left(y_i-\left\langle\mathbf{x}_i, \mathbf{w}\right\rangle-b\right)^2\end{aligned} w,b=w,bargmin(X,y,w,b)=w,bargminn1i=1n(yixi,wb)2

线性分类

回归的输出是连续的实数,但对于分类,输出的是类别的预测。

多类别分类:

  • 如果要做多类物体的输出,我们可以做一个向量的输出,具体来说,输出可以是长为 m m m的向量,向量里的第 i i i个元素反映的是分类为第 i i i的置信度(概率),值越高表示越有可能属于这一类,越低表示越不可能。
  • 我们可以用一个线性模型 o i = ⟨ x , w i ⟩ + b i o_i=\left\langle\mathbf{x}, \mathbf{w}_i\right\rangle+b_i oi=x,wi+bi,其中 x \mathbf{x} x是数据的特征, w i \mathbf{w}_i wi是一个长为 p p p的向量,表示对应的类 i i i可以学习的参数, b i b_i bi表示这一类的偏移。那么对于类 i i i,其置信度就是 o i o_i oi。因为有 m m m各类别,所以一共有 m m m o i o_i oi
  • 标签 y = [ y 1 , y 2 , … , y m ] \mathbf{y}=\left[y_1, y_2, \ldots, y_m\right] y=[y1,y2,,ym],其中只有一个 y i = 1 y_i=1 yi=1,其余全部为 0 0 0,也就是one-hot encoding(独热编码),表示属于第 i i i类。
  • 我们要最小化均方误差(MSE) 1 m ∥ o − y ∥ 2 2 \frac{1}{m}\|\mathbf{o}-\mathbf{y}\|_2^2 m1oy22
  • 预测出来的类别就是 argmax ⁡ i { o i } i = 1 m \operatorname{argmax}_i\left\{o_i\right\}_{i=1}^m argmaxi{ oi}i=1m,表示预测结果为第 i i i类,这个 i i i要使得 o i o_i oi最大。
Untitled

Softmax回归(Softmax regression)

因为我们的目标是使得所有的 o o o y y y是一样的,但是在实际做分类的时候,我们并不关心不属于这一类的 o o o的输出,我们只希望真实类别的置信度够大够强。所以为了让我们的模型更加专注于正确类,而不关心别的类,我们提出使用softmax。

  • 首先需要把预测的分数换算成一个概率。 o i o_i oi输出是一个实数,在负无穷到正无穷之间。如果要把它转变为概率,就必须使其大于等于0,且所有概率相加为1。

y ^ = softmax ⁡ ( o )  where  y ^ i = exp ⁡ ( o i ) ∑ k = 1 m exp ⁡ ( o k ) \hat{\mathbf{y}}=\operatorname{softmax}(\mathbf{o}) \text { where } \hat{y}_i=\frac{\exp \left(o_i\right)}{\sum_{k=1}^m \exp \left(o_k\right)} y^=softmax(o) where y^i=k=1mexp(ok)exp(oi)

O_exp = torch.exp(O)
partition = O_exp.sum(1, keepdim=True)
Y = O_exp / partition

这里虽然使用了非线性的变化,但是依然是个线性模型。因为模型在做决定的时候要找的最大的 y ^ i \hat y_i y^i等价于最大的 o i o_i oi,即 argmax ⁡ i y ^ i = argmax ⁡ i o i \operatorname{argmax}_i \hat{y}_i=\operatorname{argmax}_i o_i argmaxiy^i=argmaxioi

  • 如果要比较概率 y ^ \hat y y^ y y y之间的差别,我们可以使用交叉熵(cross-entropy):

H ( y , y ^ ) = ∑ i − y i log ⁡ ( y ^ i ) = − log ⁡ y ^ y H(\mathbf{y}, \hat{\mathbf{y}})=\sum_i-y_i \log \left(\hat{y}_i\right)=-\log \hat{y}_y H(y,y^)=iyilog(y^i)=logy^y

因为其实 y i y_i yi中只有一个是1,其余全部是0,所以交叉熵能够被化简为 − log ⁡ y ^ y -\log \hat{y}_y logy^y − log ⁡ -\log log是递减函数,所以为了使交叉熵最小,就要让 y ^ y \hat{y}_y y^y最大。那么这个模型最终只关心我们在正确类别上的预测概率,对于别的值就不怎么关心。

参考资料

3.3 最简单也同样最常用的线性模型【斯坦福21秋季:实用机器学习中文版】_哔哩哔哩_bilibili

3.1. Linear Regression — Dive into Deep Learning 1.0.0-beta0 documentation

https://c.d2l.ai/stanford-cs329p/_static/pdfs/cs329p_slides_4_3.pdf

【机器学习】重新理解线性回归 - 1 - 极大似然估计_哔哩哔哩_bilibili

猜你喜欢

转载自blog.csdn.net/weixin_46421722/article/details/129667003
今日推荐