返回
首页>祝由术>心理健康

如何选择合适的泛化算法

时间: 2023-08-23 20:45:37

随着数据量的不断增加,泛化算法成为了机器学习中不可或缺的一部分。泛化算法可以帮助我们从已知数据中推断出未知数据的结果,从而实现预测和分类等功能。但是,如何选择合适的泛化算法呢?本文将从多个角度进行分析。

如何选择合适的泛化算法?

一、数据量和类型

选择泛化算法时,首先需要考虑的是数据量和类型。如果数据量比较小,可以选择基于规则的算法或者决策树算法。这些算法计算速度快,易于解释,适合小规模数据集。如果数据量比较大,则可以选择支持向量机、神经网络等算法。这些算法可以处理大规模的数据集,但计算速度比较慢。另外,还需要考虑数据类型,比如文本、图像、音频等,不同类型的数据需要选择不同的算法。

二、算法效果和可解释性

选择泛化算法时,需要考虑算法的效果和可解释性。一般来说,算法的效果越好,计算复杂度就越高,可解释性就越差。因此,需要根据具体情况进行选择。如果需要高精度的预测结果,可以选择神经网络等算法。如果需要解释性强的结果,可以选择基于规则的算法或者决策树算法。

三、算法的健壮性和时间复杂度

选择泛化算法时,还需要考虑算法的健壮性和时间复杂度。健壮性是指算法对于噪声和异常数据的容忍程度,越健壮的算法能够处理更多的噪声和异常数据。时间复杂度是指算法执行所需的时间,时间复杂度越低的算法执行速度越快,但是可能会牺牲精度。因此,需要根据具体情况进行选择。

四、算法的可扩展性和可移植性

选择泛化算法时,还需要考虑算法的可扩展性和可移植性。可扩展性是指算法对于大规模数据集的扩展能力,可移植性是指算法在不同平台上的移植能力。如果需要处理大规模数据集,需要选择可扩展性强的算法。如果需要跨平台使用算法,需要选择可移植性强的算法。

总之,选择合适的泛化算法需要考虑多个因素,包括数据量和类型、算法效果和可解释性、算法的健壮性和时间复杂度、算法的可扩展性和可移植性等。只有根据具体情况进行选择,才能得到最优的结果。

不懂自己或他人的心?想要进一步探索自我,建立更加成熟的关系,不妨做下文末的心理测试。平台现有近400个心理测试,定期上新,等你来测。如果内心苦闷,想要找人倾诉,可以选择平台的【心事倾诉】产品,通过写信自由表达心中的情绪,会有专业心理咨询师给予你支持和陪伴。

UML类图关系(泛化、继承、实现、依赖、关联、聚合、组合)

我是在画概念数据模型和逻辑数据模型时遇到了箭头表征含义的问题。现将内容分享:

UML是统一建模语言,通过图/文/表等方式,从不同角度对一个概念/系统/体系/实体进行描述。例如一个体系,有不同的利益相关者,他们从各自的角色出发去观摩体系,通过UML,我们事先定义相关概念,统一规则,再根据不同角色关心的方面,构造体系结构产品,实现对体系的完整描述。本次分享的内容是UML中的类图关系,包括泛化、继承、实现、依赖、关联、聚合、组合。

## 继承

A(子类)继承B(父类)的功能,并可以增加A的新功能的能力。

继承是类与类、接口与接口之间最常见的关系,表征符号如下(箭头方向是基于动作指向):

A与B的关系:

## 实现

指一个类实现(调取)接口的功能(服务),

实现是类与接口之间最常见的关系,表征符号如下:

## 依赖

类A依赖类B才能实现,类B的变化会影响到类A。

举一个例子:B是算法A的功能集,同一个算法在不同的场景下实现不同的功能,算法对功能的选择要根据适用场景设置,算法A依赖功能B实现,B的变化会影响到A。表征符号如下:

## 关联

A关联B的字段,关联的字段可以是1个(0..1),也可以是多个(0..*),表征符号如下:

## 聚合

聚合是关联关系的一种特例,体现的是整体与部分、拥有的关系,即has-a的关系,此时整体与部分之间是可分离的,他们可以具有各自的生命周期,部分可以属于多个整体对象,也可以为多个整体对象共享;比如计算机与CPU、公司与员工的关系等,表征符号如下:

## 组合

组合也是关联关系的一种特例,体现的是一种contains-a的关系,这种关系比聚合更强,也称为强聚合;他同样体现整体与部分间的关系,但此时整体与部分是不可分的,整体的生命周期结束也就意味着部分的生命周期结束,表征符号如下:

## 总的来说,后几种关系所表现的强弱程度依次为: 组合>聚合>关联>依赖

如何处理数据不平衡问题

基于上一篇文章,面试被虐成渣,所以来整理和记录下第一个问题,关于数据不平衡的问题。

以下内容参考:

blogs.com/charlotte77/p/10455900.html ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?/news/201706/dTRE5ow9qBVLkZSY.html

数据不平衡也可称作数据倾斜。在实际应用中,数据集的样本特别是分类问题上,不同标签的样本比例很可能是不均衡的。因此,如果直接使用算法训练进行分类,训练效果可能会很差。

解决实际应用中数据不平衡问题可以从三个方面入手,分别是对数据进行处理、选择合适的评估方法和使用合适的算法。

1)过采样:

? ?主动获取更多的比例少的样本数据。由于样本比例不均衡,在条件允许的情况下可以尝试获取占比少的类型的样本数据。(PS:这就是为什么我几乎没有遇到过数据不平衡的问题。每次测试使用的数据集都尽可能的完美均衡) 也可以通过使用 重复 、 自举 或 合成 少数类过采样等方法(SMOTE)来生成新的稀有样品。

? ? 直接简单复制重复的话,如果特征少,会导致过拟合的问题。经过改进的过抽样方法通过在少数类中加入随机噪声、干扰数据或通过一定规则产生新的合成样本 (数据增强)。

2)欠采样:

? ? 数据量足够时,可以通过保留比例小的样本数据和减少比例大的样本数据来平衡数据集。缺点是会丢失多数类中的一些重要信息。

3)改变权重:

? ? 对不同样本数量的类别赋予不同的权重(通常会设置为与样本量成反比)

4)使用K-fold交叉验证

? ? 值得注意的是,使用过采样方法来解决不平衡问题时应适当地应用交叉验证。这是因为过采样会观察到罕见的样本,并根据分布函数应用自举生成新的随机数据,如果在过采样之后应用交叉验证,那么我们所做的就是将我们的模型过拟合于一个特定的人工引导结果。这就是为什么在过度采样数据之前应该始终进行交叉验证,就像实现特征选择一样。只有重复采样数据可以将随机性引入到数据集中,以确保不会出现过拟合问题。

? ? K-fold交叉验证就是把原始数据随机分成K个部分,在这K个部分中选择一个作为测试数据,剩余的K-1个作为训练数据。交叉验证的过程实际上是将实验重复做K次,每次实验都从K个部分中选择一个不同的部分作为测试数据,剩余的数据作为训练数据进行实验,最后把得到的K个实验结果平均。

? ? 此外,还应注意训练集和测试集的样本的概率分布问题。若实际数据不平衡,将采样平衡后的数据集作为训练集训练后,模型应用在测试集上效果仍会不好。因此,实际应用中尽可能 保持训练和测试的样本的概率分布是一致的。

1)谨慎选择AUC作为评价指标:对于数据极端不平衡时,可以观察观察不同算法在同一份数据下的训练结果的precision和recall,这样做有两个好处,一是可以了解不同算法对于数据的敏感程度,二是可以明确采取哪种评价指标更合适。针对机器学习中的数据不平衡问题,建议更多PR(Precision-Recall曲线),而非ROC曲线,具体原因画图即可得知,如果采用ROC曲线来作为评价指标,很容易因为AUC值高而忽略实际对少量样本的效果其实并不理想的情况。

2)不要只看Accuracy:Accuracy可以说是最模糊的一个指标了,因为这个指标高可能压根就不能代表业务的效果好,在实际生产中更关注precision/recall/mAP等具体的指标,具体侧重那个指标,得结合实际情况看。

1)选择对数据倾斜相对不敏感的算法。如树模型等。

2)集成学习。即多模型Bagging。首先从多数类中独立随机抽取出若干子集,将每个子集与少数类数据联合起来训练生成多个基分类器,再加权组成新的分类器,如加法模型、Adaboost、随机森林等。

3)转化成异常检测或者一分类问题。(具体内容后续有时间再跟进学习)

补充:什么是数据增强(Data Augmentation)?

参考链接:/p/3e9f4812abbc

数据增强让有限的数据产生更多的数据,增加训练样本的数量以及多样性(噪声数据), 提升模型鲁棒性, 一般用于训练集。神经网络需要大量的参数,许许多多的神经网路的参数都是数以百万计,而使得这些参数可以正确工作则需要大量的数据进行训练,但在很多实际的项目中,我们难以找到充足的数据来完成任务。随机改变训练样本可以降低模型对某些属性的依赖,从而提高模型的泛化能力。

数据增强方法:

例如,我们可以对图像进行不同方式的裁剪,让物体以不同的实例出现在图像的不同位置,这同样能够降低模型对目标位置的敏感性。此外,调整亮度、对比度、饱和度和色调 等因素来降低模型对色彩的敏感度。再有,随机裁剪、随机反转、随机对比度增强、颜色变化等等。一般来讲随机反转和一个小比例的random resize,再接随机裁剪比较常用。NLP中将字和词连接起来就形成了一个新样本,也属于数据增强。

数据增强的分类:

数据增强可以分为两类,一类是离线增强,一类是在线增强。

· 离线增强 : 直接对数据集进行处理,数据的数目会变成增强因子乘以原数据集的数目,这种方法常常用于数据集很小的时候。

· 在线增强 : 这种增强的方法用于,获得批量(batch)数据之后,然后对这个批量(batch)的数据进行增强,如旋转、平移、翻折等相应的变化,由于有些数据集不能接受线性级别的增长,这种方法长用于大的数据集,很多机器学习框架已经支持了这种数据增强方式,并且可以使用 GPU 优化计算。

猜你喜欢

本站内容仅供参考,不作为诊断及医疗依据,如有医疗需求,请务必前往正规医院就诊
祝由网所有文章及资料均为作者提供或网友推荐收集整理而来,仅供爱好者学习和研究使用,版权归原作者所有。
如本站内容有侵犯您的合法权益,请和我们取得联系,我们将立即改正或删除。
Copyright © 2022-2023 祝由师网 版权所有

备案号:鲁ICP备2022001955号-4

网站地图