Auther : @ xiryg
线性回归
概念:线性回归是一种用于预测因变量(目标变量)和一个或多个自变量(特征变量)之间关系的统计方法。其假设因变量与自变量之间呈线性关系。
作用:用于预测回归问题的算法。例如预测房价、股票价格等连续值变量。
输出结果:回归系数 w 、截距 b 等。
一、线性回归模型
1. 一元线性回归
一元线性回归是最简单的线性回归模型,它只有一个自变量 x。其表达式为:
其中,w 是斜率(或叫权重),b 是截距。
2. 多元线性回归
多元线性回归扩展了一元线性回归,它包含多个自变量。其表达式为:
y=w1x1+w2x2+⋯+wdxd+b
用向量表示为:
y=wTx+b
其中,w=(w1,w2,…,wd),x=(x1,x2,…,xd)。
二、损失函数和最优化算法

在线性回归中,常用的损失函数是均方误差(Mean Squared Error, MSE)。均方误差衡量了预测值与实际值之间的差异,其公式为:
E(w,b)=i=1∑m(yi−(wTxi+b))2
最优化算法的目标是找到使损失函数最小的参数 w 和 b。基于均方误差最小化来进行模拟求解的方法称为 “最小二乘法”。在线性回归中,最小二乘法就是试图找到一条直线,使所有样本到直线上的欧氏距离之和最小。
三、最小二乘法
最小二乘法通过最小化预测值与实际值之间的平方误差来求解参数。
1. 一元线性回归的最小二乘法
对于一元线性回归,损失函数为:
E(w,b)=i=1∑m(yi−(wxi+b))2
对 w 和 b 求导得到:
∂w∂E(w,b)∂b∂E(w,b)=2(wi=1∑mxi2−i=1∑m(yi−b)xi),=2(mb−i=1∑m(yi−wxi)),
上式推导过程如下:
∂w∂E(w,b)=∂w∂[i=1∑m(yi−wxi−b)2]=i=1∑m∂w∂[(yi−wxi−b)2]=i=1∑m[2(yi−wxi−b)(−xi)]=2i=1∑m[(wxi2−yixi+bxi)]=2(wi=1∑mxi2−i=1∑myixi+bi=1∑mxi)=2(wi=1∑mxi2−i=1∑m(yi−b)xi)
∂b∂E(w,b)=∂b∂[i=1∑m(yi−wxi−b)2]=i=1∑m∂b∂[(yi−wxi−b)2]=i=1∑m[2(yi−wxi−b)(−1)]=2i=1∑m[b−yi+wxi]=2[i=1∑mb−i=1∑myi+i=1∑mwxi]=2(mb−i=1∑m(yi−wxi))
令上式为零可得到 w 和 b 最优解的闭式解:
w=∑i=1mxi2−m1(∑i=1mxi)2∑i=1myi(xi−x)
或者(下面使用的此公式):
w=∑i=1m(xi−xˉ)2∑i=1m(xi−xˉ)(yi−yˉ)
b=m1i=1∑m(yi−wxi)
或者(方便一点,使用此公式):
b=yˉ−wxˉ
1.1 计算示例(一维)
数据点如下:
先求x和y的平均值:
xˉ=3,yˉ=4
w=(1−3)2+(2−3)2+(3−3)2+(4−3)2+(5−3)2(1−3)(2−4)+(2−3)(4−4)+(3−3)(5−4)+(4−3)(4−4)+(5−3)(5−4)=106=0.6
b=4−0.6×3=2.2
因此,最佳拟合直线为:y=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. 多元线性回归的最小二乘法
把 w 和 b 吸收入向量形式 w^=(w;b):
X=x11x21⋮xm1x12x22⋮xm2……⋱…x1dx2d⋮xmd11⋮1=x1Tx2T⋮xmT11⋮1
再把标记(实际值)也写成向量形式 y=(y1;y2;…;ym) ,得到:
w^∗=argw^min(y−Xw^)T(y−Xw^)
对于多元线性回归,损失函数为:
Ew^=(y−Xw^)T(y−Xw^)
对 w^ 求导得到:
∂w^∂Ew^=2XT(Xw^−y)
令上式为零可得:
w^∗=(XTX)−1XTy
2.1 计算示例(高维)
在前面添加一列偏置项构建 X 和 目标变量 Y:
X=111123231,Y=354
根据公式计算 W:
W=(112123131111123231)−1112123131354≈01.001.00
因此,最佳拟合平面为:y=0+1.00x1+1.00x2
代码如下:
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∣=6
L2 范数 是向量中所有元素平方和的平方根。
如: x = [1, -2, 3]
L2(x)=12+(−2)2+32=14
2. L1、L2正则化的形式
L1 正则化: 在损失函数中添加 L1 范数项 λ∥w∥1
L2 正则化: 在损失函数中添加 L2 范数项 λ∥w∥22
五、Ridge回归和Lasso回归
5.1 Ridge回归
损失函数:
ERidge(w,b)=i=1∑m(yi−(wTxi+b))2+λj=1∑dwj2
其中, λ 是正则化参数,用于控制正则化项的强度。
计算方法:
Ridge回归的闭式解:
w^∗=(XTX+λI)−1XTy
代码实现:
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]}")
当 λ 趋近于 0 时,Ridge 回归的解会趋向于普通的最小二乘法,也就是和前面的最小二乘法结果相近。
5.2 Lasso回归
损失函数 :
ELasso(w,b)=i=1∑m(yi−(wTxi+b))2+λj=1∑d∣wj∣
λ 是正则化参数
计算方法 :
其无闭式解,常用梯度下降法(但是不考代码?所以略 ),坐标下降法(没讲过)🤣🤣🤣
逻辑斯蒂回归
可见:对数几率回归
概念:
逻辑斯蒂回归(Logistic Regression),尽管名字中包含“回归”,但它主要用于分类任务。它通过使用线性回归模型的输出逼近真实标记的对数几率。
作用 :
- 预测:用于预测一个实例属于某个类别的概率。
- 分类:根据预测的概率将实例分类到最可能的类别。
输出结果:
逻辑斯蒂回归的输出是一个介于0和1之间的概率值,表示某个实例属于正类(通常是1)的概率。通常,会设定一个阈值(如0.5),如果预测概率大于这个阈值,则预测为正类,否则预测为负类。
一、逻辑斯蒂回归模型
y=1+e−(wTx+b)1
二、损失函数和最优化算法
二元交叉熵(对数损失函数):
E(w,b)=−i=1∑m[yiln(y^i)+(1−yi)ln(1−y^i)]
优化算法:梯度下降法
梯度下降法
梯度下降是一种迭代优化算法,用于寻找函数的最小值。它基于函数梯度的反方向进行迭代更新,逐步逼近最小值点。
一、基本概念
- 目标函数: 希望最小化的函数,通常表示为损失函数,用于衡量模型预测值与真实值之间的差异。
- 梯度: 函数在某一点的梯度是一个向量,指向函数值增长最快的方向。
- 学习率: 控制每次迭代更新的步长,过大容易导致震荡,过小则收敛速度慢。
二、不同梯度下降的特点
| 类型 | 特点 | 优点 | 缺点 |
|---|
| 批量梯度下降 (BGD) | 每次迭代使用所有训练数据计算梯度 | 稳定收敛,可找到全局最优解(对于凸函数) | 计算量大,内存占用高 |
| 随机梯度下降 (SGD) | 每次迭代随机选择一个样本计算梯度 | 计算速度快,适用于大规模数据集 | 收敛过程波动较大,可能陷入局部最优解 |
| 小批量梯度下降 (MBGD) | 每次迭代使用一小批数据计算梯度 | 兼顾了 BGD 和 SGD 的优点,收敛速度较快,且较为稳定 | 需要选择合适的批量大小 |
交叉验证
1. k折交叉验证(k-fold cross-validation)
- 这种方法将数据集 D 划分为 k 个大小相似的互斥子集。每个子集 Di 都通过分层采样从 D 中获得,以保持数据分布的一致性。
- 每次将其中一个子集作为测试集,其余的 k−1 个子集合并作为训练集。
- 这个过程重复 k 次,每次使用不同的子集作为测试集,最终评估模型的性能是通过 k 次测试结果的均值来确定的。


2. 留一法(Leave-One-Out, LOO)
- 当数据集 D 包含 m 个样本时,如果令 k=m ,就会得到留一法,即每次训练都使用 m−1 个样本作为训练集,剩下的一个样本作为测试集。
- 留一法不受随机样本划分方式的影响,因为每个样本都被单独用作测试集一次。
- 留一法的评估结果通常被认为比较准确,因为它确保了每个样本都被用作测试数据,从而减少了评估偏差。
3. 重要性
- 减少过拟合:交叉验证通过在多个子集上训练和测试模型,减少了模型对特定训练数据的过度拟合。
- 评估稳定性:通过多次迭代,交叉验证提供了模型性能的更稳定和可靠的估计。
- 样本利用效率:在样本量有限的情况下,交叉验证允许每个样本都被用作训练和测试,从而更有效地利用数据。
- 算法选择和调参:交叉验证提供了一个比较不同模型和参数设置性能的方法,有助于选择最佳的模型和参数。
监督学习与无监督学习
概念:
区别与联系:
| 特征 | 监督学习 | 无监督学习 |
|---|
| 数据集 | 已标记 | 未标记 |
| 目标 | 预测或分类 | 发现数据结构或模式 |
| 典型任务 | 分类、回归等 | 聚类、降维等 |
| 联系 | 监督学习可以作为无监督学习的预处理步骤 | 无监督学习可以为监督学习提供特征工程的帮助 |
防止过拟合的手段
过拟合的原因包括算法的学习能力过强、一些假设条件(如样本独立同分布)可能不成立、以及训练样本过少等.
手段:
- 早停止:在训练过程中,如果发现模型性能在多次迭代后没有显著提高,可以选择停止训练,以防止模型过度拟合训练数据。
- 正则化:通过引入L1(Lasso)或L2(Ridge)正则化项,限制模型的复杂度,从而降低过拟合的风险。
- 数据集扩增:可以通过增加原有数据、对数据加随机噪声或进行重采样来扩充数据集,提高模型的泛化能力。
- 交叉验证:使用k折交叉验证的方法,可以有效评估模型的性能,并选择合适的模型复杂度。
- 特征选择/特征降维:通过选择重要特征或降维,减少模型的复杂度。
- 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 算法,主要针对初始质心选择的问题。
聚类中心距离越远越好,符合直觉。
初始中心选择的均匀分布:尽量选择距离较远的数据点作为初始簇中心,以提高聚类的效果和收敛速度。
概率选择:以距离的平方作为权重进行选择,保证选择的点能够覆盖数据分布的广泛性。
算法步骤:
- 从数据集中随机选择一个点作为第一个质心。
- 对于数据集中的每个点,计算它与当前已选择质心的最近距离。
- 以距离的平方作为权重,按照概率分布随机选择下一个质心。
- 重复步骤2和3,直到选择了 K 个质心。
- 使用选定的初始质心运行 K-means 算法。
查准率和查全率
略,看作业。
归一化
一、十进制缩放归一化
十进制缩放归一化通过移动小数点的位置来缩放数据。其公式为:
x′=10jx
其中,j 是一个整数,满足:
max(∣x′∣)<1
即,将数据缩放到 [-1, 1] 的范围内。
二、最大最小归一化
最大最小归一化将数据缩放到 [0, 1] 或 [-1, 1] 的范围内。其公式为:
x′=max(x)−min(x)x−min(x)
其中,min(x) 和 max(x) 分别为数据集的最小值和最大值。
总结
😆 😊 😃 🤣 😋 😍 😅 😎 😜 😆
🤣🤣🤣🤣🤣😇😇🤣🤣😇😇😇😇😇😇😇😇😇🤣🤣🤣
寄
参考文献: