模型评估与选择

评估方法

留出法

就是目前用的划分数据集的办法,注意是互斥的数据集

交叉验证

分为k个子集,用k-1作为训练集,剩下的作为测试集

性能度量

回归最常用的是均方误差

定义混淆矩阵:

正例 反例
TP(预测为真,实际为真) FN(预测为假,实际为真)
FP(预测为真,实际为假) TN(预测为假,实际为假)

查准率(Precision)=TP/(TP+FP)

查全率(Recall)=TP/(TP+FN)

两者加起来等于1(一个越高就说明一个越低)。如果业务没有明确需要哪个高,可以使用P-R曲线来判定

  1. P-R曲线面积越大,模型效果越好

  2. BEP度量越大越好(面积不好求)

  3. F1-score为调和平均数,对于不平衡类别分布的问题,通常比单独考虑精确率或召回率更具信息量

ROC底部的面积为AUC。理想情况下,TPR=1, FPR = 0

  1. ROC曲线越是靠左上角,说明分类器越好
  2. AUC对样本类别是否均衡并不敏感,这也是不均衡样本通常采用AUC评价分类性能的原因

线性模型

基本形式

线性回归

将离散型数据转化为连续性数据

  1. 最小二乘法:通过均方误差最小化确定w和b(找到一条直线,使各点距离最小),确定w和b的过程叫最小二乘“参数估计”

多元线性回归

本质是一样的

f(x) = w1x1+w2x2+….+wnxn + b

对于w和x,可以建立矩阵(高代)

对数线性回归

本质上是非线性函数映射

逻辑回归/对数几率回归

**判断w和b的办法:**极大似然法

线性判别分析(LDA)

**投影后类内方差最小,类间方差最大。**设有两类数据,分别为红色和蓝色,如下图所示,这些数据特征是二维的,希望将这些数据投影到一维的一条直线,让每一种类别数据的投影点尽可能的接近,而红色和蓝色数据中心之间的距离尽可能的大。LDA的目标是最大化广义瑞利商

多分类学习

可分为:

  1. 一对多
  2. 一对其余
  3. 多对多

类别不均衡

  1. 类别权重调整
  • 频率采样
  • 手调
  • 网格搜索
  • 自适应权重
  1. 过采样(SMOTE)
  2. 欠采样
  3. 生成合成样本

决策树

总的来说,决策树分为:根节点,叶子节点,中间层

如何进行节点先后顺序的判断?

信息熵公式:

信息熵越大,说明内部越混乱,该分类效果越差,因此先通过循环遍历信息熵最小的特征作为第一个特征,以此向下

决策树ID3

按照信息熵进行判断

决策树C4.5

按照信息增益率计算

CART

按照基尼系数计算

剪枝处理

预剪枝:在决策树生成过程中,对每个结点在划分前先进性估计,若当前结点的划分不能带来决策树泛化性能提升,则停止划分并将当前结点标记为叶结点。它的位置在每一次生成分支节点前,先判断有没有必要生成,如没有必要,则停止划分。
**后剪枝:**先从训练集生成一棵完整的决策树(相当于结束位置),然后自底向上的对非叶结点进行考察,若将该结点对应的子树替换为叶结点能带来决策树泛化性能提升,则将该子树替换为叶结点,相当于将子树剪去。值得注意的是,后剪枝时要用到一个测试数据集合,如果存在某个叶子剪去后能使得在测试集上的准确度或其他测度不降低(不变得更坏),则剪去该叶子。
理论上讲,后剪枝生成的决策树要比预剪枝生成的效果好,但是后剪枝在计算复杂度上比预剪枝高。

连续值处理

  1. 二元切分法(Binary Splitting): 这种方法是将连续特征的取值按照某个阈值进行二元切分。在每个节点上,选择一个最佳的特征和对应的切分阈值,将数据集划分成两个子集,使得划分后的子集的信息增益最大(或者信息增益率最大)。然后,递归地对子集进行划分,直到满足停止条件。
  2. 多元切分法(Multiway Splitting): 这种方法是将连续特征的取值按照多个阈值进行切分,即将连续特征的取值范围划分成多个区间。在每个节点上,选择一个最佳的特征和对应的切分区间,将数据集划分成多个子集,使得划分后的子集的信息增益最大(或者信息增益率最大)。然后,递归地对子集进行划分,直到满足停止条件。

缺失值处理(样本赋权,权重划分)

  1. 忽略
  2. 进行分支

神经网络

激活函数

激活函数 优点 缺点
sigmoid 可用在最后一层,用作二分 变化率(导数)小,容易梯度消失,下一层无法学习
tanh 均值为0,方便下一层学习 梯度消失
relu 不存在梯度消失(为正的时候);线性关系计算速度快 无法输入为负

聚类模型

按照某个特定标准(如距离)把一个数据集分割成不同的类或簇,使得同一个簇内的数据对象的相似性尽可能大,同时不在同一个簇中的数据对象的差异性也尽可能地大

聚类的一般过程

  1. 数据准备:特征标准化和降维
  2. 特征选择:从最初的特征中选择最有效的特征,并将其存储在向量中
  3. 特征提取:通过对选择的特征进行转换形成新的突出特征
  4. 聚类:基于某种距离函数进行相似度度量,获取簇
  5. 聚类结果评估:分析聚类结果,如距离误差和(SSE)等

性能度量

  1. K-means算法: 对于K-means算法,轮廓系数和Calinski-Harabasz指数是常用的评价指标。由于K-means算法假设簇的形状为球形,所以在使用这些指标时需要注意数据集的分布是否符合这一假设。
  2. 层次聚类算法: 层次聚类算法可以使用轮廓系数、Calinski-Harabasz指数、Davies-Bouldin指数和Dunn指数等指标来评估其聚类结果。这些指标可以帮助我们评估层次聚类算法生成的层次结构的质量和稳定性。
  3. 密度聚类算法: 对于密度聚类算法,Davies-Bouldin指数和Dunn指数通常是比较合适的评价指标。这些指标可以帮助我们评估密度聚类算法生成的簇的紧密度和分离度。

  1. 轮廓系数(Silhouette Coefficient): 轮廓系数是一种衡量聚类结果紧密度和分离度的指标。对于每个样本,计算它与同簇其他样本的平均距离(a)以及与最近其他簇中所有样本的平均距离(b),然后计算轮廓系数为 ?=?−?max⁡(?,?)s=max(a,b)b−a。轮廓系数的取值范围在 [-1, 1],值越接近1表示聚类结果越好。
  2. Calinski-Harabasz指数: Calinski-Harabasz指数(也称为方差比准则)是一种基于簇间方差和簇内方差的指标。计算公式为 ??=??×?−??−1C**H=W**B×k−1N−k,其中 ?B 表示簇间方差,?W 表示簇内方差,?N 表示样本数量,?k 表示簇的数量。Calinski-Harabasz指数的值越大表示聚类效果越好。
  3. Davies-Bouldin指数: Davies-Bouldin指数是一种基于簇内紧密度和簇间分离度的指标。对于每个簇,计算其簇内样本之间的平均距离(intra-cluster distance),然后计算该簇与最近其他簇中心之间的距离(inter-cluster distance)。Davies-Bouldin指数定义为各个簇的平均相似度与簇中心之间的最大距离的比值,指数越小表示聚类效果越好。
  4. Dunn指数: Dunn指数是一种衡量簇内紧密度和簇间分离度的指标。它是所有簇之间最小距离(inter-cluster distance)与所有簇内最大距离(intra-cluster distance)的比值。Dunn指数越大表示聚类效果越好。
  5. CHI平方统计量(CHI-Square statistic): 用于评估聚类结果的显著性,即判断聚类结果是否显著地不同于随机情况。CHI平方统计量越大表示聚类结果越显著。

距离计算

聚类分类

原型聚类

k-means

  1. 初始化k个簇
  2. 分类数据点到最近的最近的簇(距离最近)
  3. 跟新n个簇内的数据点均值,作为新的聚类中心
  4. 迭代
  5. 输出

手冢图判断几个k

k-means++

初始选择聚类中心的方法不同

逐个选取?个簇中心,且离其它簇中心越远的样本点越有可能被选为下一个簇中心

k的缺点

只能应用与球形数据,必须需要求n个k

学习向量量化

高斯混合聚类

密度聚类

DBSCAN

  1. 核心对象:对于给定的半径 ε(epsilon)和最小邻域内点的数量 MinPts,如果一个数据点的ε-邻域(以该点为中心,半径为ε的区域内的所有点)包含至少 MinPts 个数据点,则该数据点被称为核心对象。
  2. 直接密度可达:如果一个数据点在另一个数据点的ε-邻域内,并且该数据点是核心对象,则该数据点可以被直接密度可达于该核心对象。
  3. 密度可达:如果存在一系列核心对象,使得从第一个核心对象到最后一个核心对象的每个核心对象都是直接密度可达的,则第一个核心对象和最后一个核心对象是密度可达的。
  4. 密度连接:如果存在一个核心对象集合,使得任意两个核心对象都是密度可达的,则这两个核心对象是密度连接的

评价方法

**影像法:**该技术测量集群之间的可分离性。首先,找出每个点与集群中所有其他点之间的平均距离。然后测量每个点和其他簇中的每个点之间的距离。我们将两个平均值相减,再除以更大的那个平均值。

我们最终想要的是一种较高(比如最接近1)的分数,表明存在较小的簇内平均距离(紧密簇)和较大的簇间平均距离(簇间分离良好)。

**集群可视化解释:**获得集群之后,解释每个集群非常重要。这通常是通过合并原始数据集和集群并可视化每个集群来完成的。每个集群越清晰越独特越好。我们将在下面实现这个过程。

DBSCAN的优点

  • 不需要像KMeans那样预先确定集群的数量
  • 对异常值不敏感
  • 能将高密度数据分离成小集群
  • 可以聚类非线性关系(聚类为任意形状)

DBSCAN的缺点

  • 很难在不同密度的数据中识别集群
  • 难以聚类高维数据
  • 对极小点的参数非常敏感

层次聚类

凝聚层次聚类(agglomerative hierarchical clustering)

是从下往上的聚类过程。它开始时每个数据点都被视为一个单独的类别,然后通过合并最接近的类别来逐步构建聚类的层次结构。该过程一直持续到所有数据点都合并到一个类别中,形成一棵聚类树(或称为树状图)

  1. 初始化:将每个数据点视为一个单独的类别。
  2. 计算距离:计算每一对数据点之间的距离或相似度。通常使用欧氏距离、曼哈顿距离、相关系数等作为距离度量。
  3. 合并最近的类别:找到距离最近的两个类别,将它们合并为一个新的类别。合并的方式可以根据不同的链接方法(例如单链接(最近距离)、完全链接(最远距离)、平均链接(平均距离))来确定。这里所说的距离是类别之间的距离,可以使用最小距离、最大距离或者平均距离等不同的方法。
  4. 更新距离矩阵:更新距离矩阵,将新合并的类别与所有其他类别之间的距离重新计算。常见的更新方法包括单链接中取两个类别中距离最小的数据点之间的距离,完全链接中取两个类别中距离最大的数据点之间的距离,平均链接中计算两个类别中所有数据点两两之间的平均距离等。
  5. 重复步骤3和4:重复合并最近的类别和更新距离矩阵的过程,直到所有的数据点都被合并到一个类别中,或者达到预先设定的聚类数目。
  6. 输出结果:得到聚类结果,可以通过截断聚类树来获得不同数目的聚类,也可以根据需要将树状结构转换为平面的聚类结果

分裂层次聚类(divisive hierarchical clustering)

  1. 初始化:将所有数据点视为一个整体类别。
  2. 计算距离:计算当前类别中每一对数据点之间的距离或相似度。通常使用欧氏距离、曼哈顿距离、相关系数等作为距离度量。
  3. 选择分裂类别:选择当前类别中最不相似的类别进行分裂。分裂的标准可以根据不同的方法来确定,常见的方法包括最大距离、最小距离、平均距离等。
  4. 分裂类别:根据选定的分裂标准将选择的类别进行分裂。分裂的方式通常是根据数据点之间的距离来划分子类别,可以使用 K-means 等聚类算法将选定的类别分裂为两个或多个子类别。
  5. 更新距离矩阵:在分裂后,重新计算分裂后的子类别与其他类别之间的距离。这样可以确保分裂后的类别不再参与到下一次的分裂过程中。
  6. 重复步骤3到5:重复选择最不相似的类别进行分裂,直到满足某个停止条件。常见的停止条件包括达到预定的聚类数目、达到某个阈值的类别间距离、或者分裂的类别已经无法再细分等。
  7. 输出结果:得到聚类结果,每次分裂生成的子类别形成一个聚类树,可以根据需要将树状结构转换为平面的聚类结果。

集成学习

Bagging(随机森林)

步骤:

  • 采用重抽样方法(有放回抽样)从原始样本中抽取一定数量的样本
  • 根据抽出的样本计算想要得到的统计量T
  • 重复上述N次(一般大于1000),得到N个统计量T
  • 根据这N个统计量,即可计算出统计量的置信区间

简单的来说,就是建立n个无关系的决策树,随后各个决策树分别计算出相对应的结果后进行操作(加权求平均)

Boosting(AdaBoost)

学习一系列弱分类器,并将其组合为一个强分类器。具体步骤如下:

刚开始训练时对每一个训练例赋相等的权重,然后用该算法对训练集训练t轮,每次训练后,对训练失败的训练例赋以较大的权重,也就是让学习算法在每次学习以后更注意学错的样本,从而得到多个预测函数

AdaBoost

  1. 加权投票:在Adaboost中,每个弱学习器都有一个权重,代表其在最终预测中的重要性。初始时,所有样本的权重都是相等的。在每一轮迭代中,根据上一轮模型的性能,每个样本的权重会被调整,以便下一轮更多地关注被错误分类的样本。
  2. 重点关注错误样本:Adaboost的核心思想是关注那些被前一轮弱分类器错误分类的样本。通过增加这些样本的权重,下一轮模型将更加关注这些难以分类的样本,从而试图纠正上一轮的错误。
  3. 序列化训练:Adaboost是一个序列化的算法,每一轮只训练一个弱学习器。在每一轮中,样本的权重会被调整,以便让新的弱学习器更加关注之前被错误分类的样本。
  4. 加权组合:最终的预测结果是通过加权组合所有弱学习器的预测结果而得到的。弱学习器的权重通常与其在训练过程中的性能相关。
  5. 弱学习器的选择:Adaboost可以使用各种类型的弱学习器,例如决策树、神经网络等。通常来说,弱学习器的选择取决于问题的性质和数据的特点。

GBDT梯度提升树

  1. 基于梯度的优化:与Adaboost不同,GBDT使用了梯度下降算法来最小化损失函数。每一轮迭代中,GBDT会计算损失函数对模型预测值的梯度,然后训练一个新的弱学习器来拟合这个梯度。
  2. 残差拟合:在GBDT中,每一轮迭代的目标是拟合上一轮模型的残差(或负梯度),而不是直接拟合标签。这意味着每个新的弱学习器都在尝试修正之前模型的预测错误。
  3. 决策树作为基学习器:GBDT通常使用决策树作为基学习器。在每一轮中,训练一个新的决策树,然后将它与之前的模型进行组合。
  4. 平行训练:GBDT的训练过程是可并行化的,因为每个决策树可以独立地训练。这使得GBDT在大规模数据集上的训练速度较快。
  5. 不断减小损失函数:GBDT的目标是不断减小损失函数,直到达到某个预定的停止条件(如达到最大迭代次数或达到一定的性能水平)为止。

XGBoost

  1. 优化目标:XGBoost的优化目标是最小化带有正则化项的损失函数。这个损失函数由两部分组成:一个代表数据拟合的损失项,通常是均方误差(MSE)或对数损失(Log Loss),另一个代表模型复杂度的正则化项,用于控制模型的复杂度以避免过拟合。
  2. 梯度提升:与传统的梯度提升算法类似,XGBoost也是通过迭代地训练一系列决策树,并将它们组合成一个模型。每一轮迭代都会训练一个新的决策树,使得前一轮的残差(或梯度)得到更好地拟合。
  3. 特征分裂策略:XGBoost使用了一种称为”分位数分割”的策略来确定特征的分裂点,这种策略能够更高效地选择最佳的分割点,从而减少了模型训练的时间。
  4. 并行化处理:XGBoost在实现上进行了优化,利用了并行计算的能力,可以在多核CPU上高效地并行训练模型,从而加速了训练过程。
  5. 提供了接口和工具:XGBoost提供了丰富的接口和工具,方便用户进行模型训练、参数调优和模型评估等操作。同时,XGBoost还提供了Python、R、Java等多种编程语言的接口,使得它可以方便地与各种数据处理和机器学习工具集成使用。

LightGBM

  1. 基于直方图的决策树算法:LightGBM采用了一种基于直方图的决策树算法,在构建每棵树时会先对特征进行离散化,然后根据特征的直方图来选择最佳的分裂点。这种算法能够减少内存的使用和计算量,并且在处理大规模数据集时具有更高的效率。
  2. 并行化处理:LightGBM在训练过程中充分利用了并行计算的能力,可以在多核CPU上高效地并行训练模型。此外,LightGBM还支持GPU加速,进一步提高了训练速度。
  3. 互斥特征捆绑:LightGBM引入了一种称为互斥特征捆绑(Exclusive Feature Bundling)的技术,通过将高维度的特征进行组合,减少了特征空间的维度,从而降低了模型的复杂度。
  4. 直方图做差加速:LightGBM还采用了一种称为直方图做差加速(Histogram Difference Acceleration)的技术,通过利用前一轮迭代的直方图信息,加速当前迭代中的直方图构建和特征分裂,进一步提高了训练速度。
  5. Leaf-wise生长策略:LightGBM采用了一种称为Leaf-wise的生长策略,与传统的Level-wise生长策略相比,可以更快地找到最优的分裂点,从而加速了模型训练的过程。

区别:

XGBoost的优点:

  • 训练速度较快:XGBoost采用了一些优化技术,如特征分裂策略和并行化处理,使得其在处理大规模数据集时训练速度很快。
  • 模型性能较好:XGBoost在模型性能上表现出色,通常能够取得较高的预测准确度。
  • 有效地处理缺失值:XGBoost能够自动处理缺失值,无需对数据进行额外的处理。

XGBoost的缺点:

  • 内存占用较高:由于XGBoost需要存储大量的决策树和额外的数据结构,因此在处理大规模数据集时可能会占用较多的内存。
  • 参数调优较复杂:XGBoost具有许多参数需要调优,而且某些参数的选择对模型性能有很大的影响,因此调参相对复杂。

LightGBM的优点:

  • 训练速度非常快:LightGBM采用了基于直方图的决策树算法和其他优化技术,使得其在处理大规模数据集时训练速度非常快。
  • 内存利用率高:由于LightGBM使用了直方图的压缩表示和互斥特征捆绑技术,因此在内存利用率上表现优秀。
  • 高维特征处理能力强:LightGBM通过互斥特征捆绑技术和直方图做差加速技术,能够有效地处理高维度的特征。

LightGBM的缺点:

  • 对噪声和异常值敏感:由于LightGBM使用了Leaf-wise生长策略,容易出现过拟合,对噪声和异常值比较敏感。
  • 需要调优的参数较多:LightGBM有许多需要调优的参数,且某些参数对模型性能的影响较大,因此调参相对复杂。

Adaboost和GBDT的优缺点:

  • Adaboost和GBDT在性能和使用方面相对较为传统,优点包括易于理解、实现和调优,适用于各种数据类型和问题。但相对于XGBoost和LightGBM,它们在训练速度上可能较慢,尤其是对于大规模数据集。
  • Adaboost和GBDT相对于XGBoost和LightGBM,它们的模型性能可能较低,因为它们可能会因为过拟合或欠拟合而导致预测准确度下降。

支持向量机(SVM)

期待后续更新。。。

站内搜索

没有找到内容!