ML Final Review

86 阅读3分钟

Auther : @ xiryg

线性回归

概念:线性回归是一种用于预测因变量(目标变量)和一个或多个自变量(特征变量)之间关系的统计方法。其假设因变量与自变量之间呈线性关系。

作用:用于预测回归问题的算法。例如预测房价、股票价格等连续值变量。

输出结果:回归系数 ww 、截距 bb 等。

一、线性回归模型

1. 一元线性回归

一元线性回归是最简单的线性回归模型,它只有一个自变量 xx。其表达式为:

y=wx+by = wx + b

其中,ww 是斜率(或叫权重),bb 是截距。

2. 多元线性回归

多元线性回归扩展了一元线性回归,它包含多个自变量。其表达式为:

y=w1x1+w2x2++wdxd+by = w_1 x_1 + w_2 x_2 + \cdots + w_d x_d + b

用向量表示为:

y=wTx+by = \mathbf{w}^T \mathbf{x} + b

其中,w=(w1,w2,,wd)\mathbf{w} = (w_1, w_2, \ldots, w_d)x=(x1,x2,,xd)\mathbf{x} = (x_1, x_2, \ldots, x_d)

二、损失函数和最优化算法

在线性回归中,常用的损失函数是均方误差(Mean Squared Error, MSE)。均方误差衡量了预测值与实际值之间的差异,其公式为:

E(w,b)=i=1m(yi(wTxi+b))2E(\mathbf{w}, b) = \sum_{i=1}^m (y_i - (\mathbf{w}^T \mathbf{x}_i + b))^2

最优化算法的目标是找到使损失函数最小的参数 w\mathbf{w}bb。基于均方误差最小化来进行模拟求解的方法称为 “最小二乘法”。在线性回归中,最小二乘法就是试图找到一条直线,使所有样本到直线上的欧氏距离之和最小。

三、最小二乘法

最小二乘法通过最小化预测值与实际值之间的平方误差来求解参数。

1. 一元线性回归的最小二乘法

对于一元线性回归,损失函数为:

E(w,b)=i=1m(yi(wxi+b))2E_{(w, b)} = \sum_{i=1}^{m} (y_i - (wx_i + b))^2

wwbb 求导得到:

E(w,b)w=2(wi=1mxi2i=1m(yib)xi),E(w,b)b=2(mbi=1m(yiwxi)),\begin{aligned} \frac{\partial E_{(w, b)}}{\partial w} &= 2 \left( w \sum_{i=1}^m x_i^2 - \sum_{i=1}^m (y_i - b)x_i \right), \\ \frac{\partial E_{(w, b)}}{\partial b} &= 2 \left( mb - \sum_{i=1}^m (y_i - wx_i) \right), \end{aligned}

上式推导过程如下:

E(w,b)w=w[i=1m(yiwxib)2]=i=1mw[(yiwxib)2]=i=1m[2(yiwxib)(xi)]=2i=1m[(wxi2yixi+bxi)]=2(wi=1mxi2i=1myixi+bi=1mxi)=2(wi=1mxi2i=1m(yib)xi)\begin{aligned} \frac{\partial E_{(w, b)}}{\partial w} &= \frac{\partial}{\partial w} \left[ \sum_{i=1}^m (y_i - wx_i - b)^2 \right] \\ &= \sum_{i=1}^m \frac{\partial}{\partial w} \left[ (y_i - wx_i - b)^2 \right] \\ &= \sum_{i=1}^m \left[ 2(y_i - wx_i - b)(-x_i) \right] \\ &= 2 \sum_{i=1}^m \left[ (wx_i^2 - y_i x_i + bx_i) \right] \\ &= 2 \left( w \sum_{i=1}^m x_i^2 - \sum_{i=1}^m y_i x_i + b \sum_{i=1}^m x_i \right) \\ &= 2 \left( w \sum_{i=1}^m x_i^2 - \sum_{i=1}^m (y_i - b) x_i \right) \end{aligned}
E(w,b)b=b[i=1m(yiwxib)2]=i=1mb[(yiwxib)2]=i=1m[2(yiwxib)(1)]=2i=1m[byi+wxi]=2[i=1mbi=1myi+i=1mwxi]=2(mbi=1m(yiwxi))\begin{aligned} \frac{\partial E_{(w, b)}}{\partial b} &= \frac{\partial}{\partial b} \left[ \sum_{i=1}^m (y_i - wx_i - b)^2 \right] \\ &= \sum_{i=1}^m \frac{\partial}{\partial b} \left[ (y_i - wx_i - b)^2 \right] \\ &= \sum_{i=1}^m \left[ 2(y_i - wx_i - b)(-1) \right] \\ &= 2 \sum_{i=1}^m \left[ b - y_i + wx_i \right] \\ &= 2 \left[ \sum_{i=1}^m b - \sum_{i=1}^m y_i + \sum_{i=1}^m wx_i \right] \\ &= 2 \left( mb - \sum_{i=1}^m (y_i - wx_i) \right) \end{aligned}

令上式为零可得到 wwbb 最优解的闭式解:

w=i=1myi(xix)i=1mxi21m(i=1mxi)2w = \frac{\sum_{i=1}^m y_i (x_i - \overline{x})}{\sum_{i=1}^m x_i^2 - \frac{1}{m} \left( \sum_{i=1}^m x_i \right)^2}

或者(下面使用的此公式): w=i=1m(xixˉ)(yiyˉ)i=1m(xixˉ)2w = \frac{\sum_{i=1}^{m}(x_i - \bar{x})(y_i - \bar{y})}{\sum_{i=1}^{m}(x_i - \bar{x})^2}


b=1mi=1m(yiwxi)b = \frac{1}{m} \sum_{i=1}^m (y_i - wx_i)

或者(方便一点,使用此公式):

b=yˉwxˉb = \bar{y} - w\bar{x}

1.1 计算示例(一维)

数据点如下:

xy
12
24
35
44
55

先求x和y的平均值:

xˉ=3,yˉ=4\bar{x} = 3, \bar{y} = 4
w=(13)(24)+(23)(44)+(33)(54)+(43)(44)+(53)(54)(13)2+(23)2+(33)2+(43)2+(53)2=610=0.6w = \frac{(1-3)(2-4) + (2-3)(4-4) + (3-3)(5-4) + (4-3)(4-4) + (5-3)(5-4)}{(1-3)^2 + (2-3)^2 + (3-3)^2 + (4-3)^2 + (5-3)^2} = \frac{6}{10} = 0.6
b=40.6×3=2.2b = 4 - 0.6 \times 3 = 2.2

因此,最佳拟合直线为:y=0.6x+2.2y = 0.6x + 2.2

代码如下:

import numpy as np

def least_squares(x, y):
    x_mean = np.mean(x)
    y_mean = np.mean(y)
    w = np.sum((x - x_mean) * (y - y_mean)) / np.sum((x - x_mean)**2)
    b = y_mean - w * x_mean
    return w, b

x = np.array([1, 2, 3, 4, 5])
y = np.array([2, 4, 5, 4, 5])

w, b = least_squares(x, y)

print(f"斜率 (w): {w}")
print(f"截距 (b): {b}")

2. 多元线性回归的最小二乘法

wwbb 吸收入向量形式 w^=(w;b)\hat{\mathbf{w}} = (\mathbf{w}; b)

X=(x11x12x1d1x21x22x2d1xm1xm2xmd1)=(x1T1x2T1xmT1)\mathbf{X} = \begin{pmatrix} x_{11} & x_{12} & \ldots & x_{1d} & 1 \\ x_{21} & x_{22} & \ldots & x_{2d} & 1 \\ \vdots & \vdots & \ddots & \vdots & \vdots \\ x_{m1} & x_{m2} & \ldots & x_{md} & 1 \end{pmatrix} = \begin{pmatrix} \mathbf{x}_1^\mathrm{T} & 1 \\ \mathbf{x}_2^\mathrm{T} & 1 \\ \vdots & \vdots \\ \mathbf{x}_m^\mathrm{T} & 1 \end{pmatrix}

再把标记(实际值)也写成向量形式 y=(y1;y2;;ym)\boldsymbol{y}=(y_{1};y_{2};\ldots;y_{m}) ,得到:

w^=argminw^(yXw^)T(yXw^)\hat{\mathbf{w}}^* = \arg\min_{\hat{\mathbf{w}}} \left( \mathbf{y} - \mathbf{X} \hat{\mathbf{w}} \right)^\mathrm{T} \left( \mathbf{y} - \mathbf{X} \hat{\mathbf{w}} \right)

对于多元线性回归,损失函数为:

Ew^=(yXw^)T(yXw^)E_{\hat{\mathbf{w}}} = (\mathbf{y} - \mathbf{X} \hat{\mathbf{w}})^\mathrm{T} \left( \mathbf{y} - \mathbf{X} \hat{\mathbf{w}} \right)

w^\hat{\mathbf{w}} 求导得到:

Ew^w^=2XT(Xw^y)\frac{\partial E_{\hat{\mathbf{w}}}}{\partial \hat{\mathbf{w}}} = 2 \mathbf{X}^\mathrm{T} \left( \mathbf{X} \hat{\mathbf{w}} - \mathbf{y} \right)

令上式为零可得:

w^=(XTX)1XTy\hat{\mathbf{w}}^* = \left( \mathbf{X}^\mathrm{T} \mathbf{X} \right)^{-1} \mathbf{X}^\mathrm{T} \mathbf{y}

2.1 计算示例(高维)

特征1特征2目标变量
123
235
314

在前面添加一列偏置项构建 XX 和 目标变量 YY

X=[112123131],Y=[354]X = \begin{bmatrix} 1 & 1 & 2 \\ 1 & 2 & 3 \\ 1 & 3 & 1 \end{bmatrix}, Y = \begin{bmatrix} 3 \\ 5 \\ 4 \end{bmatrix}

根据公式计算 WW

W=([111123231][112123131])1[111123231][354][01.001.00]W = (\begin{bmatrix} 1 & 1 & 1 \\ 1 & 2 & 3 \\ 2 & 3 & 1 \end{bmatrix}\begin{bmatrix} 1 & 1 & 2 \\ 1 & 2 & 3 \\ 1 & 3 & 1 \end{bmatrix})^{-1}\begin{bmatrix} 1 & 1 & 1 \\ 1 & 2 & 3 \\ 2 & 3 & 1 \end{bmatrix}\begin{bmatrix} 3 \\ 5 \\ 4 \end{bmatrix} \approx \begin{bmatrix} 0 \\ 1.00 \\ 1.00 \end{bmatrix}

因此,最佳拟合平面为:y=0+1.00x1+1.00x2y = 0 + 1.00x_1 + 1.00x_2

代码如下:

import numpy as np

def least_squares_multi(X, Y):
    X = np.hstack((np.ones((X.shape[0], 1)), X))
    W = np.linalg.inv(X.T @ X) @ X.T @ Y
    return W

X = np.array([[1, 2], [2, 3], [3, 1]])
Y = np.array([3, 5, 4])

W = least_squares_multi(X, Y)

print(f"权重向量 (W): {W}")

四、L1、L2范数和正则化

1. L1、L2范数的计算

L1 范数 是向量中所有元素绝对值之和。

如:x = [1, -2, 3]

L1(x)=1+2+3=6L1(x) = |1| + |-2| + |3| = 6

L2 范数 是向量中所有元素平方和的平方根。

如: x = [1, -2, 3]

L2(x)=12+(2)2+32=14L_2(x) = \sqrt{1^2 + (-2)^2 + 3^2} = \sqrt{14}

2. L1、L2正则化的形式

L1 正则化: 在损失函数中添加 L1 范数项 λw1\lambda\|w\|_1

L2 正则化: 在损失函数中添加 L2 范数项 λw22\lambda\|w\|_{2}^{2}

五、Ridge回归和Lasso回归

5.1 Ridge回归

损失函数:

ERidge(w,b)=i=1m(yi(wTxi+b))2+λj=1dwj2E_{\text{Ridge}}(\mathbf{w}, b) = \sum_{i=1}^m (y_i - (\mathbf{w}^T \mathbf{x}_i + b))^2 + \lambda \sum_{j=1}^d w_j^2

其中, λ\lambda 是正则化参数,用于控制正则化项的强度。

计算方法

Ridge回归的闭式解:

w^=(XTX+λI)1XTy\hat{\mathbf{w}}^* = \left( \mathbf{X}^\mathrm{T} \mathbf{X} + \lambda \mathbf{I} \right)^{-1} \mathbf{X}^\mathrm{T} \mathbf{y}

代码实现:

import numpy as np

X = np.array([[1, 2], [2, 3], [3, 1]])
Y = np.array([3, 5, 4])

X_b = np.hstack([np.ones((X.shape[0], 1)), X])

def ridge_regression(X, y, lambda_):
    I = np.eye(X.shape[1])
    I[0, 0] = 0  # 不对偏置项进行正则化
    return np.linalg.inv(X.T @ X + lambda_ * I) @ X.T @ y

lambda_ = 1e-10
w_ridge = ridge_regression(X_b, y, lambda_)

print(f"权重 (w): {w_ridge[1:]}")
print(f"截距 (b): {w_ridge[0]}")

λ\lambda 趋近于 0 时,Ridge 回归的解会趋向于普通的最小二乘法,也就是和前面的最小二乘法结果相近。

5.2 Lasso回归

损失函数

ELasso(w,b)=i=1m(yi(wTxi+b))2+λj=1dwjE_\text{Lasso}(\mathbf{w},b)=\sum_{i=1}^m(y_i-(\mathbf{w}^T\mathbf{x}_i+b))^2+\lambda\sum_{j=1}^d|w_j|

 λ\lambda 是正则化参数

计算方法 : 其无闭式解,常用梯度下降法(但是不考代码?所以略 ),坐标下降法(没讲过)🤣🤣🤣

逻辑斯蒂回归

可见:对数几率回归

概念: 逻辑斯蒂回归(Logistic Regression),尽管名字中包含“回归”,但它主要用于分类任务。它通过使用线性回归模型的输出逼近真实标记的对数几率。

作用

  • 预测:用于预测一个实例属于某个类别的概率。
  • 分类:根据预测的概率将实例分类到最可能的类别。

输出结果: 逻辑斯蒂回归的输出是一个介于0和1之间的概率值,表示某个实例属于正类(通常是1)的概率。通常,会设定一个阈值(如0.5),如果预测概率大于这个阈值,则预测为正类,否则预测为负类。

一、逻辑斯蒂回归模型

y=11+e(wTx+b)y=\frac{1}{1+e^{-(\boldsymbol{w}^{\mathrm{T}}\boldsymbol{x}+b)}}

二、损失函数和最优化算法

二元交叉熵(对数损失函数):

E(w,b)=i=1m[yiln(y^i)+(1yi)ln(1y^i)]E(\mathbf{w},b)=-\sum_{i=1}^m\left[y_i\ln(\hat{y}_i)+(1-y_i)\ln(1-\hat{y}_i)\right]

优化算法:梯度下降法

梯度下降法

梯度下降是一种迭代优化算法,用于寻找函数的最小值。它基于函数梯度的反方向进行迭代更新,逐步逼近最小值点。

一、基本概念

  • 目标函数: 希望最小化的函数,通常表示为损失函数,用于衡量模型预测值与真实值之间的差异。
  • 梯度: 函数在某一点的梯度是一个向量,指向函数值增长最快的方向。
  • 学习率: 控制每次迭代更新的步长,过大容易导致震荡,过小则收敛速度慢。

二、不同梯度下降的特点

类型特点优点缺点
批量梯度下降 (BGD)每次迭代使用所有训练数据计算梯度稳定收敛,可找到全局最优解(对于凸函数)计算量大,内存占用高
随机梯度下降 (SGD)每次迭代随机选择一个样本计算梯度计算速度快,适用于大规模数据集收敛过程波动较大,可能陷入局部最优解
小批量梯度下降 (MBGD)每次迭代使用一小批数据计算梯度兼顾了 BGD 和 SGD 的优点,收敛速度较快,且较为稳定需要选择合适的批量大小

交叉验证

1. k折交叉验证(k-fold cross-validation)

  • 这种方法将数据集 DD 划分为 kk 个大小相似的互斥子集。每个子集 DiD_i 都通过分层采样从 DD 中获得,以保持数据分布的一致性。
  • 每次将其中一个子集作为测试集,其余的 k1k-1 个子集合并作为训练集。
  • 这个过程重复 kk 次,每次使用不同的子集作为测试集,最终评估模型的性能是通过 kk 次测试结果的均值来确定的。

2. 留一法(Leave-One-Out, LOO)

  • 当数据集 DD 包含 mm 个样本时,如果令 k=mk = m ,就会得到留一法,即每次训练都使用 m1m-1 个样本作为训练集,剩下的一个样本作为测试集。
  • 留一法不受随机样本划分方式的影响,因为每个样本都被单独用作测试集一次。
  • 留一法的评估结果通常被认为比较准确,因为它确保了每个样本都被用作测试数据,从而减少了评估偏差。

3. 重要性

  • 减少过拟合:交叉验证通过在多个子集上训练和测试模型,减少了模型对特定训练数据的过度拟合。
  • 评估稳定性:通过多次迭代,交叉验证提供了模型性能的更稳定和可靠的估计。
  • 样本利用效率:在样本量有限的情况下,交叉验证允许每个样本都被用作训练和测试,从而更有效地利用数据。
  • 算法选择和调参:交叉验证提供了一个比较不同模型和参数设置性能的方法,有助于选择最佳的模型和参数。

监督学习与无监督学习

概念:

  • 监督学习:通过对已标记的数据集进行学习,来建立一个模型,从而能够对新的、未知数据进行预测或分类。简单来说,就是让机器学习如何根据“输入”预测“输出”。

  • 无监督学习:通过对未标记的数据集进行学习,来发现数据的内在结构或模式。简单来说,就是让机器学习如何从数据中发现规律。

区别与联系:

特征监督学习无监督学习
数据集已标记未标记
目标预测或分类发现数据结构或模式
典型任务分类、回归等聚类、降维等
联系监督学习可以作为无监督学习的预处理步骤无监督学习可以为监督学习提供特征工程的帮助

防止过拟合的手段

过拟合的原因包括算法的学习能力过强、一些假设条件(如样本独立同分布)可能不成立、以及训练样本过少等. 手段:

  1. 早停止:在训练过程中,如果发现模型性能在多次迭代后没有显著提高,可以选择停止训练,以防止模型过度拟合训练数据。
  2. 正则化:通过引入L1(Lasso)或L2(Ridge)正则化项,限制模型的复杂度,从而降低过拟合的风险。
  3. 数据集扩增:可以通过增加原有数据、对数据加随机噪声或进行重采样来扩充数据集,提高模型的泛化能力。
  4. 交叉验证:使用k折交叉验证的方法,可以有效评估模型的性能,并选择合适的模型复杂度。
  5. 特征选择/特征降维:通过选择重要特征或降维,减少模型的复杂度。
  6. Hold-out方法:将数据集分为训练集和验证集,利用验证集评估模型性能,从而选择最优模型。

聚类

一、聚类的概念

聚类(Clustering)是一种无监督学习方法,旨在根据数据样本的特征相似性将其划分为多个组,每个组称为一个簇。简单来说,就是将数据分成若干组,组内数据相似,组间数据差异较大。

二、硬聚类与软聚类

硬聚类(Hard Clustering):

  • 每个数据点只能属于一个簇。
  • 每个数据点被分配到一个明确的簇。
  • 例如:K-Means 聚类

软聚类(Soft Clustering):

  • 每个数据点可以属于多个簇,但其对每个簇的隶属度不同。
  • 每个数据点被分配到多个簇的概率值,总和为 1。
  • 例如:模糊 C 均值聚类(Fuzzy C-Means)

硬聚类与软聚类的区别

特征硬聚类软聚类
数据点归属单一簇多个簇,概率分配
簇成员关系明确模糊
适用场景数据点之间差异明显,分类明确数据点之间存在模糊关系,存在中间状态
算法K-Means模糊 C 均值

三、k-means

四、K-means++

K-means++ 是一种改进的 K-means 算法,主要针对初始质心选择的问题。 聚类中心距离越远越好,符合直觉。

初始中心选择的均匀分布:尽量选择距离较远的数据点作为初始簇中心,以提高聚类的效果和收敛速度。

概率选择:以距离的平方作为权重进行选择,保证选择的点能够覆盖数据分布的广泛性。

算法步骤

  1. 从数据集中随机选择一个点作为第一个质心。
  2. 对于数据集中的每个点,计算它与当前已选择质心的最近距离。
  3. 以距离的平方作为权重,按照概率分布随机选择下一个质心。
  4. 重复步骤2和3,直到选择了 K 个质心。
  5. 使用选定的初始质心运行 K-means 算法。

查准率和查全率

略,看作业。

归一化

一、十进制缩放归一化

十进制缩放归一化通过移动小数点的位置来缩放数据。其公式为:

x=x10jx' = \frac{x}{10^j}

其中,jj 是一个整数,满足:

max(x)<1\max(|x'|) < 1

即,将数据缩放到 [-1, 1] 的范围内。

二、最大最小归一化

最大最小归一化将数据缩放到 [0, 1] 或 [-1, 1] 的范围内。其公式为:

x=xmin(x)max(x)min(x)x' = \frac{x - \min(x)}{\max(x) - \min(x)}

其中,min(x)\min(x)max(x)\max(x) 分别为数据集的最小值和最大值。


总结

😆 😊 😃 🤣 😋 😍 😅 😎 😜 😆

🤣🤣🤣🤣🤣😇😇🤣🤣😇😇😇😇😇😇😇😇😇🤣🤣🤣


参考文献: