深入浅出OCR:机器学习回归算法及集成学习算法详解

释放双眼,带上耳机,听听看~!
本文详细介绍了机器学习回归算法及集成学习算法,着重介绍了随机森林回归算法的概念、原理、步骤和应用,适合AI爱好者和初学者阅读学习。

深入浅出OCR:机器学习回归算法及集成学习算法详解

⚠️本文为稀土掘金技术社区首发签约文章,30天内禁止转载,30天后未获授权禁止转载,侵权必究!

专栏介绍: 经过几个月的精心筹备,本作者推出全新系列《深入浅出OCR》专栏,对标最全OCR教程,具体章节如导图所示,将分别从OCR技术发展、方向、概念、算法、论文、数据集等各种角度展开详细介绍,综合基础与实战知识。本篇为前言知识部分第二篇文章,主要介绍机器学习回归算法及集成学习算法部分,方便小白或者AI爱好者快速学习基础知识,具体内容可能未能含概所有知识点,其他内容可以访问本人主页其他文章或个人主页博客,同时因本人水平有限,文中如有错误恳请指出,欢迎互相学习交流!

💙个人主页: GoAI |💚 公众号: GoAI的学习小屋 | 💛交流群: 704932595 |💜个人简介 : 掘金签约作者、百度飞桨PPDE、领航团团长、开源特训营导师、CSDN、阿里云社区人工智能领域博客专家、新星计划计算机视觉方向导师等,专注大数据与人工智能知识分享。

文章目录

《深入浅出OCR》前言知识:机器学习基础(一)

《深入浅出OCR》前言知识:机器学习基础(二)(本篇)

《深入浅出OCR》前言知识:机器学习基础(二)

三、 回归算法

3.1 常见回归算法

  • 线性回归
  • 多项式回归
  • 支持向量机回归
  • 决策树回归
  • 随机森林回归
  • LASSO 回归
  • Ridge 回归
  • ElasticNet 回归
  • XGBoost 回归

3.1.1 随机森林回归

(1)随机森林回归概念

随机森林回归是一种基于集成学习的算法,它通过构建多个决策树并将它们的预测结果进行集成来进行回归任务。在随机森林中,每棵决策树都是独立并在随机选择的子样本上进行训练的,这样可以有效地减少过拟合的风险。随机森林通过将多个决策树的预测结果进行平均或加权平均,从而得到最终的回归结果。

(2)随机森林回归的基本原理如下:

随机选择样本:从原始训练集中随机选择一部分样本,构成一个子样本集。这样可以使得每棵决策树都在不同的样本集上进行训练,从而增加模型的多样性。

随机选择特征:对于每个决策树的每个节点,在选择最佳划分特征时,只考虑随机选择的一部分特征。这样可以防止某些特征对整个模型的影响过大,从而提高模型的鲁棒性。

构建决策树:在每个子样本集上使用某种决策树算法(如CART算法)构建一棵决策树。决策树的生长过程中,通常采用递归地选择最佳划分特征,将数据集划分为不纯度最小的子集。

集成预测:对于新的输入样本,通过将多棵决策树的预测结果进行平均或加权平均,从而得到最终的回归结果。

(3)随机森林回归的步骤

随机森林回归的步骤通常包括以下几个主要的步骤:

数据准备:首先,需要准备用于训练和测试模型的数据集。数据集应包含特征和对应的目标变量。特征是用于预测目标变量的属性或特性,而目标变量是需要进行回归预测的值。通常,需要将数据集划分为训练集和测试集,其中训练集用于训练模型,测试集用于评估模型的性能。

构建随机森林:在Scikit-learn库中,可以使用RandomForestRegressor类来构建随机森林回归模型。可以设置一些参数来控制随机森林的行为,例如决策树的数量、特征选择的方式、决策树的生长方式等。可以根据实际问题和需求进行参数的调整。

训练模型:使用训练集对随机森林回归模型进行训练。模型将根据训练集中的样本和目标变量的值来构建多棵决策树,并在每棵树上进行特征选择和划分。

预测结果:使用训练好的随机森林回归模型对测试集中的样本进行预测。模型将对每棵决策树的预测结果进行平均或加权平均,从而得到最终的回归预测结果。

模型评估:通过与真实目标变量的比较,评估模型的性能。可以使用各种回归性能指标,例如均方误差(Mean Squared Error, MSE)、平均绝对误差(Mean Absolute Error, MAE)、决定系数(R-squared)等来评估模型的准确性和泛化能力。

模型调优:根据模型评估的结果,可以对随机森林回归模型进行调优。可以尝试调整随机森林的参数,例如增加或减少决策树的数量、调整特征选择的方式、调整决策树的生长方式等,从而提高模型的性能。

模型应用:在模型评估和调优后,可以使用训练好的随机森林回归模型进行实际的预测。可以将新的输入样本输入到模型中,从而得到对应的回归预测结果。随机森林回归模型在实际应用中具有广泛的应用场景,例如金融领域的贷款风险评估、房价预测、医疗领域的疾病预测、销售预测等。

(4)随机森林的优点:

能够处理高维数据和大规模数据集。

具有较好的泛化性能,能够有效地减少过拟合的风险。

能够处理缺失值和异常值。

对于非线性关系的数据,具有较强的拟合能力。

3.1.2 XGBoost 回归

XGBoost是boosting算法的其中一种。Boosting算法的思想是将许多弱分类器集成在一起形成一个强分类器。因为XGBoost是一种提升树模型,所以它是将许多树模型集成在一起,形成一个很强的分类器。而所用到的树模型则是CART回归树模型。

参考学习:一文读懂机器学习大杀器xgboost原理

回归算法参考学习:blog.csdn.net/qq_42363032…

3.3集成学习

集成学习是一种将不同学习模型(比如分类器)的结果组合起来,通过投票或平均来进一步提高准确率。一般,对于分类问题用投票;对于回归问题用平均。这样的做法源于“众人拾材火焰高”的想法。

集成算法主要有三类:Bagging,Boosting 和Stacking。

深入浅出OCR:机器学习回归算法及集成学习算法详解

3.3.1 bagging思想

​ bagging是集成学习的思想之一,随机森林是基分类器为决策树的bagging算法。bagging思想首先是采用M轮的bootstrap自助采样,每轮采样对应训练一个弱分类器,并且训练的时候是并行计算的,最后将这M个弱分类器进行组合来实现预测的。由于自助采样,所以bagging是通过样本扰动的方式来增加基分类器的差异性,差异性越大,集成效果越好。因此,bagging的基学习器应为对训练样本扰动敏感的算法。

Bagging的第一步是针对数据集,利用自助抽样法(Bootstrap Sampling method)建造多个模型。

所谓的自助抽样,是指得到一个由原始数据集中随机的子集组成的新的训练集。每一个这样的训练集都和原始训练集的大小相同,但其中有一些重复的数据,因此并不等于原始训练集。并且,我们将原始的数据集用作测试集。因此,如果原始数据集的大小为N,那么新的训练集的大小也为N(其中不重复的数据数量为2N/3),测试集的大小为N。

Bagging的第二步是在抽样的不同的训练集上,利用相同的算法建造多个模型。

在这里,我们以随机森林为例。决策树是靠每一个节点在最重要的特征处分离来减小误差的,但与之不同,随机森林中,我们选择了随机筛选的特征来构造分裂点。这样可以减小所得预测之间的相关性。每一个分裂点搜索的特征的数量,是随机森林算法的参数。

因此,用随机森林算法实现的Bagging,每一个树都是用随机样本构造的,每一个分裂点都是用随机的预测器构造的。

深入浅出OCR:机器学习回归算法及集成学习算法详解

3.3.2 随机森林Bagging

随机森林是由很多决策树构成的,不同决策树之间没有关联。当我们进行分类任务时,新的输入样本进入,就让森林中的每一棵决策树分别进行判断和分类,每个决策树会得到一个自己的分类结果,决策树的分类结果中哪一个分类最多,那么随机森林就会把这个结果当做最终的结果。因此,随机森林算法(多个模型)是袋装决策树(单个模型)的提升版。

深入浅出OCR:机器学习回归算法及集成学习算法详解

  1. 一个样本容量为N的样本,有放回的抽取N次,每次抽取1个,最终形成了N个样本。这选择好了的N个样本用来训练一个决策树,作为决策树根节点处的样本。
  2. 当每个样本有M个属性时,在决策树的每个节点需要分裂时,随机从这M个属性中选取出m个属性,满足条件m << M。然后从这m个属性中采用某种策略(比如说信息增益)来选择1个属性作为该节点的分裂属性。
  3. 决策树形成过程中每个节点都要按照步骤2来分裂(很容易理解,如果下一次该节点选出来的那一个属性是刚刚其父节点分裂时用过的属性,则该节点已经达到了叶子节点,无须继续分裂了)。一直到不能够再分裂为止。注意整个决策树形成过程中没有进行剪枝。
  4. 按照步骤1~3建立大量的决策树,这样就构成了随机森林了。

3.3.3 boosting思想

​ Boosting一族是可将弱学习器提升为强学习器的算法,它的思想就是每一个基分类器纠正前一个基分类器的错误,至于纠正的方式不同所以有不同的boosting算法。算法思想如下:

先从训练集训练出一个基学习器。
再根据基学习器的表现对训练样本分布进行调整,使得先前基学习器做错的训练样本在后续得到较大的关注。

然后基于调整后的样本分布来训练下一个基学习器。

如此重复进行,直到基学习器数目达到指定的阈值T位置。
再将这T个基学习器进行加权结合得到强集成学习器。

3.3.4 Adaboost实现Boosting

AdaBoost思想是在boosting思想的基础上,具体流程如下:

初始化训练集权重,从初始训练集里训练得到一个基学习器
增加错分样本的权重,减少分对样本的权重
增加错误率小的基学习器的权重,减少错误率大的基学习器的权重
用调整后的(样本权重归一化)样本训练下一个基学习器
直到基学习器的数目达到实现指定的值
然后将这几个基学习器加权进行投票。

深入浅出OCR:机器学习回归算法及集成学习算法详解

a) 因为Bagging中的每一个模型是独立构造的,我们认为它是并行集成的。与之不同,Boosting中的每一个模型,都是基于对前一个模型的过失进行修正来构造的,因此Boosting是线性的。

b) Bagging中采用的是简单的投票,每一个分类器相当于一个投票(节点分裂,相当于进行一次投票),最后的输出是与大多数的投票有关;而在Boosting中,我们对每一个投票赋予权重,最后的输出也与大多数的投票有关——但是它却是线性的,因为赋予了更大的权重给被前一个模型错误分类的实体(拥有更大的权重,则其误差的影响被放大,有助于我们得到使得更小误差的模型)。

AdaBoost指的是自适应增强(Adaptive Boosting)

上图,第一、二、三步中弱学习模型被称作决策树桩(一个一级的决策树只依据一个输入特征进行预测;一个决策树的根节点直接连接到它的叶子节点)。构造弱学习模型的过程持续到,a)达到用户定义的数量,或者 b)继续训练已经无法提升。第四步,将三个决策树桩组合起来。

第一步: 从一个决策树桩开始,根据一个输入变量作出决定

从图中可以看见,其中有两个圆圈分类错误,因此我们可以给他们赋予更大的 权重,运用到下一个决策树桩中。

第二步: 依据不同的输入变量,构造下一个决策树桩

可以发现第二个决策将会尝试将更大权重的数据预测正确。和如图的情况中, 我们需要对另外三个圆圈赋予更大的权重。

第三步: 依据不同的输入变量,训练不同的决策树桩

之前步骤一样,只是这次被预测错误的是三角形的数据,因此我们需要对其赋 予更大的权重。

第四步: 将决策树桩组合起来,将三个模型组合起来,显而易见,集成的模型比单个模型准确率更高。

4.1 无监督学习

深入浅出OCR:机器学习回归算法及集成学习算法详解

  无监督学习问题处理的是,只有输入变量X没有相应输出变量的训练数据。它利用没有专家标注训练数据,对数据的结构建模。

可以利用无监督学习解决的问题,大致分为两类:

关联分析:发现不同事物之间同时出现的概率。在购物篮分析中被广泛地应用。如果发现买面包的客户有百分之八十的概率买鸡蛋,那么商家就会把鸡蛋和面包放在相邻的货架上。

聚类问题: 将相似的样本划分为一个簇(cluster)。与分类问题不同,聚类问题预先并不知道类别,自然训练数据也没有类别的标签。

维度约减: 顾名思义,维度约减是指减少数据的维度同时保证不丢失有意义的信息。利用特征提取方法和特征选择方法,可以达到维度约减的效果。特征选择是指选择原始变量的子集。特征提取是将数据从高纬度转换到低纬度。广为熟知的主成分分析算法就是特征提取的方法。

Apriori算法,K-means算法,PCA主成分分析都属于无监督学习。

4.2 强化学习

 通过学习可以获得最大回报的行为,强化学习可以让agent(个体)根据自己当前的状态,来决定下一步采取的动作。

强化学习算法通过反复试验来学习最优的动作。这类算法在机器人学中被广泛应用。在与障碍物碰撞后,机器人通过传感收到负面的反馈从而学会去避免冲突。在视频游戏中,我们可以通过反复试验采用一定的动作,获得更高的分数。Agent能利用回报去理解玩家最优的状态和当前他应该采取的动作。

四、常见机器学习模型总结

类别 方法 适用情况 损失函数 学习策略 优化算法
监督学习 线性模型 二分类 MSE 极小化误分类点到超平面距离 最小二乘/梯度下降
监督学习 逻辑回归 二分类 对数损失函数 极大似然估计 梯度下降
决策树 多分类 对数似然损失 极大似然估计 特征选择、生成、剪枝
支持向量机 二分类 合页损失函数 支持向量离超平面软间隔最大化 序列最小最优化算法SMO
朴素贝叶斯 多分类 对数损失函数 极大似然估计、极大后验概率估计 EM算法

五、常见损失函数总结:

损失函数概念:在深度学习中的所有算法都依赖于最小化或最大化一个函数,我们称之为损失函数(loss function)。针对单个训练样本而言,给定一个模型输出和一个真实值,损失函数输出一个实值误差损失,用来衡量预测模型在预测预期结果好坏的标准。求函数最小点最常用的方法是梯度下降法。

损失函数(Loss Function)反应的是模型对数据的拟合程度,常见的损失函数种类包括:最小二乘损失函数、交叉熵损失函数、回归中使用的smooth L1损失函数等。

19种损失函数如下所示:

1、L1范数损失 计算output和target之差的绝对值。

torch.nn.L1Loss(reduction='mean')

参数:
reduction-三个值,none: 不使用约简;mean:返回loss和的平均值;sum:返回loss的和。默认:mean。

2、均方误差损失MSELoss 计算output和target之差的均方差。

torch.nn.MSELoss(reduction='mean')

参数:
reduction-三个值,none: 不使用约简;mean:返回loss和的平均值;sum:返回loss的和。默认:mean。

3、交叉熵损失CrossEntropyLoss

torch.nn.CrossEntropyLoss(weight=None, ignore_index=-100, reduction='mean')

在多分类任务中,经常采用softmax激活函数+交叉熵损失函数,因为交叉熵描述了两个概率分布的差异,然而神经网络输出的是向量,并不是概率分布的形式。所以需要softmax激活函数将一个向量进行“归一化”成概率分布的形式,再采用交叉熵损失函数计算loss。

4、 KL散度损失KLDivLoss 计算input和target之间的KL散度。KL散度可用于衡量不同的连续分布之间的距离,在连续的输出分布的空间上(离散采样)上进行直接回归时很有效。

torch.nn.KLDivLoss(reduction='mean')

参数:
reduction-三个值,none: 不使用约简;mean:返回loss和的平均值;sum:返回loss的和。默认:mean。

5、二进制交叉熵损失BCELoss 二分类任务时的交叉熵计算函数。用于测量重构的误差,例如自动编码机。注意目标的值t的范围为0到1之间。

torch.nn.BCELoss(weight=None, reduction='mean')

参数:
weight (Tensor, optional) – 自定义的每个 batch 元素的 loss 的权重. 必须是一个长度为 “nbatch” 的 的 Tensor

6 、BCEWithLogitsLoss

BCEWithLogitsLoss损失函数把Sigmoid层集成到了BCELoss类中。该版比用一个简单的Sigmoid层和BCELoss在数值上更稳定,因为把这两个操作合并为一个层之后,可以利用log-sum-exp的技巧来实现数值稳定。

torch.nn.BCEWithLogitsLoss(weight=None, reduction='mean', pos_weight=None)

参数:
weight (Tensor, optional) – 自定义的每个 batch 元素的 loss 的权重. 必须是一个长度 为 “nbatch” 的 Tensor

7、 MarginRankingLoss

torch.nn.MarginRankingLoss(margin=0.0, reduction='mean')

参数:

margin:默认值0

8、HingeEmbeddingLoss

torch.nn.HingeEmbeddingLoss(margin=1.0,  reduction='mean')  

参数:

margin:默认值1

9、多标签分类损失MultiLabelMarginLoss

torch.nn.MultiLabelMarginLoss(reduction='mean')

10、平滑版L1损失SmoothL1Loss ,也被称为 Huber 损失函数。

torch.nn.SmoothL1Loss(reduction='mean')

11、 2分类的logistic损失SoftMarginLoss

torch.nn.SoftMarginLoss(reduction='mean')

12、多标签one-versus-all损失MultiLabelSoftMarginLoss

torch.nn.MultiLabelSoftMarginLoss(weight=None, reduction='mean')

13、 cosine损失CosineEmbeddingLoss

torch.nn.CosineEmbeddingLoss(margin=0.0, reduction='mean')

参数:margin:默认值0

14、多类别分类的hinge损失MultiMarginLoss

torch.nn.MultiMarginLoss(p=1, margin=1.0, weight=None,  reduction='mean')

参数:p=1或者2 默认值:margin:默认值1

15、三元组损失TripletMarginLoss

和孪生网络相似,具体例子:给一个A,然后再给B、C,看看B、C谁和A更像。

torch.nn.TripletMarginLoss(margin=1.0, p=2.0, eps=1e-06, swap=False, reduction='mean')

16、连接时序分类损失CTCLoss,CTC连接时序分类损失,可以对没有对齐的数据进行自动对齐,主要用在没有事先对齐的序列化数据训练上。比如语音识别、ocr识别等等。
torch.nn.CTCLoss(blank=0, reduction=’mean’)

参数:reduction-三个值,none: 不使用约简;mean:返回loss和的平均值;sum:返回loss的和。默认:mean。

17、负对数似然损失NLLLoss负对数似然损失。用于训练C个类别的分类问题。

torch.nn.NLLLoss(weight=None, ignore_index=-100,  reduction='mean')
参数:weight (Tensor, optional) – 自定义的每个类别的权重. 必须是一个长度为 C 的 Tensorignore_index (int, optional) – 设置一个目标值, 该目标值会被忽略, 从而不会影响到 输入的梯度.

18、 NLLLoss2d对于图片输入的负对数似然损失。它计算每个像素的负对数似然损失。

torch.nn.NLLLoss2d(weight=None, ignore_index=-100, reduction='mean')

参数:
weight (Tensor, optional) – 自定义的每个类别的权重. 必须是一个长度为 C 的 Tensorreduction-三个值,none: 不使用约简;mean:返回loss和的平均值;sum:返回loss的和。默认:mean。

19、 PoissonNLLLoss 目标值为泊松分布的负对数似然损失。

torch.nn.PoissonNLLLoss(log_input=True, full=False,  eps=1e-08,  reduction='mean')

六、机器学习导图总结分享

以下是作者自己整理的机器学习笔记思维导图,这里免费分享供大家学习,导图和笔记后续会继续更新。

链接:app.yinxiang.com/fx/339fe142…

深入浅出OCR:机器学习回归算法及集成学习算法详解

本文参考及优秀资料推荐:

easyai.tech/ai-definiti…

www.cnblogs.com/crazymagic/…

本网站的内容主要来自互联网上的各种资源,仅供参考和信息分享之用,不代表本网站拥有相关版权或知识产权。如您认为内容侵犯您的权益,请联系我们,我们将尽快采取行动,包括删除或更正。
AI教程

AI对话系统技术解析:语言理解、知识图谱与神经网络

2023-11-24 16:17:14

AI教程

基于ModelArts实现车辆车牌号的目标识别

2023-11-24 16:30:55

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索