打开非线性空间的钥匙:激活函数
激活函数的主要作用是引入非线性,使神经网络能够处理非线性问题,从而增强模型的表达能力,使其能够拟合复杂的函数关系。
LSTM 便是通过激活函数实现“遗忘门”、“输入门”等功能:
各种算法
在二分类问题中,模型通常会输出一个概率得分(如 Softmax),然后通过设定一个阈值(Threshold)来决定最终的分类结果(正例 or 负例)。 ^p2v94r
若是多分类问题,则将多分类任务拆为若干个二分类任务,常见策略包括一对一(OvO)、一对其余(OvR)和多对多(MvM),详见机器学习中的多分类任务详解 。需要注意,编码方法通常用于自变量为非连续型变量(即分类变量)时,以便模型能够正确处理。分清自变量为非连续型变量、因变量为非连续型变量两种情况。
损失函数不仅可以从代数、几何角度来理解,还可以从概率角度来理解,强推视频合集-正则化
逻辑回归,Logistic Regression,对数几率回归
逻辑回归是在线性回归的基础上加了一个 Sigmoid 函数(非线形)映射,$y=\frac{1}{1+e^{-(w^Tx+b)}}$,使得逻辑回归称为了一个优秀的分类算法。注意,虽然它的名字中有“回归”二字,但其实是一个分类算法。
似然函数 $L(w) = \prod [p(x_i)]^{y_i} [1 - p(x_i)]^{1 - y_i}$, 关于其中的累乘项 $P(y_i | x_i) = p(x_i)^{y_i} [1 - p(x_i)]^{1 - y_i}$:
- 当 $y_i = 1$ 时,该公式变为 $p(x_i)$,即模型预测 $x_i$ 为 1 的概率。
- 当 $y_i = 0$ 时,该公式变为 $1 - p(x_i)$,即模型预测 $x_i$ 为 0 的概率。
由于乘积运算不方便计算,我们通常取对数得到对数似然函数(log-likelihood):$log L(w) = \sum y_i \log p(x_i) + (1 - y_i) \log (1 - p(x_i))$
最大化对数似然等价于最小化交叉熵损失函数(Cross-Entropy Loss,即对似然函数取负对数)。注意这里不使用 MSE 来构造损失函数 $\mathcal{L}_{MSE} = \frac{1}{n} \sum_{i=1}^{n} (y_i - p(x_i))^2$ 是因为这个损失函数非凸(一个函数 $f(w)$ 关于 $w$ 是凸的,当且仅当它的 Hessian 矩阵 $H(f)$ 半正定),使得优化过程容易陷入局部最优,难以收敛到全局最优解。
如何求解?
-
梯度下降法(通过一阶导数来找下降方向,又称“最速下降法”)
- 批量梯度下降法(Batch Gradient Descent,BGD)每次迭代都使用全体样本,最小化所有训练样本的损失函数,使得最终求解的是全局的最优解,即求解的参数是使得风险函数最小,但是对于大规模样本问题效率低下。
- 随机梯度下降(Stochastic Gradient Descent,SGD)每次迭代只使用一个样本(或全体样本的某个子集),最小化每条样本(或全体样本的某个子集)的损失函数,虽然不是每次迭代得到的损失函数都向着全局最优方向,但是大的整体的方向是向全局最优解的,最终的结果往往是在全局最优解附近,适用于大规模训练样本情况。
-
牛顿法(在初值点附近对函数做泰勒展开,取展开式的前几项来寻找下降方向)。
- 从本质上去看,牛顿法是二阶(或更高阶,取决于取几阶泰勒展开)收敛,梯度下降是一阶收敛,所以牛顿法就更快。
- 从几何上说,牛顿法就是用一个二次(或更高次)曲面去拟合你当前所处位置的局部曲面,而梯度下降法是用一个平面去拟合当前的局部曲面,通常情况下,二次曲面的拟合会比平面更好,所以牛顿法选择的下降路径会更符合真实的最优下降路径。
- 牛顿法能够根据最优点距离自适应选择迭代步长(学习率)。
- 缺点是每次都需要求解复杂的Hessian矩阵的逆矩阵。
- 于是改善出了:拟牛顿法:使用正定矩阵来近似Hessian矩阵的逆,从而简化了运算的复杂度。
-
正则化,Regularizaation(花书:凡是可以减少泛化误差而不是训练误差的方法都可以称为正则化方法),目的是防止模型过拟合,让误差函数不仅取决于模型拟合的好坏(如 SSE 大小等),还取决于模型的复杂度(如模型中非线性参数的大小,因为一般模型非线性参数越多越大,模型就越复杂;另外大参数也会放大噪声和误差)
- L1 正则化,Lasso 回归,使用曼哈顿距离构造可行域(约束),L1通常用于增加稀疏性,有点类似因子旋转[[多元统计分析复习笔记#关于旋转💫]]。
- L2 正则化,Ridge 回归,使用欧几里得距离构造可行域(约束),L2一般用于减小复杂度。
- 但是没有 L0.5 正则化,因为 L0.5 范数对应的可行域不是凸集,可见图片;那有没有 L3、L4 正则化呢?单纯从凸优化的角度来说,是没问题的。
-
丢弃法,Dropout,随机让神经网络中的一些神经元失效。
逻辑回归和最大熵模型本质上没有区别。(最大熵模型可参考一文带你了解最大熵模型(含详细推导))
与 SVM 的对比:LR 是参数模型,SVM 是非参数模型,参数模型的前提是假设数据服从某一分布,该分布由一些参数确定(比如正太分布由均值和方差确定),在此基础上构建的模型称为参数模型;非参数模型对于总体的分布不做任何假设,只是知道总体是一个随机变量,其分布是存在的(分布中也可能存在参数),但是无法知道其分布的形式,更不知道分布的相关参数,只有在给定一些样本的条件下,能够依据非参数统计的方法进行推断。所以 LR 受数据分布影响,尤其是样本不均衡时影响很大,需要先做平衡,而 SVM 不直接依赖于分布。—— 【机器学习】逻辑回归(非常详细)
线性判别分析 LDA & Fisher判别
可参考[[多元统计分析复习笔记#判别分析]]
线性判别分析(LDA)的目标是找到一个投影方向,使得投影后的类间散度最大化,同时类内散度最小化,从而实现最佳的类别分离。
决策树 Decision Tree
划分指标:
- 信息增益(其中会使用到信息熵作为集合纯度的度量),信息增益越大,则意味着使用该属性来进行划分所获得的“纯度提升”越大。信息增益对可取值数目较多的属性有所偏好;
- 增益率,与信息增益相反,增益率对可取值数目较少的属性有所偏好;
- 基尼指数,反映从数据集中随机抽取两个样本,其类别标记不一致的概率。基尼指数值越小,数据集的纯度越高。
剪枝处理:避免“过拟合”,基本策略有预剪枝和后剪枝两种。
- 预剪枝:在生成决策树的过程中,边生成边剪枝;好处是训练时间开销小(相较于后剪枝而言,因为后剪枝要在决策树建立完成后,自底向上地对树中的所有非叶节点进行注意考察),但是“贪心”本质可能导致欠拟合
- 后剪枝:先把决策树生成完,最后再剪枝。优点是欠拟合风险小,但是训练时间开销大。
随机森林可见后文[[机器学习 Machine Learning#“三个臭皮匠,顶一个诸葛亮” - 模型融合与集成学习]]部分
神经网络
感知机,指单层的人工神经网络,区别于较复杂的多层感知机。
前馈神经网络,在前馈网络中,资讯总是朝一个方向移动,从来不会倒退。可见图
误差逆传播算法(BP算法,反向传播算法)
经典和目前主流算法:卷积神经网络、循环神经网络、LSTM、GRU、Transformer、BERT
支持向量机 SVM
SVM是一种二类分类模型,核心目标是在特征空间中找到一个能够最大化两类数据间隔(Margin)的决策边界。
- 线性可分SVM:当训练数据线性可分时,通过硬间隔最大化可以学习得到一个线性分类器,即硬间隔SVM。
- 线性SVM:当训练数据不能线性可分但是可以近似线性可分时,通过软间隔(允许部分数据点被错误分类,以提高泛化能力)最大化也可以学习到一个线性分类器,即软间隔SVM。
- 非线性SVM:当训练数据线性不可分时,通过使用核技巧(将数据映射到高维空间,使其线性可分)和软间隔最大化,可以学习到一个非线性SVM。
EM 算法
是在含有隐变量的概率模型中寻找参数最大似然估计或者最大后验估计的算法。
最大期望算法经过两个步骤交替进行计算:
- 第一步是计算期望(E),利用对隐藏变量的现有估计值,计算其最大似然估计值;
- 第二步是最大化(M),最大化在 E 步上求得的最大似然值来计算参数的值。M 步上找到的参数估计值被用于下一个 E 步计算中,这个过程不断交替进行。
隐马尔可夫模型
用来描述一个含有隐含未知参数的马尔可夫过程
https://www.cnblogs.com/skyme/p/4651331.html
NLP 中有这个算法
写累了,先暂略
其它
贝叶斯分类器见多元统计分析相关内容[[多元统计分析复习笔记#^dkbbsu]]
聚类算法见多元统计分析相关内容[[多元统计分析复习笔记#聚类分析]]
如何处理模型训练中的高方差或高偏差问题?
https://www.jvruo.com/archives/1277/
评价模型的指标
- 准确率、精度 $Accuracy=\frac{TP+TN}{TP+FP+FN+TN}$
- 精准率、精确率、查准率 $Precision=\frac{TP}{TP+FP}$,预测为正例的样本中,有多少是正确的
- 召回率、查全率 $Recall=\frac{TP}{TP+FN}$,真实为正例的样本中,有多少被成功找到了
- 区分查准&查全!精确率和召回率两者的关系是此消彼长的,于是给出 F1 值进行调和平均
- F1 值: $F1=2·\frac{Precision·Recall}{Precision+Recall}$, 即 Precision 和 Recall 的调和平均
- 引申 $F_\beta$ 值,用参数 $\beta$ 来度量 Precision 和 Recall 哪个更重要:Recall 的重要性是 Precision 的 $\beta$ 倍,F1 值算是特殊情况,把 Precision 和 Recall 看作同等重要。$F_\beta=(1+\beta^2)·\frac{Precision·Recall}{\beta^2·Precision+Recall}$
- ROC 曲线(Receiver Operating Characteristic curve 接收者操作特征曲线)与 AUC 值,适合数据集中类别分布均衡时使用:
- $\text{True Positive Rate}=\frac{TP}{TP+FN}$, 即 $Recall$.
- $\text{False Positive Rate} = \frac{FP}{FP+TN}$
- 设置阈值从 0-1(如何理解这里的阈值?[[机器学习 Machine Learning#^p2v94r]]),可以得到不同的 TPR 和 FPR。以 TPR 为纵坐标、FPR 为横坐标,即可绘制出 ROC 曲线,我们希望 TPR↑,FPR↓,即希望曲线靠近左上角,故给出量化标准 AUC 值:ROC 曲线下的面积。AUC 值越大越好。
- PR 曲线:当我们的数据集中类别分布不均衡时我们可以用 PR 曲线代替 ROC 曲线.PR 曲线与 ROC 曲线的区别在于 PR 曲线以 Recall 作为 x 轴,Precision 作为 y 轴。我们希望 Precision↑,Recall↑,即希望曲线靠近右上角,
- ROC 曲线与 PR 曲线的区别与联系:
- 可以说,每一条 ROC 曲线都与一条 PR 曲线相对应,因为混淆矩阵的 TPR-FPR 数值对和 Precision-Recall都有唯一的数值对。
- 如果在 ROC 空间中,曲线 1 优于曲线 2,那么在 PR 空间中,曲线 1 对应的 PR 曲线同样优于曲线 2 对应的 PR 曲线。
- ROC 曲线对正负两类样本同样关系,而 PR 曲线则对正例更加关心。
- ROC 适合类别均衡时使用,而 PR 曲线适用类别不均衡场景。
- 敏感性、灵敏度、真阳性率 $Sensitivity=\frac{TP}{TP+FN}$
- 特异性、特异度 $Specificity=\frac{TN}{TN+FN}$
- AIC 赤池信息量和BIC 贝叶斯信息量,是基于似然函数的估计方法,主要用于统计建模,尤其是在回归分析和时间序列分析等领域,在机器学习领域并不常用。[[回归分析#^grw9h5]]
Kaggle比赛中提高成绩的3个主要地方
特征工程
特征工程(Feature Engineering)特征工程是将原始数据转化成更好的表达问题本质的特征的过程,使得将这些特征运用到预测模型中能提高对不可见数据的模型预测精度。
图源深度了解特征工程。感觉有点像数据分析中的数据预处理。
异常值的检测与处理
异常值 (Outlier): 异常值是在数据集中明显偏离其他值的观测值。例如在收入数据集中,一个极端低的收入值可能被视为异常值,可能是由于数据输入错误或特殊情况。
Ø 检测异常值的方法
盒形图(Box Plot):
盒图是一种可视化方法,通过箱体展示数据的分布情况,容易识别离群值。一般,盒图中的异常值被定义为低于 Q1 - 1.5 * IQR 或高于 Q3 + 1.5 * IQR 的数据点,其中 Q1 和 Q3 分别是数据的第一四分位数和第三四分位数,IQR 是四分位距。
3 $\sigma$ 准则:
3σ准则基于正态分布的假设,对于正态分布的数据,大约 99.7% 的观测值应该落在均值加减三倍标准差的范围内。
百分位数方法(Percentile Method):
基于数据的百分位数,可以定义一个百分位数范围,例如1%到99%,超出这个范围的数据点被认为是异常值。
Ø 处理异常值的方法
删除异常值:最简单的方法是直接删除包含异常值的观测。这在异常值数量较少或对整体分析影响较大时可能是一种有效的方法。
修正异常值:将异常值修正为合理的数值。这可以通过替换为均值、中位数或根据其他统计指标来实现。
盖帽法:整行替换数据框里99%以上和1%以下的点,将99%以上的点值=99%的点值;小于1%的点值=1%的点值。
分箱(Binning)或分组:将数据分组成多个区间,将异常值归入相邻的区间。这可以减小异常值的影响,同时保留了原始数据的趋势。
变换数据:对数据进行变换,使其更符合正态分布。例如,可以使用对数变换、平方根变换等。这有助于减小极端值对分析的影响。
不处理异常值:在某些情况下,特别是当异常值是真实的、有意义的观测时,可以选择不处理异常值,而是在分析中保留它们。
编码方式 Encoding Method
频率编码(Frequency Encoding)、嵌入编码(Embedding Encoding)的优缺点。
调参
“三个臭皮匠,顶一个诸葛亮” - 模型融合与集成学习
模型融合(Model Fusion)指的是将多个不同的机器学习模型的预测结果进行组合,生成一个新的、更为准确的预测。以提高最终的预测性能、稳定性和泛化能力。它的核心思想是利用多个模型的优势,减少单一模型的偏差和方差,通常用于提升分类或回归任务的精度。
- 简单加权融合:
- 分类问题:voting
- 回归问题:average
- 综合:排序融合 (Rank averaging),log 融合等
- 更为复杂的融合方法,详见下面的集成学习方法。
集成学习(Ensemble Learning)是指训练多个弱模型(基学习器,Base Learners),并将它们组合成一个更强的模型,以提高整体的泛化能力和鲁棒性。目标是让多个弱模型相互补充,形成一个强模型,而不仅仅是融合多个已有的强模型。
常见的集成学习方法:
- Bagging(Bootstrap AGGregatING)装袋算法
- 核心思想:通过 Bootstrap 自助采样法对训练数据集进行有放回抽样,训练多个相同类型的弱模型,然后取平均值(回归任务)或投票(分类任务)。从偏差-方差分解的角度看,Bagging 主要关注降低方差。
- 代表算法:随机森林(Random Forest)。
- Boosting(提升方法)将弱学习器提升为强学习器
- 核心思想:让每个新的弱学习器重点关注之前模型分错的样本后生成新的学习器。最后将之前所有学习器加权结合。从偏差-方差分解的角度看,Boosting 主要关注降低偏差。
- 代表算法:AdaBoost、Gradient Boosting(GBDT)、XGBoost、LightGBM、CatBoost。
- Stacking(堆叠泛化)
- 核心思想:将多个基模型的预测作为新特征,输入到更高一级的元模型(Meta Learner) 进行学习,如此循环,最后输出一个最终模型。
- 区别于模型融合的 Stacking:这里的基模型可能是专门为集成学习设计的弱模型。
可参考其它优秀博文机器学习-集成学习(模型融合)方法概述、【机器学习】模型融合方法概述
...