这个是关于我看李航的统计学习方法的一些记录,以防我看完就忘.
第一章统计学习及监督学习概论
-
什么是统计学习
就是基于数据建构一个概率统计模型并对数据进行一个预测.
-
统计学习的对象
其实就是数据,只不过这些数据的来源是多种多样的,比如文字,图像,视频,音频数据或者是它们的组合,关于数据的有一个基本假设就是迷人同类数据具有共同的性质的数据,比如说英文的文章,网页之类的.由于它们具有统计的规律性.所以可以用概率统计方法去处理它们.
统计学习方法的三要素
方法 = 模型+策略+算法
-
模型 就是学习什么样的模型.其实就是模型的假设空间所包含的所有函数的集合.
-
策略 就是按照什么样的学习准则,也就是如何选择一个最佳模型.进而衍生出损失函数与风险函数预测的好坏..损失函数度量的是模型一次预测的好坏,风险函数度量平均意义下模型预测的好坏.
-
算法 指的就是学习模型的具体计算方法.统计学习基于训练数据集,根据学习策略,从假设空间中选择最优模型.也就是寻找最优解.
过拟合与模型选择
当假设空间有不同的复杂度(例如:不同参数个数)的模型的时候,就要面临模型选择问题,我们当然是希望选择一个或者学习一个合适的模型.如果当假设空间中存在着一个"真"模型时,那么选择或者学习的模型应当要逼近这个真实的模型,也就是模型的参数向量与真模型的参数向量相近.如果是一味提高对训练数据的预测能力,所选模型的复杂度往往会比真实模型来得要高,这种现象就称之为过拟合.
正则化与交叉验证
交叉验证,随机将数据集分成三个部分,分别为训练集,验证集,测试集.训练集即为训练模型,验证集用于模型选择,测试用于对学习模型的评估.
感知机
感知机的这个东西起源很早,在1957年就已经提出了,但是它的分类模型在大多数时候泛化能力不强,但是原理简单,但是它是学习神经网络和深度学习的一个起点.
-
感知机的模型 感知机的模型思想很简单,就是用于一个分类问题,也就是说将一堆东西,简单的分成两类,我这里举一个例子就是比如说,在一个广场上站着很多人,然后我们拿一条直线将男人和女人分开,这里可能有人会问,如果找不到怎么办?这个也就是说这个类别是线性不可分的,也就是说感知机模型并不适用.感知机模型的使用的一大前提就是这个东西是线性可分的才行.这个也就极大限制了感知机的使用场景.
用数学的语言来说其实就是,有M个样本,每个样本对应着一个n维特征和一个二元输出,如下: $(x_1^0,x_2^0,x_3^0,…,x_n^0,y_0),(x_1^1,x_2^1,x_3^1,…,x_n^1,y_1),…,到n$
我们的一个目标其实就是找到一个超平面,即: $\theta_0+\theta_1x_1+…+\theta_nx_n = 0$ 让其中的一个类别都满足$\theta_0+\theta_1x_1+…+\theta_nx_n>0$ 或让其中一个$<0$,为了可以简化这种写法,我们其实可以加一个特征$x_0=1$,这样也就是$\sum_{i=0}^n\theta_ix_i=0$,其实用向量来表示就是$\theta \cdot x = 0$,而向量机的模型我们可以表示为, y = sign($\theta \cdot x$).
$$ sign(x) = \begin{cases} -1 & x < 0 \\ 1 & x \geq 0 \end{cases} $$ -
感知机的损失函数 我们这个损失函数其实就是为了优化模型,感知机的损失函数它的优化目标就是期望使所有错误分类的样本到超平面的距离之和最小.
逻辑回归
逻辑回归(Logistic Regression)是统计学习中的经典分类算法,虽然名字中有"回归",但它实际上是一种分类方法。它通过logistic函数将线性回归的输出映射到(0,1)区间,从而实现概率预测。
1. 逻辑回归的基本思想
逻辑回归的核心思想是:
- 使用sigmoid函数将线性函数的输出映射到概率值
- 通过最大似然估计来求解参数
- 适用于二分类和多分类问题
与线性回归不同,逻辑回归不是直接预测连续值,而是预测某个事件发生的概率。
2. 逻辑回归的数学模型
2.1 Sigmoid函数
Sigmoid函数(也称为logistic函数)定义为:
$$\sigma(z) = \frac{1}{1 + e^{-z}}$$其中 $z = \theta_0 + \theta_1x_1 + \theta_2x_2 + … + \theta_nx_n = \theta^T x$
Sigmoid函数具有以下重要性质:
- 函数值域为(0,1),可以表示概率
- 单调递增
- 在z=0处,$\sigma(0) = 0.5$
- 当z→+∞时,$\sigma(z)→1$;当z→-∞时,$\sigma(z)→0$
2.2 逻辑回归模型
对于二分类问题,逻辑回归模型表示为:
$$P(Y=1|x) = \frac{1}{1 + e^{-\theta^T x}}$$$$P(Y=0|x) = 1 - P(Y=1|x) = \frac{e^{-\theta^T x}}{1 + e^{-\theta^T x}}$$
3. 几率(Odds)与对数几率(Log-Odds)
3.1 几率
几率定义为事件发生的概率与不发生概率的比值:
$$odds = \frac{P(Y=1|x)}{P(Y=0|x)} = \frac{P(Y=1|x)}{1-P(Y=1|x)}$$3.2 对数几率(Logit)
对数几率是几率的对数:
$$logit(p) = \ln\left(\frac{p}{1-p}\right) = \theta^T x$$这说明逻辑回归实际上是在对对数几率进行线性建模。
4. 参数估计:最大似然估计
4.1 似然函数
给定训练集 ${(x_i, y_i)}_{i=1}^m$,其中 $y_i \in {0,1}$,似然函数为:
$$L(\theta) = \prod_{i=1}^m P(y_i|x_i;\theta)$$具体地:
$$L(\theta) = \prod_{i=1}^m [P(Y=1|x_i)]^{y_i} [P(Y=0|x_i)]^{1-y_i}$$4.2 对数似然函数
取对数得到对数似然函数:
$$\ell(\theta) = \sum_{i=1}^m [y_i \log P(Y=1|x_i) + (1-y_i) \log P(Y=0|x_i)]$$代入sigmoid函数:
$$\ell(\theta) = \sum_{i=1}^m [y_i \theta^T x_i - \log(1 + e^{\theta^T x_i})]$$4.3 梯度计算
对$\theta$求偏导:
$$\frac{\partial \ell(\theta)}{\partial \theta} = \sum_{i=1}^m (y_i - \sigma(\theta^T x_i))x_i$$由于对数似然函数是凹函数,可以使用梯度上升法或牛顿法求解最优参数。
5. 损失函数:交叉熵损失
逻辑回归的损失函数通常使用交叉熵损失(Cross-Entropy Loss):
$$J(\theta) = -\frac{1}{m}\sum_{i=1}^m [y_i \log h_\theta(x_i) + (1-y_i) \log(1-h_\theta(x_i))]$$其中 $h_\theta(x_i) = \sigma(\theta^T x_i)$ 是预测概率。
6. 优化算法
6.1 梯度下降法详细推导
梯度下降法是通过迭代优化来最小化损失函数的方法。下面详细推导逻辑回归中梯度下降的计算过程。
6.1.1 损失函数回顾
逻辑回归的损失函数(交叉熵损失)为:
$$J(\theta) = -\frac{1}{m}\sum_{i=1}^m [y_i \log h_\theta(x_i) + (1-y_i) \log(1-h_\theta(x_i))]$$其中:
- $h_\theta(x_i) = \sigma(\theta^T x_i) = \frac{1}{1 + e^{-\theta^T x_i}}$ 是预测概率
- $m$ 是训练样本数量
- $y_i \in {0,1}$ 是真实标签
6.1.2 梯度计算的详细推导
我们需要计算 $\frac{\partial J(\theta)}{\partial \theta_j}$,其中 $\theta_j$ 是参数向量 $\theta$ 的第 $j$ 个分量。
步骤1:单个样本的损失函数梯度
对于单个样本 $(x_i, y_i)$,损失函数为:
$$J_i(\theta) = -[y_i \log h_\theta(x_i) + (1-y_i) \log(1-h_\theta(x_i))]$$首先计算 $\frac{\partial h_\theta(x_i)}{\partial \theta_j}$:
$$\frac{\partial h_\theta(x_i)}{\partial \theta_j} = \frac{\partial}{\partial \theta_j} \sigma(\theta^T x_i) = \frac{\partial}{\partial \theta_j} \frac{1}{1 + e^{-\theta^T x_i}}$$使用链式法则:
$$\frac{\partial h_\theta(x_i)}{\partial \theta_j} = \frac{\partial \sigma(z)}{\partial z} \cdot \frac{\partial z}{\partial \theta_j}$$其中 $z = \theta^T x_i$,所以 $\frac{\partial z}{\partial \theta_j} = x_{ij}$
Sigmoid函数的导数为:
$$\frac{\partial \sigma(z)}{\partial z} = \sigma(z)(1-\sigma(z)) = h_\theta(x_i)(1-h_\theta(x_i))$$因此:
$$\frac{\partial h_\theta(x_i)}{\partial \theta_j} = h_\theta(x_i)(1-h_\theta(x_i)) \cdot x_{ij}$$步骤2:计算单个样本损失函数的梯度
$$\frac{\partial J_i(\theta)}{\partial \theta_j} = -\left[y_i \frac{1}{h_\theta(x_i)} \frac{\partial h_\theta(x_i)}{\partial \theta_j} + (1-y_i) \frac{1}{1-h_\theta(x_i)} \frac{\partial (1-h_\theta(x_i))}{\partial \theta_j}\right]$$注意到:
$$\frac{\partial (1-h_\theta(x_i))}{\partial \theta_j} = -\frac{\partial h_\theta(x_i)}{\partial \theta_j}$$代入得:
$$\frac{\partial J_i(\theta)}{\partial \theta_j} = -\left[y_i \frac{1}{h_\theta(x_i)} - (1-y_i) \frac{1}{1-h_\theta(x_i)}\right] \frac{\partial h_\theta(x_i)}{\partial \theta_j}$$$$= -\left[\frac{y_i}{h_\theta(x_i)} - \frac{1-y_i}{1-h_\theta(x_i)}\right] h_\theta(x_i)(1-h_\theta(x_i)) x_{ij}$$$$= -\left[y_i(1-h_\theta(x_i)) - (1-y_i)h_\theta(x_i)\right] x_{ij}$$$$= -[y_i - y_ih_\theta(x_i) - h_\theta(x_i) + y_ih_\theta(x_i)] x_{ij}$$$$= -[y_i - h_\theta(x_i)] x_{ij}$$$$= (h_\theta(x_i) - y_i) x_{ij}$$步骤3:整体损失函数的梯度
对所有样本求平均:
$$\frac{\partial J(\theta)}{\partial \theta_j} = \frac{1}{m}\sum_{i=1}^m (h_\theta(x_i) - y_i) x_{ij}$$用向量形式表示:
$$\frac{\partial J(\theta)}{\partial \theta} = \frac{1}{m} X^T (h_\theta(X) - y)$$其中:
- $X$ 是 $m \times n$ 的特征矩阵
- $h_\theta(X) = [\sigma(\theta^T x_1), \sigma(\theta^T x_2), …, \sigma(\theta^T x_m)]^T$
- $y = [y_1, y_2, …, y_m]^T$
6.1.3 梯度下降更新规则
梯度下降的更新规则为:
$$\theta^{(t+1)} = \theta^{(t)} - \alpha \frac{\partial J(\theta^{(t)})}{\partial \theta}$$具体地:
$$\theta^{(t+1)} = \theta^{(t)} - \frac{\alpha}{m} X^T (h_\theta(X) - y)$$对于每个参数分量:
$$\theta_j^{(t+1)} = \theta_j^{(t)} - \frac{\alpha}{m} \sum_{i=1}^m (h_\theta(x_i) - y_i) x_{ij}$$6.1.4 算法流程
- 初始化:随机初始化参数 $\theta^{(0)}$
- 迭代更新:对于 $t = 0, 1, 2, …$
- 计算预测值:$h_\theta(x_i) = \sigma(\theta^T x_i)$
- 计算梯度:$\nabla J(\theta) = \frac{1}{m} X^T (h_\theta(X) - y)$
- 更新参数:$\theta^{(t+1)} = \theta^{(t)} - \alpha \nabla J(\theta^{(t)})$
- 收敛判断:当 $||\nabla J(\theta)||$ 小于阈值或达到最大迭代次数时停止
6.1.5 学习率的选择
学习率 $\alpha$ 的选择非常重要:
- 太大:可能导致震荡,无法收敛
- 太小:收敛速度很慢
- 自适应学习率:随着迭代次数增加而减小
常用的学习率策略:
$$\alpha^{(t)} = \frac{\alpha_0}{1 + \text{decay\_rate} \times t}$$6.1.6 梯度下降的几何解释
从几何角度看,梯度 $\nabla J(\theta)$ 指向损失函数增长最快的方向,因此:
- 负梯度方向 $-\nabla J(\theta)$ 是函数值下降最快的方向
- 梯度下降沿着负梯度方向移动,逐步找到最优解
- 步长由学习率 $\alpha$ 控制
6.2 牛顿法
利用二阶导数信息,收敛更快:
$$\theta := \theta - H^{-1} \nabla J(\theta)$$其中 $H$ 是Hessian矩阵。
7. 逻辑回归的优缺点
7.1 优点
- 模型简单:线性模型,易于理解和实现
- 计算效率高:训练和预测速度快
- 概率输出:直接给出分类概率,便于决策
- 无需特征缩放:对特征尺度不敏感
- 不需要调参:相对稳定,超参数较少
7.2 缺点
- 线性假设:只能处理线性可分问题
- 对离群点敏感:极端值会影响模型性能
- 特征工程要求高:需要人工构造有效特征
- 多重共线性问题:特征间相关性影响模型稳定性
8. 正则化逻辑回归
为了防止过拟合,可以加入正则化项:
8.1 L1正则化(Lasso)
$$J(\theta) = -\frac{1}{m}\sum_{i=1}^m [y_i \log h_\theta(x_i) + (1-y_i) \log(1-h_\theta(x_i))] + \lambda \sum_{j=1}^n |\theta_j|$$8.2 L2正则化(Ridge)
$$J(\theta) = -\frac{1}{m}\sum_{i=1}^m [y_i \log h_\theta(x_i) + (1-y_i) \log(1-h_\theta(x_i))] + \lambda \sum_{j=1}^n \theta_j^2$$8.3 弹性网络(Elastic Net)
结合L1和L2正则化:
$$J(\theta) = -\frac{1}{m}\sum_{i=1}^m [y_i \log h_\theta(x_i) + (1-y_i) \log(1-h_\theta(x_i))] + \lambda_1 \sum_{j=1}^n |\theta_j| + \lambda_2 \sum_{j=1}^n \theta_j^2$$9. 多分类逻辑回归
9.1 一对一(One-vs-One)
对于K个类别,训练$\frac{K(K-1)}{2}$个二分类器。
9.2 一对其余(One-vs-Rest)
对于K个类别,训练K个二分类器,每个分类器区分一个类别与其他所有类别。
9.3 Softmax回归(多项逻辑回归)
直接扩展到多分类:
$$P(Y=k|x) = \frac{e^{\theta_k^T x}}{\sum_{j=1}^K e^{\theta_j^T x}}$$10. 模型评估指标
- 准确率(Accuracy):正确预测的比例
- 精确率(Precision):预测为正例中实际为正例的比例
- 召回率(Recall):实际正例中被正确预测的比例
- F1-Score:精确率和召回率的调和平均
- AUC-ROC:ROC曲线下的面积
- 对数损失(Log Loss):衡量概率预测的质量
11. 实际应用场景
- 医疗诊断:根据症状预测疾病概率
- 金融风控:信用评分,违约概率预测
- 市场营销:客户响应率预测
- 推荐系统:用户点击率预测
- 文本分类:垃圾邮件检测
- 图像识别:简单的二分类任务
12. 与其他算法的比较
特征 | 逻辑回归 | 线性回归 | SVM | 决策树 |
---|---|---|---|---|
输出类型 | 概率 | 连续值 | 分类/回归 | 分类/回归 |
模型复杂度 | 低 | 低 | 中等 | 高 |
可解释性 | 强 | 强 | 中等 | 强 |
处理非线性 | 弱 | 弱 | 强(核函数) | 强 |
训练速度 | 快 | 快 | 中等 | 快 |
13. 总结
逻辑回归是机器学习中的基础且重要的算法,具有以下关键特点:
- 数学基础扎实:基于最大似然估计,理论完备
- 实现简单:模型结构清晰,易于编程实现
- 应用广泛:在工业界有大量实际应用
- 可解释性强:参数具有明确的物理意义
- 计算效率高:训练和预测速度快
虽然逻辑回归在处理复杂非线性问题时有局限性,但它仍然是分类问题的首选baseline算法,也是理解更复杂机器学习算法的重要基础。
提升树(Boosting Tree)
提升树是一类集成学习方法,通过将多个弱分类器(通常是决策树)串联起来,逐步提升整体模型的预测能力。每一轮模型都关注前一轮模型未能正确预测的样本,从而不断优化。
1. 基本思想
- 通过加法模型将多个弱学习器组合成强学习器。
- 每一轮训练时,关注前一轮模型分错的样本,提升其权重。
- 最终模型是所有弱学习器的加权和。
2. 常见提升树算法
2.1 AdaBoost(Adaptive Boosting)
- 每一轮训练一个弱分类器(如决策树桩),根据上轮错误率调整样本权重。
- 最终模型为所有弱分类器的加权投票。
- 适用于分类问题。
2.2 GBDT(Gradient Boosting Decision Tree)
- 每一轮拟合前一轮残差(梯度),不断优化损失函数。
- 可用于回归和分类问题。
- 常见损失函数:平方误差、对数损失等。
2.3 XGBoost、LightGBM、CatBoost
- 这些是GBDT的高效实现,支持并行、正则化、缺失值处理等。
- 在Kaggle等数据竞赛中表现优异。
3. 提升树的优缺点
优点
- 能处理非线性关系,拟合能力强
- 对特征无须归一化,能自动选择特征
- 可处理回归、二分类和多分类问题
- 有较强的鲁棒性和泛化能力
缺点
- 训练时间较长,难以并行
- 对异常值敏感
- 参数较多,需要调优
4. 应用场景
- 信用评分、风控建模
- 排序与推荐系统
- 医疗诊断、金融预测
- 各类数据挖掘竞赛
5. 典型流程(以GBDT为例)
- 初始化模型$F_0(x)$,如用均值
- 对于$m=1$到$M$(树的数量):
- 计算当前模型的负梯度(残差)
- 拟合一棵新树$h_m(x)$
- 更新模型$F_m(x) = F_{m-1}(x) + \gamma_m h_m(x)$
- 输出最终模型$F_M(x)$
6. 总结
提升树是当前机器学习领域最强大的集成方法之一,尤其适合结构化数据。理解其原理和调参技巧,对提升建模能力非常有帮助。