机器学习

机器学习通用工作流程

定义问题:分类\回归
获取数据
分析数据
准备数据
研究模型
微调模型
实验验证与模型评估
启动监视维护模型

一、机器学习的概述

1. 机器学习的五大流派

机器学习大致出现五大流派:符号主义、贝叶斯、联结主义、进化主义、行为类推主义。

  • 符号主意:通过符号和公式表达事物的规律,代表模型有专家系统、决策树、逻辑回归等。
  • 贝叶斯主义:代表模型贝叶斯网络、朴素贝叶斯分类器、马尔可夫链蒙特卡洛(MCMC)
  • 联结主义:通过相互连接的神经元表达知识,代表模型有人工神经网络(ANN)、卷积神经网络(CNN)、递归神经网络(RNN)等深度学习模型。
  • 进化主意:代表模型遗传算法(Genetic Algorithm)、遗传编程(Genetic Programming)、进化策略(Evolutionary Strategies)等。
  • 行为类推主意:代表模型案例推理(Case-Based Reasoning, CBR)、K近邻算法(k-Nearest Neighbors, k-NN)

2. 机器学习算法的分类

  • 监督学习:监督学习的任务类型包括,回归分析、统计分析和分类
  • 非监督学习: 常见的非监督学习任务类型包括,
  • 半监督学习:

二、机器学习模型的评估与选择

1. 过拟合和欠拟合问题

过拟合是在训练集上表现优秀,但是在验证集上表现较差。
欠拟合在所有数据集上都表现得不好。
过拟合的一个例子是,假定在CV任务中,在训练集和测试集上,某个类别a都有椒盐噪声。在验证集上,便将所有有噪声的数据都识别为了类别a。

  • 解决过拟合的一个方法:正则化
    正则化可以防止模型的权重过大,由于某个权重过大会使得对某个特征点的关注度过高,进而导致过拟合。因此,正则化可以防止过拟合。

$$
\text{Loss}{L1} = \text{Loss}{\text{原始}} + \lambda \sum_{i=1}^{n} |w_i|
$$
$$
\text{Loss}{L2} = \text{Loss}{\text{原始}} + \lambda \sum_{i=1}^{n} w_i^2
$$

2. 训练集和测试集的划分

训练集和测试集划分的三个主要方法:
留出法、交叉验证法、自助发

  • 留出法
    留出法直接将数据集划分为两个互斥的集合。
  • 交叉验证法
    将数据集分层采样,划分为k个大小相似的互斥子集,每次训练选取k-1个集合作为训练集,剩下一个作为测试集。
  • 自助法
    直接在全集中进行有放回的采样。有数学证明,有0.368的数据不会被采样。

3. 模型的性能度量方法

三、决策树(decision tree)

3.1 决策树的概述:

决策树是一个树形结构的模型,每个分支节点是一个判断,每个叶节点是一个分类的类型。
决策树的训练过程是,将输入数据自上而下通过每个节点,如果在一个节点中,所有数据都属于同一个类别,那么这个节点就是一个叶节点。如果数据属于不同的类别,那么就将这个节点分裂。

3.2 决策树的划分选择

决策树中,我们希望的情况下,越上层的节点对数据的区分度应该越大,越下层的节点对数据的区分度应该越小。为了将区分程度大的特征放在树的上层位置,当前研究人员提出了几种数据划分策略,这些策略主要研究特征对分类结果的影响。

  • 信息熵
    信息熵的公式为
    [
    H(X) = - \sum_{i=1}^{n} P(x_i) \log_2 P(x_i)
    ]
    显然, 可以不严谨地讲,对于划分平均程度相同的分类方式,划分的类别越多,信息熵越大。
    对于分类类别数相同的划分,划分的越平均信息熵越大。

  • 信息增益
    信息增益的公式为
    [
    H(D | A) = \sum_{v \in \text{Values}(A)} \frac{|D_v|}{|D|} H(D_v)
    ]
    信息增益是进行一次划分之后,信息熵的减少程度。

  • 基尼指数
    基尼指数是指随机选取两个样本,分属于不同类别的概率。
    基尼指数的公式为:

[
Gini = 1 - \sum_{k=1}^{K} p_k^2
]
这个公式的含义是,使用容斥原理,用1减去两个样本属于相同类别的概率。

  • 信息增益和基尼指数的比较
    大多数情况下,信息增益和基尼指数得出的划分策略是相同的,但是基尼指数的计算较为简单。

3.3 决策树的剪枝

稍加思考可知,对于某个数据集D,只要决策树的深度和宽度足够大,那么一定可以在训练数据集上达到100%的准确率,但是这种情况会导致树的空间复杂度过大。此外,由于训练集不可能穷尽所有的情况,因此,还会导致过拟合。
决策树的剪枝分为预剪枝和后剪枝。其中,预剪枝是指在决策树生成的时候进行剪枝。后剪枝是指在决策树生成之后进行剪枝。

3.3.1 决策树的预剪枝

决策树的预剪枝包括:最大深度限制、最小样本数限制、最小信息增益/基尼指数限制、最小叶节点样本数限制、基于交叉验证的早停 和 最大叶节点数限制。
西瓜树上样例所讲的是基于交叉验证的早停。

3.3.2 决策树的后剪枝

后剪枝是在决策树构造完成之后进行剪枝,后剪枝也是基于预测的准确率来进行剪枝。与预剪枝不同的是,预剪枝是在自顶而下构造决策树时进行的剪枝,后剪枝是自底而上的剪枝。

四、支持向量机

支持向量机是一个用于解决分类问题的模型。
SVM的核心思想是将数据映射到高维空间,然后在该空间中找到一个最优的超平面(hyperplane)来分割不同类别的数据。

支持向量机的基本原理

  • 假设超平面的公式为
    w·x + b = 0
  • 对于二分类问题,决策函数是
    f(x) = sign(w·x + b)
  • 对于某个正类,和某个反例,有支持向量
    wx+b=1
    wx+b=-1
    由点到直线的距离公式,则两个支持向量之间的间隔为2/w
  • 现在要最大化2/w,只需要最小化w^2
    由于所有的xy都满足
    yi(w·xi + b) ≥ 1
    构造拉格朗日乘数
    L(w,b,α) = 1/2||w||² - ∑αi[yi(w·xi + b) - 1]
    (求解拉格朗日乘数就是求偏导,然后偏导数等于0,解方程)
  • 最后化简得到对偶问题
    最大化:
    L(α) = ∑αi - 1/2∑∑αiαjyiyj(xi·xj)

满足约束:
∑αiyi = 0
αi ≥ 0, i = 1,2,...,n

  • 求解上面的式子(对L求偏导,找到极值点,并验证)
    可以解得w和b
    将两个支持向量求平均就得到超平面

核函数

核函数(Kernel Function)是一种将低维空间中的数据映射到高维空间中的函数。核函数在支持向量机(SVM)等机器学习算法中被广泛应用,特别是在处理非线性可分的数据时,核函数可以将其映射到高维空间中,从而使得数据可以被线性分割。

惩罚因子

惩罚因子(Penalty Parameter)是支持向量机(SVM)中的一个重要参数,用于控制模型复杂度和分类错误之间的权衡。在SVM中,分类错误和模型复杂度之间存在权衡关系,惩罚因子用于控制这个权衡关系。

具体来说,惩罚因子越大,模型复杂度越小,分类错误率越高;惩罚因子越小,模型复杂度越大,分类错误率越低。这是因为惩罚因子越大,模型会更加倾向于找到一个简单的超平面,从而减少分类错误率,但同时也会导致一些训练数据被错误分类。相反,惩罚因子越小,模型会更加倾向于找到一个复杂的超平面,从而减少分类错误率,但同时也会导致模型过拟合,从而在测试数据上表现不佳。

在SVM中,惩罚因子通常与损失函数一起使用,用于优化模型的参数。常见的损失函数包括hinge loss和squared hinge loss等。这些损失函数可以帮助SVM找到最优的超平面,并最小化分类错误和模型复杂度之间的权衡。

总的来说,惩罚因子是SVM中一个非常重要的参数,需要根据具体问题和数据集进行调整,以获得最佳的分类性能。

五、神经网络

这一部分请见深度学习。

七、贝叶斯分类器

贝叶斯公式

[
P(A|B) = \frac{P(B|A) \cdot P(A)}{P(B)}
]
其中:

  • ( P(A|B) ) 是在事件 ( B ) 发生的情况下,事件 ( A ) 发生的后验概率。
  • ( P(B|A) ) 是在事件 ( A ) 发生的情况下,事件 ( B ) 发生的条件概率。
  • ( P(A) ) 是事件 ( A ) 的先验概率。
  • ( P(B) ) 是事件 ( B ) 的边缘概率(归一化常数)。

朴素贝叶斯分类器

[
P(c | \mathbf{x}) = \frac{P(c) P(\mathbf{x} | c)}{P(\mathbf{x})} = \frac{P(c)}{P(\mathbf{x})} \prod_{i=1}^{d} P(x_i | c)
]

其中:

  • ( P(c | \mathbf{x}) ) 是类别 ( c ) 的后验概率。
  • ( P(c) ) 是类别 ( c ) 的先验概率。
  • ( P(\mathbf{x} | c) ) 是在给定类别 ( c ) 时,特征向量 ( \mathbf{x} ) 的条件概率。
  • ( P(\mathbf{x}) ) 是特征向量 ( \mathbf{x} ) 的边缘概率。
  • ( P(x_i | c) ) 是在类别 ( c ) 的条件下,第 ( i ) 个特征 ( x_i ) 的条件概率。
  • ( d ) 是特征的数量。

上述公式即为朴素贝叶斯分类器的公式。
其中,第一个等号即位贝叶斯公式。第二个等号即位朴素贝叶斯分类器。

朴素贝叶斯分类器将一个特征上,每个特征点出现的条件概率计算出来,然后做乘法。
朴素贝叶斯分类器之所以叫做朴素,是因为朴素贝叶斯分类器为了简化计算,认为一个特征向量中,各个特征点是相互独立的。
例如挑西瓜时,好西瓜一般同时具备响声清脆和纹理较绿的特征,这两个特征的出现具有关联性。但是朴素贝叶斯分布简单地认为这两个特征是独立的。

因此,贝叶斯分类器的训练过程就是通过数据分布,计算各种概率。

/*
1. 问题描述
我们将这个问题转化为预测“好瓜”和“坏瓜”的问题。假设你有以下三个概率:

某种特征(例如色泽青绿)出现在好瓜中的概率:P(色泽青绿 | 好瓜) = 0.8
好瓜的先验概率:P(好瓜) = 0.5
总的色泽为青绿的西瓜的概率:P(色泽青绿) = 0.4
现在的目标是,在已知西瓜是色泽青绿的情况下,预测它是好瓜的概率,即后验概率 P(好瓜 | 色泽青绿)。

2. 应用贝叶斯定理
根据贝叶斯定理,后验概率的计算公式为:

P(好瓜 | 色泽青绿) = [P(色泽青绿 | 好瓜) * P(好瓜)] / P(色泽青绿)

将已知值代入:

P(好瓜 | 色泽青绿) = (0.8 * 0.5) / 0.4

3. 计算后验概率
P(好瓜 | 色泽青绿) = 0.4 / 0.4 = 1.0

*/
  • 对于连续值的处理方法:
    对于取值为连续值的特征,一般假定其分布属于高斯分布,然后通过计算概率密度求解。概率密度可以代表某个属性取得某个值的概率。
  • 朴素贝叶斯分类器的拉普拉斯修正:
    由于有些特征的取值可能没有在训练数据中出现,概率为0。
    例如西瓜的颜色可能有深绿色绿色、白色、浅绿色。其中白色瓜没有在训练数据中出现,概率为0,这是就需要进行修正。
    [
    P(X_i | C) = \frac{N_{i, C} + 1}{N_C + K}
    ]

其中:

  • ( P(X_i | C) ):特征 ( X_i ) 在类别 ( C ) 下的条件概率。
  • ( N_{i, C} ):在类别 ( C ) 下特征 ( X_i ) 出现的次数。
  • ( N_C ):类别 ( C ) 的总样本数。
  • ( K ):特征的取值数(即类别数)。

通过引入拉普拉斯修正,可以避免零概率的问题,从而提高模型的鲁棒性。

半朴素贝叶斯分类器

半朴素贝叶斯分类器考虑了特征之间的相互关联性,半朴素贝叶斯分类器认为一个特征仅和一个其他特征具有关联性。在建模时,需要找到一个关联性最大的特征,称为独依赖。

  • 条件互信息:
    条件互信息表示两个信息之间互相影响的程度。
  • SPODE方法
    SPODE方法为每个特征找到一个父特征。通过交叉验证的方法找到每个特征的父特征。
  • TAN方法
    TAN方法计算特征两两之间的条件互信息,之后通过最大生成树算法,找到每个特征关联性最大的特征。

贝叶斯网

EM算法(Expectation-Maximization Algorithm)

执行E步,计算隐藏变量的期望值。
执行M步,利用E步的结果更新模型参数。
重复E步和M步,直到模型参数收敛,或者达到设定的迭代次数。

K-means算法就是EM算法,
首先,猜测(期望)几个中心点,然后根据中心点进行聚类。(E步)
然后根据新的中心点,计算平均值(M步)
最终直到平均值不改变。

八、集成学习

集成学习是将多个学习器组织在一起,例如将多个决策树组织在一起,将决策树和贝叶斯分类器组织在一起。
集成的个体应该好而不同。
集成学习分为两大类,一类是学习器个体之间存在强依赖性,需要逐个顺序进行学习,代表算法是boosting算法。另一类是学习器之间没有强依赖性,可以并行的学习,代表算法是bagging和随机森林算法。

AdaBoost算法

AdaBoost算法是一种boosting算法。Adaboost逐个训练所有的分类器,并通过调整数据的权重,使得后面训练的分类器效果优于前面训练的分类器。最终,还会根据各个分类器的效果给分类器附上权重。

  • AdaBoost算法的流程
Input: 
    - Training data: (x_1, y_1), (x_2, y_2), ..., (x_N, y_N), where x_i 是第 i 个样本,y_i ∈ {-1, 1} 是第 i 个样本的标签。
    - Number of iterations (T): 弱分类器的数量。

Output:
    - Final strong classifier: H(x)

1. Initialize sample weights:
    w_1(i) = 1 / N for all i = 1, 2, ..., N   # 初始化每个样本的权重为相等的值

2. For t = 1 to T:   # 迭代 T 轮
    a. Train a weak classifier h_t(x) using weights w_t   # 使用当前的样本权重训练弱分类器
    
    b. Compute the weighted error of the weak classifier:
        ε_t = sum(w_t(i) * I(h_t(x_i) ≠ y_i)) / sum(w_t(i))  # 计算当前弱分类器在加权样本上的分类误差,I 是指示函数。可以不除sum,已经归一化
    
    c. Compute the classifier weight:
        α_t = 0.5 * ln((1 - ε_t) / ε_t)   # 计算分类器权重

    d. Update sample weights:
        w_{t+1}(i) = w_t(i) * exp(-α_t * y_i * h_t(x_i)) for all i = 1, 2, ..., N
        # α_t是上一个分类器t的权重,y是真实值标签,取值为{-1,+1}
        # 更新样本权重,如果分类正确,权重减小;如果分类错误,权重增大
    
    e. Normalize the weights:
        w_{t+1}(i) = w_{t+1}(i) / sum(w_{t+1}(j))   
        # 对样本权重进行归一化处,这一步对所有的样本权重进行归一化

3. Output the final strong classifier:
    H(x) = sign(sum(α_t * h_t(x) for t = 1 to T))   # 最终的强分类器是每个弱分类器加权后的投票结果

上述代码中,分类器的权重计算公式,函数图像如下:

由上图可以看出,当错误率等于0.5时,这是约等于随机分配,分类器的权重赋值为0

Bagging算法

  • Bagging算法的采样采用自助采样法(bootstrap sampling)在采样时,每次将采样得到的元素放回。
    最终,会采样出T个含有m个样本的训练集。数据集中还有约36.8%的数据没有被采样,这些数据可以用作测试集。
  • Bagging算法通过T个数据集训练出来T个分类器,然后通过简单投票法结合在一起。

随机森林

随机森林就是将很多决策树整合到一起,最好每个决策树关注不同的特征,做到好而不同。

九、聚类

聚类是一种无监督学习方法,聚类是将不同的数据分成不同的类别(子集)。

聚类的评价指标

  • 聚类的评价指标有两个:分别是簇内相似度和簇间相似度。显然,我们更希望提高簇内相似度,并降低簇间相似度。
  • 聚类的评价指标还可以分为内部指标和外部指标。外部指标是指将聚类结果和一个基准模型相比较,内部指标是指直接对模型进行评价而不参考其他模型。

原型聚类

先确定一个原型,然后不断地对原型进行更新迭代。
原型聚类的代表性算法有三种,分别是均值聚类、学习向量量化、高斯混合聚类。

  • 均值聚类
    均值聚类的原型就是平均值。
    确定一个簇的划分,然后计算均值向量,之后再确定簇的划分,直到簇的划分不发生改变。
    k-均值聚类难以挖掘到密度差异。
  • k-均值聚类的执行步骤如下:
  1. 随机选取k个点作为簇的中心
  2. 将每个其他点聚类到最近的簇中心中
  3. 重新计算类的中心和均值
  4. 判断是否符合终止条件,如果符合,便退出;如果不符合,转到1
  5. 终止条件可以包括:中心点不发生显著的改变,每个聚类的成员不发生改变,达到最大的迭代次数。
  • 学习向量量化
    学习向量量化算法是一种监督学习方式,输入数据需要包括特征和标签。
    学习向量量化算法的执行步骤如下:
  1. 选取class_num个标准特征向量,作为原型。
  2. 逐个遍历没有被分类的向量,将其归类到最相似的标准特征向量中。
  3. 如果2中分类正确,那么正向更新标准的特征向量。如果2中分类错误,则反向更新标准特征向量。重复2

学习向量量化算法是一种监督学习方式,这种方式有使用空间较少的特点。

  • 高斯混合聚类高斯
    高斯混合聚类是将数据的分布看作多个高斯分布的和。

密度聚类

  • DBSCAN算法
    密度聚类的算法流程:
  1. 找到核心点,核心点就是如果一个点的e邻域中,有大于k个点,那么改点就是核心点。
  2. 随机选取一个核心点作为初始聚类点
  3. 遍历核心点邻域内的所有点,先将这些点加入到簇中,然后对于新加入到簇中的核心点,继续进行聚类(重复3)。
  4. 如果所有核心点都被添加到聚类中,就转到5。如果还有点没有添加到聚类中,转到2
  5. 将还没有聚类的点标记为噪声点。

层次聚类

十、降维与度量学习

弱监督学习与半监督学习

弱监督学习和半监督学习是从部分有监督,部分没有监督的数据中进行学习。

数据分布的三种假设

为了通过有标签的数据推理出无标签数据的标签,人们提出了三种数据分布的假设

  • 平滑假设
    如果两个点由稠密的数据相连,那么这两个点的标签是相近的。
  • 聚类假设
    在同一个聚类中的数据标签是相同的
  • 流形假设
    高维数据通过某种映射,映射到低维度,那么前两条假设依旧成立。

self training

由于弱监督学习中有的标签有标记,有的标签没有标记。self-learning的思想是将每次预测时,confidence较大的的部分加入到训练集中。

  • 对于分类任务,将分类的confidence较大的加入到训练集中
  • 对于回归任务,先进行一次预测。然后将label和伪标签合并进行预测,取loss较小的加入到数据集中。

生成式半监督模型

低密度分离

基于图的方法

基于分歧的方法

self training 将没有标签,但是confidence高的数据作为训练数据,不断迭代。

posted @ 2025-08-05 15:21  zengpf  阅读(44)  评论(0)    收藏  举报