分类问题:标签和预测结果都是离散的,即就是固定的几种类别
回归问题:标签和预测结果的分布都是连续的,可能会预测一系列的实数。例如Faster RCNN和YOLO等模型的bbox分支预测的四个值就是回归问题
1)正规方程:但是当特征过于复杂时,求解很慢:
2)梯度下降法:以一元线性回归为例,a为学习率,面对训练数据规模十分庞大的任务也能较好适用
1)sklearn.linear_model.LinearRegression:正规方程
2)sklean.linear_model.SGDRegression:梯度下降
1)岭回归:就是在原来的误差平方和/均方误差后面加一个正则化项,即参数w的L2范数的平方作为惩罚项。会得到稠密解
2)Lasso回归:原来的误差平方和/均方误差后面加一个正则化项,即参数w的L1范数作为惩罚项。会得到稀疏解
1)岭回归:sklearn.linear_model.Ridge
2)Lasso回归:sklearn.linear_model.Lasso
sklearn.lnear_model.LogisticRegression
优点:简单易于实现;不需要训练
缺点:K值选择十分重要,过小或者过大都容易导致过拟合或者欠拟合
sklearn.neighbors.KNeighborsClassifier
定义训练集为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)信息增益比:
基尼系数:
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)分隔超平面:在二维空间中,分隔超平面是一条直线,可以将两个类别的样本点正确地划分到两侧。在三维空间中,分隔超平面是一个平面,可以将样本点分开。而在更高维的特征空间中,分隔超平面是一个超平面。
2)最大间隔:在支持向量机中,分隔超平面还要满足最大化间隔的原则。也就是说,它应该尽可能地远离两个类别的样本点,使得两个类别的支持向量到分隔超平面的距离最大化。
3)支持向量:离分隔超平面最近的样本点称为支持向量
1)数据预处理:首先对输入数据进行预处理,包括特征选择、特征缩放、处理缺失值等操作。
2)计算类别的先验概率:根据训练数据,计算每个类别出现的先验概率。先验概率可以通过简单地计算每个类别在训练数据中的样本数量与总样本数量的比例得到。
3)计算特征的条件概率:对于每个特征,计算在给定类别下的条件概率。这需要计算每个特征在每个类别下的频率或概率。
4)应用贝叶斯定理:根据贝叶斯定理,利用先验概率和条件概率计算后验概率,即在给定特征条件下每个类别的概率。
4)预测分类结果:对于新的未知样本,根据计算得到的后验概率,选择具有最高概率的类别作为预测结果。
Bagging:首先对数据集采用Bootstrap采样(有放回)得到T个子数据集,再训练出T个弱学习器,最后集成到一起:分类问题吗,投票;回归问题;求均值。相当于是并行机制
Boosting:首先在训练数据集上训练出一个弱学习器T1,根据T1在每个样本上的误差率更新样本权重(误差高的,权重就大);然后基于更新后的权重重新训练弱学习器T2;迭代进行直到到达学习器指定数目T,最终将弱学习器集合到一起。相当于串行机制。
Stacking:首先先训练多个不同的模型;然后把之前训练的各个模型的输出为输入来训练一个模型,以得到一个最终的输出。
Adaboost(Adaptive boosting):为每个弱学习器分配一个权重,最后根据权重对T个弱学习器进行加权
GBDT(Gradient Boosting Decision Tree):是一种基于梯度提升框架的集成学习算法,它是Boosting提升树算法的一种实现方式。GBDT在每一轮迭代中不是直接拟合残差,而是拟合损失函数的负梯度。
XGBoost:使GBDT工程上的优化实现。
1)初始化:初始化第一个回归树
2)迭代训练:对于每次迭代,按照以下步骤进行训练:
a. 计算前一模型的残差(真实值与当前预测值的差异)。
b. 使用回归树来拟合残差(拟合过程就是回归树的特征选择过程,选择使误差平方和最小的特征)。其叶子节点的取值为该叶子节点上所有样本的残差的均值。
c. 更新当前模型的预测值,将之前的预测值与新增加的回归树的预测值进行累加。
3)得到最终模型:迭代训练直到达到预设的迭代次数或满足停止条件。最终的预测结果为所有回归树的预测值之和。
1)初始化:将训练数据的目标值作为初始预测值。
2)迭代训练:对于每次迭代,按照以下步骤进行训练:
a. 计算当前模型的残差和负梯度。
b. 使用回归树来拟合负梯度。每个回归树的训练目标是最小化损失函数的负梯度。
c. 更新当前模型的预测值,将之前的预测值与新增加的回归树的预测值进行累加。
3)得到最终模型:迭代训练直到达到预设的迭代次数或满足停止条件。最终的预测结果为所有回归树的预测值之和。
1)正则化:XGBoost使用正则化项来限制模型的复杂度,包括L1正则化(L1 regularization)和L2正则化(L2 regularization)。通过正则化,可以防止过拟合,并提高模型的泛化能力。
2)随机采样:类似随机森林的策略。在每次迭代中,XGBoost通过随机选择一部分特征进行训练,这样可以减少训练时间,并提高模型的鲁棒性。
3)XGBoost可以自动处理缺失值,在构建决策树时,会将缺失值分配到左侧或右侧子节点中,从而无需对缺失值进行额外处理。
4)XGBoost支持多种类型的基学习器,而GBDT只有CART回归树作为基分类器
参考链接:https://blog.csdn.net/xiao_yi_xiao/article/details/124040296
聚类算法就是将无标签的样本划分为不同的簇(clusters),同一簇内的样本具有相似的特征。
1)随机设定K个初始聚类中心,不一定为训练样本的点;
2)对于训练集中所有的点,计算每个点到K个聚类中心的距离,选择最近的那个聚类中心对应的簇,将其分配过去;
3)全部遍历和计算完毕后,对于K个聚类中心对应的簇,通过求均值的方法重新确定新的聚类中心;
4)重复上述过程,直到到达指定的迭代次数或者误差值
sklearn.cluster.KMeans()
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
1)核心点:如果一个点的半径ε内至少有MinPts个样本点,那么这个点就是一个核心点。
2)边界点:如果一个点的半径ε内的样本点数量小于MinPts(即不属于核心店,但位于另一个核心点的邻域内),但它位于其他核心点的半径ε邻域内,那么这个点就是一个边界点。
3)噪音点:既不是核心点也不是边界点的点被认为是噪音点。
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
输入:包含n个样本和m个特征的训练数据集。
1)标记预处理:对每个样本进行标记,确保每个样本都属于一个已知类别。
2)计算类别均值向量:对于每个类别,计算其所有样本的均值向量,表示该类别在高维特征空间中的中心位置。
3)计算类内散度矩阵:计算每个类别内部样本与其均值向量之间的散度矩阵,用于衡量类内的离散程度。
4)计算类间散度矩阵:计算所有类别的均值向量之间的散度矩阵,用于衡量类间的差异程度。
5)计算广义特征值问题:解决广义特征值问题,即求解广义瑞利商的最大特征值和对应的特征向量。
6)选择投影向量:选择前k个最大特征值对应的特征向量作为投影向量,其中k是降维后的目标维度。
7)降维和分类:将原始数据投影到所选投影向量所组成的低维空间中,并使用分类方法对新的低维数据进行分类。