目录
泛化误差
偏差和方差
噪声
生成模型和判别模型
正态分布(Normal Distribution)
超参数选择
Grid Search 网格搜索
Random Search 随机搜索
Hyperopt
Hyperas
参数估计方法对比
MLE 最大似然估计
MAP最大后验估计
贝叶斯估计
距离度量方法
欧氏距离
余弦距离
闵可夫斯基距离(明氏距离)
马氏距离
互信息
皮尔逊相关系数
Jaccard相关系数
曼哈顿距离
熵
自信息
信息熵
联合信息熵
条件熵
交叉熵
相对熵(KL散度)
互信息(信息增益与其相同)
信息增益率
基尼系数
混淆矩阵
模型度量指标
准确率Accuracy
精确度 Precision(查准率)
召回率Recall(查全率)
F1值
mAP(mean Average Precision)
如何处理数据中的缺失值
完整的机器学习项目流程
数据清洗与特征处理
数据清洗
特征处理 (概括了PCA和LDA和t-SNE)
***自用复习材料,开放原因是方便大家一同学习,同时哪里出错麻烦大家矫正,若有侵权很抱歉,请及时联系我,谢谢理解!
泛化误差
英文名字:generalization error,也叫out-of-sample error或risk。
定义:一种衡量算法对以前未见过的数据预测结果的准确度的度量,一般是训练数据集的损失与一般化的数据集的损失之间的差异。
由于模型是基于有限样本进行训练的,对模型的评估一定会受到采样误差的影响,也就是当前数据的预测误差和真实误差之间是存在差异的。
在监督学习中,模型的泛化误差可以分解为:偏差、方差和噪声之和:
“偏差-方差分解”表明模型的泛化能力是由算法的能力、数据的充分性、任务本身的难度共同决定的。
偏差和方差
偏差和方差是衡量模型泛化误差的两个方面:
- 偏差(Bias):
- Bias是用所有可能的训练数据集训练出的所有模型的输出的平均值与真实模型的输出值之间的差异。模型预测的期望值和真实值之间的差;
- 描述模型的拟合能力;
- 产生原因:对学习算法做了错误的假设或者模型复杂度不够;
- 体现:在训练误差上体现。
- 计算公式:
,其中
是模型的期望预测,y是真实结果。度量了学习算法的期望预测与真实结果的偏离程度,即刻画了学习算法本身的拟合能力。
模型的期望预测是什么?
在概率论中,期望值是对随机变量所有可能取值的加权平均,权重为对应的概率。对于离散随机变量,期望值的计算公式为:
。
在分割任务中,模型的输出通常是每个像素属于每个类别的概率分布。假设有 num_classes 个类别,模型输出的概率分布为:
,代表像素i属于类别c的概率。为了计算每个像素的期望预测,我们需要将类别标签(通常是整数)与对应的概率相乘,然后求和。计算公式如下:
- 方差(Variance):
- 不同模型预测的期望值和预测值之间的差平方和;
- 是不同的训练数据集训练出的模型输出值之间的差异;
- 描述模型的稳定性;
- 产生原因:模型复杂度对于训练集过高;
- 体现:体现在测试误差相对于训练误差的增量上。
- 计算公式:
。度量了同样大小的训练集的变动所导致的学习性能的变化,即刻画了数据扰动所造成的影响(模型的稳定性)。
神经网络较为复杂,因此,拟合能力相对较强,因此,通常其训练误差(偏差)会相对较小,单由于其过强的拟合能力,导致其测试误差(泛化误差)会增大。
偏差和方差的关系和模型容量(模型复杂度)、欠拟合和过拟合的概念紧密相联:
- 当模型的容量增大(x 轴)时, 偏差(用点表示)随之减小,而方差(虚线)随之增大。
- 沿着 x 轴存在最佳容量,小于最佳容量会呈现欠拟合,大于最佳容量会导致过拟合。
噪声
表达了在当前任务上任何学习算法所能达到的期望泛化误差的下界,即刻画了学习问题本身的难度。
生成模型和判别模型
监督学习模型可以分为生成模型和判别模型两种:
- 判别模型:
- 直接学习决策函数或者条件概率分布,学习的是类别之间的最优分隔面,反映的是不同类数据之间的差异。
- K 近邻、感知机(神经网络)、决策树、逻辑斯蒂回归、最大熵模型、SVM、提升方法、条件随机场。
- 生成模型:
- 学习的是联合概率分布P(X,Y),然后根据条件概率公式计算 P(Y|X),
。
- 朴素贝叶斯、隐马尔可夫模型、混合高斯模型、贝叶斯网络、马尔可夫随机场。
- 学习的是联合概率分布P(X,Y),然后根据条件概率公式计算 P(Y|X),
- 由生成模型可以得到判别模型,但由判别模型得不到生成模型。
- 当存在“隐变量”时,只能使用生成模型。
决策函数:
- 是一种直接输出结果的函数,不提供预测相关的不确定性和概率信息,输出离散的类别标签或者回归值。
条件概率分布函数:
- 给定输入特征x的条件下,输出y的概率分布,提供了关于预测的不确定性信息,提供了每个可能类别的概率值,而不是单一的预测结果。
隐变量:
- 不能被直接观察到,但是对系统的状态和能观察到的输出存在影响的一种东西。
判别模型:
- k近邻(k-nearest neighbor,kNN)
- 感知机(神经网络):只能处理分类问题,线性划分
- Logistic回归
- 最大熵原理:如果不施加外力影响,事物永远向着更混乱的状态发展,如果施加外力影响,系统会在外力约束下达到其可能的最混乱状态。熵越大越好,就是要保留全部的不确定性,将风险降到最小。
- 最大熵模型:在给定一组事实(features+output)的条件下,选择符合所有事实,且在其他方面近可能均匀的模型。基于最大熵原理的最大熵模型就是最符合自然状态下概率分布的模型,所以模型是最可能真实发生的。若概率模型需要满足一些约束,则最大熵原理就是在满足已知约束的条件集合中,对未知的情况不做任何的主观假设。
- 条件随机场
- 提升方法Adaboost
- SVM(Support Vector Machines):寻找具有“最大间隔”的决策面。线性SVM算法中,目标函数就是“分类间隔”,优化对象是决策面。
生成模型:
- 朴素贝叶斯(Naive Bayes):是一种基于贝叶斯定理和特征条件独立假设的分类方法。其核心原理在于利用贝叶斯定理计算给定数据样本下各类别的后验概率,并选择具有最高后验概率的类别作为该样本的预测类别。
- 条件概率(似然概率):一般的形式为
P(X|Y)
,表示 y 发生的条件下 x 发生的概率。- 先验概率(prior probability):指根据以往经验和分析。在实验或采样前就可以得到的概率。
- 后验概率(posterior probability):指某件事已经发生,计算事情发生是由某个因素引起的概率。
- 隐马尔科夫模型(Hidden Markov Model)
- 使用条件:1)我们的问题是基于序列的,比如时间序列,或者状态序列。2)我们的问题中有两类数据,一类序列数据是可以观测到的,即观测序列;而另一类数据是不能观察到的,即隐藏状态序列,简称状态序列。
- 贝叶斯网络(Bayesian Network),也被称为贝叶斯有向无环图(Bayesian Directed Acyclic Graph, BDAG)或概率依赖网络(Probabilistic Dependence Network),是一种强大的概率图模型,用于描述随机变量之间的概率依赖关系。
正态分布(Normal Distribution)
正态分布概率密度曲线:
代表数学期望,
表示随机变量的标准差,区间面积分别为0.68和0.95。
超参数选择
Grid Search 网格搜索
- 作用:是一种调参手段,使用穷举搜索选取模型的最优超参数 ,在所有候选的参数选择中,通过循环遍历,尝试每一种可能,选择表现最好的参数。
Random Search 随机搜索
- 在高维空间中随机选择若干超参数
Hyperopt
- 是一个强大的python库,使用贝叶斯优化的形式进行参数调整,可以在大范围内优化具有数百个参数的模型。
import xgboost as xgb
from sklearn.datasets import load_digits
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
from hyperopt import hp, fmin, tpe, Trials
from hyperopt import space_eval# 加载数据
digits = load_digits()
X_train, X_val, y_train, y_val = train_test_split(digits.data, digits.target, test_size=0.2, random_state=42)# 定义超参数搜索空间
space = {'learning_rate': hp.uniform('learning_rate', 0.01, 0.1), #均匀分布在 [0.01, 0.1] 的连续值。'n_estimators': hp.choice('n_estimators', [50, 100, 150]), #从 [50, 100, 150] 中选择一个值(分类参数)。'max_depth': hp.choice('max_depth', [5, 10, 15]), #从 [5, 10, 15] 中选择一个值(分类参数)。
}# 定义目标函数
def objective(params): #接收超参数 paramsmodel = xgb.XGBClassifier(**params)model.fit(X_train, y_train)y_pred = model.predict(X_val)accuracy = accuracy_score(y_val, y_pred)return -accuracy # 负号因为 fmin 会最小化目标函数,而我们需要最大化准确率。# 运行 Hyperopt 优化
trials = Trials() #记录每次评估的超参数、损失值等信息,用于后续分析。
best = fmin(fn=objective,space=space,algo=tpe.suggest, #使用TPE(Tree-structured Parzen Estimator)算法进行优化。max_evals=50, #总共尝试50组超参数组合。trials=trials)
# TPE是一种贝叶斯优化算法,根据历史试验结果建立概率模型,选择更可能提升性能的超参数。# 获取最优超参数
best_params = space_eval(space, best)
print("Best Hyperparameters:", best_params)
Hyperas
Hyperas 是一个基于 Hyperopt 的轻量级库,专门用于优化 Keras 模型的超参数。它结合了 Hyperopt 的贝叶斯优化能力和 Keras 的深度学习框架,使得在 Keras 中调参变得更加简单和高效。
参数估计方法对比
MLE 最大似然估计
- 全称:Maximum Likelihood Estimation
- 核心思想:寻找使观测数据似然函数最大化的参数值,假设参数是固定的未知常数,不考虑参数的先验分布。
- 数学形式:
似然函数
描述在已知数据 D 的情况下,参数 θ 的可能性。例如:已知投掷 10 次硬币出现 6 次正面,计算硬币正面朝上的概率 p 的可能性。
似然函数不是概率分布,因为它对 θ的积分不一定为 1。
似然函数的值反映了不同参数 θ 对数据的拟合程度。
MAP最大后验估计
- 全称: Maximum A Posteriori Estimation
- 核心思想:
-
在 MLE 的基础上,引入参数的 先验分布,寻找使 后验分布 最大化的参数值。
-
结合了观测数据和先验知识(高斯正则是L2先验,拉普拉斯正则是L1先验)。
-
-
很推荐看b站贪心科技的课程
-
数学形式:
贝叶斯估计
- 全称:Bayesian Estimation
- 核心思想:
-
将参数视为随机变量,利用贝叶斯定理计算参数的 后验分布。
-
不仅提供参数的估计值,还提供参数的不确定性。
-
-
数学形式:
距离度量方法
欧氏距离
- 计算公式:
- 衡量两点间的直线距离
余弦距离
- 计算公式:
- 衡量两个向量方向上的差异
欧氏距离和余弦距离的区别:
- 放到向量空间中看,欧式距离衡量两点之间的直线距离,而余弦相似度计算的是两个向量之间的夹角
- 没有归一化时,欧式距离的范围是 [0, +∞],而余弦相似度的范围是 [-1, 1];余弦距离是计算相似程度,而欧氏距离计算的是相同程度(对应值的相同程度)
- 归一化的情况下,可以将空间想象成一个超球面(三维),欧氏距离就是球面上两点的直线距离,而向量余弦值等价于两点的球面距离,本质是一样。
闵可夫斯基距离(明氏距离)
- 计算公式:
马氏距离
- 计算公式:
-
互信息
- 度量两个事件集合之间的相关性(mutual dependence)
- 计算公式:
皮尔逊相关系数
- 衡量两个变量之间线性关系强度和方向的统计量,取值范围在 -1 到 1 之间。
- 计算公式:
Jaccard相关系数
- 计算样本集的相似性和多样性度量。
- 计算公式:
曼哈顿距离
- 计算公式:
熵
- 定义:表征随机变量分布的混乱程度,分布越混乱,则熵越大。
自信息
- 自信息表示某一事件发生时所带来的信息量的多少,当事件发生的概率越大,则自信息越小。
- 自信息公式:
- 当该对数的底数为自然对数 e 时,单位为奈特(nats);当以 2 为底数时,单位为比特(bit)或香农(shannons)。
信息熵
- 用来描述整个随机分布所带来的信息量平均值,更具统计特性。信息熵也叫香农熵,在机器学习中,由于熵的计算是依据样本数据而来,故也叫经验熵。随机变量取值个数越多,状态数也就越多,累加次数就越多,信息熵就越大,混乱程度就越大,纯度越小。
- 信息熵公式:
联合信息熵
- 信息熵推广到多维随机变量的联合分布。
- 联合信息熵公式:
条件熵
- 在X给定条件下,Y的条件概率分布的熵对X的数学期望。
- 条件熵公式:
交叉熵
- 主要用于度量两个概率分布间的差异性信息
- 交叉熵公式:p是真实样本分布,q是预测得到样本分布
相对熵(KL散度)
- 衡量当你修改了从先验分布 q 到后验分布 p 的信念之后带来的信息增益。
- 相对熵公式:
- H(p)是信息熵,如果从优化角度来看,p是真实分布,是固定值,最小化KL散度情况下,H(p)可以省略,此时交叉熵等价于KL散度。
- 在最优化问题中,最小化相对熵等价于最小化交叉熵;相对熵和交叉熵的定义其实都可以从最大似然估计得到
- 性质:
- 非负:KL 散度为 0 当且仅当P 和 Q 在离散型变量的情况下是相同的分布,或者在连续型变量的情况下是“几乎处处”相同的
- 不对称:
和
权重不同,分子分母比值不同而带来的数学定义上的不一致性。
互信息(信息增益与其相同)
- 可以评价两个分布之间的距离,这主要归因于其对称性,假设互信息不具备对称性,那么就不能作为距离度量
- 互信息公式
- 基于熵:
- 基于联合熵:
- 基于KL散度:
- 基于熵:
信息增益率
- 克服信息增益存在的在某种特征上分类特征细,但实际上无意义取值时候导致的决策树划分特征失误的问题。例如假设有一列特征是身份证ID,每个人的都不一样,其信息增益肯定是最大的,但是对于一个情感分类系统来说,这个特征是没有意义的。
- 公式:
基尼系数
- 提出的目的不是为了克服上面算法存在的问题,而主要考虑的是计算快速性、高效性
- 公式:
例:
混淆矩阵
-
True Positive(TP):将正类预测为正类的数量.
-
True Negative(TN):将负类预测为负类的数量.
-
False Positive(FP):将负类预测为正类数 → 误报 (Type I error).
-
False Negative(FN):将正类预测为负类数 → 漏报 (Type II error).
模型度量指标
准确率Accuracy
- 正例和负例中预测正确数量占总数量的比例,就是所有预测样本中预测准确的占比。
- 公式表示:
精确度 Precision(查准率)
- 以预测结果为判断依据,预测为正例的样本中预测正确的比例。是相对正例的预测结果而言,正例预测的准确度。
- 公式表示:
准确率与精确率的区别:
在正负样本不平衡的情况下,准确率这个评价指标有很大的缺陷。比如在互联网广告里面,点击的数量是很少的,一般只有千分之几,如果用acc,即使全部预测成负类(不点击)acc 也有 99% 以上,没有意义。
召回率Recall(查全率)
- 以实际样本为判断依据,实际为正例的样本中,被预测正确的正例占总实际正例样本的比例。
- 公式表示:
F1值
- 中和了精确率和召回率的指标,是两者的调和平均数,适合衡量类别不平衡的数据集。F1 分数同时考虑精确率和召回率,避免模型偏向某一指标。
- 公式表示:
mAP(mean Average Precision)
- AP衡量的是对一个类检测的好坏,mAP衡量的是对多个类的检测好坏。在多类多目标检测中,计算出每个类别的AP后,再除以总数,即所有类别AP的平均值。
-
如何处理数据中的缺失值
针对该问题,可以分为以下两种情况:
- 缺失值较多的情况:
- 直接舍弃该列特征,否则可能带来较大噪声,对结果造成不良影响。
- 缺失值较少的情况:(缺失值<10%,考虑对缺失值进行填充)
- 使用异常值填充(如0),将缺失值作为一个特征处理:data.fillna(0)
- 使用均值|条件均值填充(条件均值:是指与缺失值所属标签相同的所有数据的均值):data.fillna(data.mean())
- 使用相邻数据填充。使用前一个数据:data.fillna(method='pad'),使用后一个数据:data.fillna(method='bfill')
- 插值填充:data.interpolate()
- 拟合填充:将缺失值作为一个预测问题来处理:将数据分为正常数据和缺失数据,对有值的数据采用随机森林等方法拟合,然后对有缺失值的数据进行预测,用预测的值来填充。
完整的机器学习项目流程
- 数学抽象: 根据数据明确任务目标,是分类、还是回归,或者是聚类。
- 数据获取:对于分类问题,数据偏斜不能过于严重(平衡),不同类别的数据数量不要有数个数量级的差距。对数据的量级要有一个评估,多少个样本,多少个特征,据此估算出内存需求。如果放不下就得考虑改进算法或者使用一些降维技巧,或者采用分布式计算。
- 预处理与特征选择:
- 预处理/数据清洗是很关键的步骤,往往能够使得算法的效果和性能得到显著提高。归一化、离散化、因子化、缺失值处理、去除共线性等。
- 筛选出显著特征、摒弃非显著特征,需要机器学习工程师反复理解业务。这对很多结果有决定性的影响。特征选择好了,非常简单的算法也能得出良好、稳定的结果。这需要运用特征有效性分析的相关技术,如相关系数、卡方检验、平均互信息、条件熵、后验概率、逻辑回归权重等方法。
- 模型训练与调优
- 模型诊断
- 过拟合、欠拟合 判断是模型诊断中至关重要的一步。常见的方法如交叉验证,绘制学习曲线等。过拟合的基本调优思路是增加数据量,降低模型复杂度。欠拟合的基本调优思路是提高特征数量和质量,增加模型复杂度。
- 误差分析也是机器学习至关重要的步骤。通过观察误差样本,全面分析误差产生误差的原因:是参数的问题还是算法选择的问题,是特征的问题还是数据本身的问题。
- 诊断后的模型需要进行调优,调优后的新模型需要重新进行诊断,这是一个反复迭代不断逼近的过程,需要不断地尝试, 进而达到最优状态。
- 模型融合/集成:一般来说,模型融合后都能使得效果有一定提升。而且效果很好。工程上,主要提升算法准确度的方法是分别在模型的前端(特征清洗和预处理,不同的采样模式)与后端(模型融合)上下功夫。因为他们比较标准可复制,效果比较稳定。而直接调参的工作不会很多,毕竟大量数据训练起来太慢了,而且效果难以保证。
- 上线运行:工程上是结果导向,模型在线上运行的效果直接决定模型的成败。不单纯包括其准确程度、误差等情况,还包括其运行的速度(时间复杂度)、资源消耗程度(空间复杂度)、稳定性是否可接受。
数据清洗与特征处理
数据清洗
- 数据清洗是指对原始数据进行处理,以解决数据质量问题,确保数据适合用于建模。
- 处理缺失值:删除or填充(均值|中位数|众数|插值法|预测法)
- 处理异常值:删除or修正or分箱(Binning)
- 处理重复数据:删除
- 数据格式标准化
- 处理不一致数据:如年龄为负值
分箱Binning: 数据分箱(Binning)作为数据预处理的一部分,也被称为离散分箱或数据分段。其实分箱的概念其实很好理解,它的本质上就是把数据进行分组。实现数据的离散化,增强数据稳定性,减少过拟合风险。
特征处理 (概括了PCA和LDA和t-SNE)
- 特征处理Feature Engineering是指对原始特征进行转换或创建新特征,以提高模型的性能。
- 特征缩放Feature Scaling:由于不同特征的量纲和范围可能差异很大,影响模型收敛速度。
- 标准化Standardization:将特征转换为均值为 0、标准差为 1 的分布。
- 归一化Normalization:将特征缩放到 [0, 1] 或 [-1, 1] 范围内。
- 标准化Standardization:将特征转换为均值为 0、标准差为 1 的分布。
- 特征编码Feature Encoding:机器学习模型无法直接处理类别型特征(如性别、颜色)。
- One-Hot Encoding:将类别型特征转换为二进制向量。
- 标签编码Label Encoding:将类别型特征转换为整数标签。
- 特征选择Feature Selection:数据集中可能存在冗余或无关特征,影响模型性能。
-
过滤法(Filter Methods):基于统计指标(如相关系数、卡方检验)选择特征。
-
包裹法(Wrapper Methods):通过模型性能选择特征(如递归特征消除)。
- 嵌入法(Embedded Methods):在模型训练过程中选择特征(如 L1 正则化)。
-
- 特征构造Feature Construction:原始特征可能不足以捕捉数据的复杂关系。
-
组合特征:将多个特征组合成新特征(如将身高和体重组合为 BMI)。
-
多项式特征:生成特征的高阶项和交互项
。
-
时间特征:从时间戳中提取特征(如年、月、日、小时)。
-
- 降维Dimensionality Reduction:高维数据可能导致计算复杂度高和过拟合。
-
主成分分析(PCA):将高维数据投影到低维空间,保留最大方差。
-
线性判别分析(LDA):将高维数据投影到低维空间,最大化类别可分性。
-
t-SNE:将高维数据降维到 2D 或 3D,用于可视化。
-
递归特征消除(Recursive Feature Elimination):基本思想是在不断迭代中递归地删除特征,直到达到预设的特征数量为止。
- 首先,使用所有特征训练一个模型,并计算每个特征的权重或系数。
- 然后,排序这些特征的权重或系数,并删除权重或系数最小的特征。
- 重复步骤1和步骤2,直到特征数量达到预设的值
***自用复习材料,开放原因是方便大家一同学习,同时哪里出错麻烦大家矫正,若有侵权很抱歉,请及时联系我,谢谢理解!
参考:
- github
- 知乎
- CSDN