文章目录
- 一、监督学习
- 1.1、单模型
- 1.1.1、线性回归
- 1.1.2、逻辑回归(Logistic Regression)
- 1.1.3、K近邻算法(KNN)
- 1.1.4、决策树
- 1.1.5、支持向量机(SVM)
- 1.1.6、朴素贝叶斯
- 1.2、集成学习
- 1.2.1、Boosting
- 1)Regression Decision Tree:回归树
- 2)Boosting Decision Tree:提升树算法
- 3)GBDT(Gradient Boosting Decision Tree):梯度提升决策树
- 4)XGBoost
- 1.2.2、Bagging — 随机森林
- 1.2.3、Stacking
- 二、无监督学习
- 2.1、聚类算法
- 2.1.1、K-means聚类
- 2.1.2、分层聚类
- 2.1.3、DBSCAN
- 2.2、降维(特征工程)
- 2.2.1、PCA主成分分析
- 2.2.2、SVD奇异值分解
- 2.2.3、LDA线性判别分析
机器学习按照是否有监督,我们可以做一个简单的划分,即分为监督学习和无监督学习两大类(只做了最简单的划分)
一、监督学习
- 监督学习是可以利用有标签的数据进行训练
- 因此,训练数据一定会有n个样本X和对应的n个标签GT,通过设计不同的机器学习模型输出出与GT同维度的预测结果Y
- 监督学习在此有两种划分方式:1)单模型和多模型两类;2)解决分类问题和回归问题两类。下面就按照这两种划分来对监督学习的基本模型进行介绍。
分类问题:标签和预测结果都是离散的,即就是固定的几种类别
回归问题:标签和预测结果的分布都是连续的,可能会预测一系列的实数。例如Faster RCNN和YOLO等模型的bbox分支预测的四个值就是回归问题
1.1、单模型
1.1.1、线性回归
- 线性回归属于监督学习、回归问题。那么只要建立模型,通过损失函数优化模型即可进行预测。
- 模型:因变量(预测值)为一个或多个自变量(输入样本的特征数)的线性组合
- 可以分为一元线性回归(一个变量)和多元线性回归(多个变量)
- 损失函数:损失函数就是在估计ground truth和预测值之间的差别,记住这个就行。我们定义 y i y_i yi为第i个训练样本的ground truth, h w ( x i ) h_w (x_i) hw(xi)为预测值,则损失函数为:
- 通过更新/求解W以最小化上面这个误差平方和就称为最小二乘法。有两种方法:
1)正规方程:但是当特征过于复杂时,求解很慢:
2)梯度下降法:以一元线性回归为例,a为学习率,面对训练数据规模十分庞大的任务也能较好适用
- sklearn的实现:
1)sklearn.linear_model.LinearRegression:正规方程
2)sklean.linear_model.SGDRegression:梯度下降
- 对于线性回归的正则化方法:岭回归(Ridge Regression)和Lasso回归。主要用于解决过拟合问题,又称为数据的共线性问题(即自变量之间存在多重共线性,或者自变量/特征个数多于样本量)
1)岭回归:就是在原来的误差平方和/均方误差后面加一个正则化项,即参数w的L2范数的平方作为惩罚项。会得到稠密解
2)Lasso回归:原来的误差平方和/均方误差后面加一个正则化项,即参数w的L1范数作为惩罚项。会得到稀疏解
- sklearn的实现:
1)岭回归:sklearn.linear_model.Ridge
2)Lasso回归:sklearn.linear_model.Lasso
1.1.2、逻辑回归(Logistic Regression)
- 逻辑回归非常简单,就是通过在线性回归预测结果的基础上使用激活函数sigmoid转换为0-1之间的概率从而实现二分类。
- 损失函数实际上为交叉熵损失函数,通过更新/求解W以最小化损失函数即可优化模型。
- 该损失函数源自于对数函数:可以满足当预测值(概率值)与ground truth接近时,损失函数为0
y = 1时:
y = 0时:
- sklearn的实现:
sklearn.lnear_model.LogisticRegression
1.1.3、K近邻算法(KNN)
- 基本思想:在已知样本和对应的类别下,给定一个未知样本,计算该样本与所有已知样本之间的距离/相似度,选择前K个与其距离最近的已知样本,这K个样本中的多数类别就是未知样本的类别
- 优缺点:
优点:简单易于实现;不需要训练
缺点:K值选择十分重要,过小或者过大都容易导致过拟合或者欠拟合
- sklearn的实现
sklearn.neighbors.KNeighborsClassifier
1.1.4、决策树
- 算法原理:简单来说,就是利用了二叉树(if—else语句)的思想,内部节点表示特征/属性,叶子节点表示一个类别。那么从根节点开始不断根据特征进行划分直到叶子节点,即可实现分类。因此,决策树实际上表示的是给定特征条件下,类别的条件概率分布。
- 需要注意的是,决策树既可以实现分类问题,也可以实现回归问题。
- 构建决策树通常包含3个步骤:1)特征选择(最重要的,主要衡量的指标为信息增益、信息增益比);2)决策树生成,都是从根节点开始,根据不同的准则依次选择最优特征;3)决策树剪枝
- 常用的两种决策树生成方法有:ID3和C4.5算法,分别采用了信息增益和信息增益比作为特征选择的准则:
定义训练集为D:N为训练样本个数,有K个类别 c k c_k ck,每种类别的样本数为 ∣ C k ∣ |C_k| ∣Ck∣,那么就可以先求得数据集D本身的信息熵。
对于特征A(可能有很多个特征,通过计算信息增益(比)来确定最优特征),它的取值为n个不同的值: { a 1 , a 2 , . . . a n a_1, a_2,... a_n a1,a2,...an} ,按照每种取值对数据D划分得到的子数据集的样本数为 N i N_i Ni,而每个子数据集中的K个类别对应的样本数为 N i k N_{ik} Nik
1)于是,信息熵为:
2)条件熵(对于特征A划分的每个子集,计算它的信息熵,最后再加权求和):
3) 信息增益(信息熵 - 条件熵,衡量的就是数据集不确定性减少的程度,信息熵是未划分之前数据集的不确定性程度,条件熵是划分后数据集的不确定性程度,因此信息增益越大越好):
4)信息增益的缺点:存在偏向于选取值较多的特征的问题。 极限条件下,特征A将每个样本都划分为一个子集时,条件熵为0,信息增益为最大,但这个特征A不一定为最优特征
5)信息增益比:
- CART树(Classification And Regression Tree)是可以实现分类和回归的,其中CART分类树采用的是基尼系数最小化的策略,CART回归树采用了误差平方和最小化策略。
基尼系数:
G i n i ( D ) = ∑ k = 1 K ∣ K ∣ N ( 1 − ∣ K ∣ N ) Gini(D) = \sum_{k = 1}^{K} {\frac{|K|}{N}(1 - \frac{|K|}{N} ) } Gini(D)=∑k=1KN∣K∣(1−N∣K∣)
假如对于特征A,将数据集划分为 D 1 D_1 D1和 D 2 D_2 D2两个子集,则基尼系数为:
1.1.5、支持向量机(SVM)
- SVM基于统计学习理论中的结构风险最小化原则,通过在特征空间中寻找一个最优超平面,将不同类别的样本分开,并尽量使得不同类别之间的间隔最大化。
1)分隔超平面:在二维空间中,分隔超平面是一条直线,可以将两个类别的样本点正确地划分到两侧。在三维空间中,分隔超平面是一个平面,可以将样本点分开。而在更高维的特征空间中,分隔超平面是一个超平面。
2)最大间隔:在支持向量机中,分隔超平面还要满足最大化间隔的原则。也就是说,它应该尽可能地远离两个类别的样本点,使得两个类别的支持向量到分隔超平面的距离最大化。
3)支持向量:离分隔超平面最近的样本点称为支持向量
- 对于线性可分的情况,SVM可以直接找到一个分隔超平面。求解过程需要采用凸优化问题的解法(拉格朗日乘子法+KKT条件,需要转化为对偶问题,暂时略)
- 此外,SVM通过引入松弛变量和软间隔,允许存在一定的分类错误。
- 对于线性不可分的情况,通过使用核函数,可以将低维特征映射到高维特征空间,从而实现线性不可分情况下的分类。常用的核函数有线性核(Linear Kernel)、多项式核(Polynomial Kernel)和高斯核(RBF Kernel)等。
1.1.6、朴素贝叶斯
- 朴素贝叶斯是一种生成式方法,基本思想是基于训练数据中的特征和标签之间的概率关系,通过计算后验概率来进行分类预测。
- 首先要了解贝叶斯公式,P(A|B) 表示在观察到事件 B 发生的情况下,事件 A 发生的概率;P(B|A) 表示在事件 A 发生的情况下,事件 B 发生的概率;P(A) 表示事件 A 发生的先验概率;P(B) 表示事件 B 发生的先验概率:
- 朴素贝叶斯公式是在贝叶斯公式的基础上,引入了"朴素"假设,假设特征之间相互独立。根据朴素贝叶斯公式,可以计算在给定一组特征的条件下,某个类别的后验概率。朴素贝叶斯公式如下:
其中,P(y|x1, x2, …, xn) 表示在给定特征 x1, x2, …, xn 的条件下,类别 y 的后验概率;P(x1|y), P(x2|y), …, P(xn|y) 表示在类别 y 的条件下,特征 x1, x2, …, xn 出现的概率;P(y) 表示类别 y 的先验概率;P(x1, x2, …, xn) 表示特征 x1, x2, …, xn 的联合概率。 - 计算步骤如下:
1)数据预处理:首先对输入数据进行预处理,包括特征选择、特征缩放、处理缺失值等操作。
2)计算类别的先验概率:根据训练数据,计算每个类别出现的先验概率。先验概率可以通过简单地计算每个类别在训练数据中的样本数量与总样本数量的比例得到。
3)计算特征的条件概率:对于每个特征,计算在给定类别下的条件概率。这需要计算每个特征在每个类别下的频率或概率。
4)应用贝叶斯定理:根据贝叶斯定理,利用先验概率和条件概率计算后验概率,即在给定特征条件下每个类别的概率。
4)预测分类结果:对于新的未知样本,根据计算得到的后验概率,选择具有最高概率的类别作为预测结果。
1.2、集成学习
- 集成学习是一种将不同学习模型的结果组合起来,通过投票或平均来进一步提高准确率。一般,对于分类问题用投票;对于回归问题用平均。这样的做法源于“众人拾材火焰高”的想法。
- 集成算法主要有三类:Bagging,Boosting 和Stacking。Bagging和Boosting的所有所有的个体学习器都是一个种类的,或者说是同质的。 比如都是决策树个体学习器,或者都是神经网络个体学习器。Stacking所有的个体学习器不全是一个种类的,或者说是异质的。 比如我们有一个分类问题,对训练集采用支持向量机个体学习器,逻辑回归个体学习器和朴素贝叶斯个体学习器来学习,再通过某种结合策略来确定最终的分类强学习器。
Bagging:首先对数据集采用Bootstrap采样(有放回)得到T个子数据集,再训练出T个弱学习器,最后集成到一起:分类问题吗,投票;回归问题;求均值。相当于是并行机制
Boosting:首先在训练数据集上训练出一个弱学习器T1,根据T1在每个样本上的误差率更新样本权重(误差高的,权重就大);然后基于更新后的权重重新训练弱学习器T2;迭代进行直到到达学习器指定数目T,最终将弱学习器集合到一起。相当于串行机制。
Stacking:首先先训练多个不同的模型;然后把之前训练的各个模型的输出为输入来训练一个模型,以得到一个最终的输出。
1.2.1、Boosting
- 根据组合弱学习器/基学习器的不同方式可以分为三种:AdaBoost、GBDT和XGBoost
Adaboost(Adaptive boosting):为每个弱学习器分配一个权重,最后根据权重对T个弱学习器进行加权
GBDT(Gradient Boosting Decision Tree):是一种基于梯度提升框架的集成学习算法,它是Boosting提升树算法的一种实现方式。GBDT在每一轮迭代中不是直接拟合残差,而是拟合损失函数的负梯度。
XGBoost:使GBDT工程上的优化实现。
1)Regression Decision Tree:回归树
- 回归树总体构建流程类似于分类树,区别在于:
- 回归树中,根据特征进行划分后,每一个节点都会得到一个预测值,该预测值为按特征划分后所有训练样本的平均值或加权平均值。
- 特征划分所确定的阈值的衡量标准为误差平方和或均方误差,选择可以使得误差平方和最小的特征作为最优特征
- 直到每个叶子节点上的样本一致或达到预设的终止条件(指定的叶子节点个数)时,决策树构建完成。
- 例如,下面根据给定的不同特征预测年龄:
2)Boosting Decision Tree:提升树算法
- 提升树就是根据Boosting的集成学习思想,迭代多个回归树得到来构建一个强大的集成模型——提升树。
- 构建的流程大致如下:
1)初始化:初始化第一个回归树
2)迭代训练:对于每次迭代,按照以下步骤进行训练:
a. 计算前一模型的残差(真实值与当前预测值的差异)。
b. 使用回归树来拟合残差(拟合过程就是回归树的特征选择过程,选择使误差平方和最小的特征)。其叶子节点的取值为该叶子节点上所有样本的残差的均值。
c. 更新当前模型的预测值,将之前的预测值与新增加的回归树的预测值进行累加。
3)得到最终模型:迭代训练直到达到预设的迭代次数或满足停止条件。最终的预测结果为所有回归树的预测值之和。
- 例如:训练一个提升树模型来预测年龄:训练集是4个样本,A,B,C,D年龄分别是14,16,24,26。样本中有购物金额、上网时长、经常到百度知道提问等特征。提升树的过程如下:
3)GBDT(Gradient Boosting Decision Tree):梯度提升决策树
- GBDT使用的决策树是CART回归树,也就是1)中介绍的,2)介绍的是一般情况的提升树
- GBDT(Gradient Boosting Decision Tree)是一种基于梯度提升框架的集成学习算法,与传统的提升树算法不同,GBDT在每一轮迭代中不是直接拟合残差,而是拟合损失函数的负梯度。
- 构建流程如下:
1)初始化:将训练数据的目标值作为初始预测值。
2)迭代训练:对于每次迭代,按照以下步骤进行训练:
a. 计算当前模型的残差和负梯度。
b. 使用回归树来拟合负梯度。每个回归树的训练目标是最小化损失函数的负梯度。
c. 更新当前模型的预测值,将之前的预测值与新增加的回归树的预测值进行累加。
3)得到最终模型:迭代训练直到达到预设的迭代次数或满足停止条件。最终的预测结果为所有回归树的预测值之和。
4)XGBoost
- XGBoost(Extreme Gradient Boosting)是GBDT(Gradient Boosting Decision Tree)的一个工程上的优化实现。XGBoost在GBDT的基础上引入了一些创新的技术,如正则化、并行化和缺失值处理等,以提高模型的性能和训练效率。
- XGBoost:主要做了下面几个改进:
1)正则化:XGBoost使用正则化项来限制模型的复杂度,包括L1正则化(L1 regularization)和L2正则化(L2 regularization)。通过正则化,可以防止过拟合,并提高模型的泛化能力。
2)随机采样:类似随机森林的策略。在每次迭代中,XGBoost通过随机选择一部分特征进行训练,这样可以减少训练时间,并提高模型的鲁棒性。
3)XGBoost可以自动处理缺失值,在构建决策树时,会将缺失值分配到左侧或右侧子节点中,从而无需对缺失值进行额外处理。
4)XGBoost支持多种类型的基学习器,而GBDT只有CART回归树作为基分类器
1.2.2、Bagging — 随机森林
- 随机森林就是Bagging的基学习器为决策树。
- 随机森林:很多个决策树并行放在一起,数据采样随机,特征选择随机,都是有放回的随机选取。
1.2.3、Stacking
参考链接:https://blog.csdn.net/xiao_yi_xiao/article/details/124040296
二、无监督学习
- 无监督学习的训练样本是没有标签的数据,设计相应的模型学习它的分布。
2.1、聚类算法
聚类算法就是将无标签的样本划分为不同的簇(clusters),同一簇内的样本具有相似的特征。
2.1.1、K-means聚类
- 顾名思义,K-means聚类就是选取K个点作为聚类中心,并不断取均值更新聚类中心,具体过程如下:
1)随机设定K个初始聚类中心,不一定为训练样本的点;
2)对于训练集中所有的点,计算每个点到K个聚类中心的距离,选择最近的那个聚类中心对应的簇,将其分配过去;
3)全部遍历和计算完毕后,对于K个聚类中心对应的簇,通过求均值的方法重新确定新的聚类中心;
4)重复上述过程,直到到达指定的迭代次数或者误差值
- sklearn的实现:
sklearn.cluster.KMeans()
2.1.2、分层聚类
- 分层聚类输出的是层次结构,类似树结构一样,每一层都有不同类别,这种结构比平面聚类更具信息性。
- 算法步骤:
1)初始化:把每个样本各自归为一类(每个样本自成一类);
2)计算每两个类之间的距离,也就是样本之间的相似度(本质还是计算类与类之间的距离),寻找各个类之间最近的两个类,把它们归为一类(这样,总类的数量就减少了一个);
3)重新计算新生成的这个类与各个旧类之间的距离(相似度);
4)重复上述步骤,直到所有的样本都聚为一类
- 其中最重要的就是如何判断/计算两个类之间距离/相似度:
(1)SingleLinkage:又叫做nearest-neighbor,就是取两个类中最近的两个样本之间的距离作为两个集合的距离,即:最近的两个样本之间的距离越小,
这两个类之间相似度越大,容易造成一种叫做Chaining的效果,两个类明明从“大局”上离的比较远,但由于其中个别点距离比较近就被合并了。这种合并之后Chaining效应会进一步扩大,最后得到比较松散的聚类cluster。
(2)Complete Linkage:完全是SingleLinkage的反面极端,取两个集合距离最远的两个点的距离作为两个集合的距离,其效果也刚好相反,限制非常大。
两个聚类cluster即使已经很接近了,但是只要有不配合的带你存在,就顽固到底,老死不相合并,也是不太好的办法,这两种相似度定义方法共同问题就是:只考虑了某个特有的数据,而没有考虑类数据整体的特点。
(3)Average Linkage:这种方法就是把两个集合中的点两两距离全部放在一起求平均值,相应的能得到一点合适的结果。
(4)Average Linkage的一个变种就是取两两距离的中值,与取平均值相比更加能够解除个别偏离样本对结果的干扰
参考链接:https://blog.csdn.net/u011808596/article/details/80978927
2.1.3、DBSCAN
- DBSCAN是一种密度聚类算法,全称为Density-Based Spatial Clustering of Applications with Noise。它通过将样本点分为核心点、边界点和噪音点来进行聚类。
- DBSCAN的工作原理是基于密度的,而不是基于距离的。它通过定义半径ε内的邻域来度量样本点的密度,并根据邻域内的点数量来判断某个点是否为核心点、边界点或噪音点。具体来说:
1)核心点:如果一个点的半径ε内至少有MinPts个样本点,那么这个点就是一个核心点。
2)边界点:如果一个点的半径ε内的样本点数量小于MinPts(即不属于核心店,但位于另一个核心点的邻域内),但它位于其他核心点的半径ε邻域内,那么这个点就是一个边界点。
3)噪音点:既不是核心点也不是边界点的点被认为是噪音点。
- 4种点的关系:密度直达,密度可达,密度相连,非密度相连
1)密度直达:如果P为核心点,Q在P的R邻域内,那么称P到Q密度直达。任何核心点到其自身密度直达,密度直达不具有对称性,如果P到Q密度直达,那么Q到P不一定密度直达。
2)密度可达:如果存在核心点P2,P3,……,Pn,且P1到P2密度直达,P2到P3密度直达,……,P(n-1)到Pn密度直达,Pn到Q密度直达,则P1到Q密度可达。密度可达也不具有对称性。
3)密度相连:如果存在核心点S,使得S到P和Q都密度可达,则P和Q密度相连。密度相连具有对称性,如果P和Q密度相连,那么Q和P也一定密度相连。密度相连的两个点属于同一个聚类簇。
4)非密度相连:如果两个点不属于密度相连关系,则两个点非密度相连。非密度相连的两个点属于不同的聚类簇,或者其中存在噪声点。
- 算法步骤:
输入:数据集,邻域半径 Eps,邻域中数据对象数目阈值 MinPts;
输出:密度联通簇。
处理流程如下。
1)从数据集中任意选取一个数据对象点 p;
2)如果对于参数 Eps 和 MinPts,所选取的数据对象点 p 为核心点,则找出所有从 p 密度可达的数据对象点,形成一个簇;
3)如果选取的数据对象点 p 是边缘点,选取另一个数据对象点;
4)重复(2)、(3)步,直到所有点被处理。
参考链接:https://blog.csdn.net/hansome_hong/article/details/107596543
2.2、降维(特征工程)
2.2.1、PCA主成分分析
- PCA(Principal Component Analysis) 是一种常见的数据分析方式,常用于高维数据的降维,可用于提取数据的主要特征分量。
- 第2步相当于对特征的每个维度的分布进行了归一化
- 协方差矩阵一定是特征维度 × \times ×特征维度
- 求解特征向量:Av = λv,其中λ为该特征向量对应的特征值。
2.2.2、SVD奇异值分解
2.2.3、LDA线性判别分析
- LDA的目标是通过线性投影将高维数据映射到低维空间,并在此过程中最大化类间距离同时最小化类内距离,以实现特征提取和分类的目的。
- 下面是LDA的基本步骤:
输入:包含n个样本和m个特征的训练数据集。
1)标记预处理:对每个样本进行标记,确保每个样本都属于一个已知类别。
2)计算类别均值向量:对于每个类别,计算其所有样本的均值向量,表示该类别在高维特征空间中的中心位置。
3)计算类内散度矩阵:计算每个类别内部样本与其均值向量之间的散度矩阵,用于衡量类内的离散程度。
4)计算类间散度矩阵:计算所有类别的均值向量之间的散度矩阵,用于衡量类间的差异程度。
5)计算广义特征值问题:解决广义特征值问题,即求解广义瑞利商的最大特征值和对应的特征向量。
6)选择投影向量:选择前k个最大特征值对应的特征向量作为投影向量,其中k是降维后的目标维度。
7)降维和分类:将原始数据投影到所选投影向量所组成的低维空间中,并使用分类方法对新的低维数据进行分类。