机器学习
机器学习通用工作流程
定义问题:分类\回归
获取数据
分析数据
准备数据
研究模型
微调模型
实验验证与模型评估
启动监视维护模型
一、机器学习的概述
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-均值聚类的执行步骤如下:
- 随机选取k个点作为簇的中心
- 将每个其他点聚类到最近的簇中心中
- 重新计算类的中心和均值
- 判断是否符合终止条件,如果符合,便退出;如果不符合,转到1
- 终止条件可以包括:中心点不发生显著的改变,每个聚类的成员不发生改变,达到最大的迭代次数。
- 学习向量量化
学习向量量化算法是一种监督学习方式,输入数据需要包括特征和标签。
学习向量量化算法的执行步骤如下:
- 选取class_num个标准特征向量,作为原型。
- 逐个遍历没有被分类的向量,将其归类到最相似的标准特征向量中。
- 如果2中分类正确,那么正向更新标准的特征向量。如果2中分类错误,则反向更新标准特征向量。重复2
学习向量量化算法是一种监督学习方式,这种方式有使用空间较少的特点。
- 高斯混合聚类高斯
高斯混合聚类是将数据的分布看作多个高斯分布的和。
密度聚类
- DBSCAN算法
密度聚类的算法流程:
- 找到核心点,核心点就是如果一个点的e邻域中,有大于k个点,那么改点就是核心点。
- 随机选取一个核心点作为初始聚类点
- 遍历核心点邻域内的所有点,先将这些点加入到簇中,然后对于新加入到簇中的核心点,继续进行聚类(重复3)。
- 如果所有核心点都被添加到聚类中,就转到5。如果还有点没有添加到聚类中,转到2
- 将还没有聚类的点标记为噪声点。
层次聚类
十、降维与度量学习
弱监督学习与半监督学习
弱监督学习和半监督学习是从部分有监督,部分没有监督的数据中进行学习。
数据分布的三种假设
为了通过有标签的数据推理出无标签数据的标签,人们提出了三种数据分布的假设
- 平滑假设
如果两个点由稠密的数据相连,那么这两个点的标签是相近的。 - 聚类假设
在同一个聚类中的数据标签是相同的 - 流形假设
高维数据通过某种映射,映射到低维度,那么前两条假设依旧成立。
self training
由于弱监督学习中有的标签有标记,有的标签没有标记。self-learning的思想是将每次预测时,confidence较大的的部分加入到训练集中。
- 对于分类任务,将分类的confidence较大的加入到训练集中
- 对于回归任务,先进行一次预测。然后将label和伪标签合并进行预测,取loss较小的加入到数据集中。
生成式半监督模型
低密度分离
基于图的方法
基于分歧的方法
self training 将没有标签,但是confidence高的数据作为训练数据,不断迭代。

浙公网安备 33010602011771号