社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  机器学习算法

干货 :一文解读合成数据在机器学习技术下的表现

数据分析 • 7 年前 • 512 次点击  

作者:Eric Le Fort;翻译:蒋雨畅;校对:卢苗苗

本文约3200字,建议阅读12分钟。

本文将通过介绍两个分布模型,并运用它们到合成数据过程中,来分析合成数据在不同机器学习技术下的表现。


想法

 

相比于数量有限的“有机”数据,我将分析、测评合成数据是否能实现改进。

 

动机

 

我对合成数据的有效性持怀疑态度——预测模型只能与用于训练数据的数据集一样好。这种怀疑论点燃了我内心的想法,即通过客观调查来研究这些直觉。

 

需具备的知识

 

本文的读者应该处于对机器学习相关理论理解的中间水平,并且应该已经熟悉以下主题以便充分理解本文:


  • 基本统计知识,例如“标准差”一词的含义

  • 熟悉神经网络,SVM和决策树(如果您只熟悉其中的一个或两个,那可能就行了)

  • 了解基本的机器学习术语,例如“训练/测试/验证集”的含义

 

合成数据的背景

 

生成合成数据的两种常用方法是:


  • 根据某些分布或分布集合绘制值

  • 个体为本模型的建模

 

在这项研究中,我们将检查第一类。为了巩固这个想法,让我们从一个例子开始吧!

 

想象一下,在只考虑大小和体重的情况下,你试图确定一只动物是老鼠,青蛙还是鸽子。但你只有一个数据集,每种动物只有两个数据。因此不幸的是,我们无法用如此小的数据集训练出好的模型!

 

这个问题的答案是通过估计这些特征的分布来合成更多数据。让我们从青蛙的例子开始


参考这篇维基百科的文章:

https://en.wikipedia.org/wiki/Common_frog ,只考虑成年青蛙。

 

第一个特征,即它们的平均长度(7.5cm±1.5cm),可以通过从正态分布中绘制平均值为7.5且标准偏差为1.5的值来生成。类似的技术可用于预测它们的重量。然而,我们所掌握的信息并不包括其体重的典型范围,只知道平均值为22.7克。一个想法是使用10%(2.27g)的任意标准偏差。不幸的是,这只是纯粹猜测的结果,因此很可能不准确。

 

鉴于与其特征相关信息的可获得性,和基于这些特征来区分物种的容易程度,这可能足以培养良好的模型。但是,当您迁移到具有更多特征和区别更细微的陌生系统时,合成有用的数据变得更加困难。

 

数据

 

该分析使用与上面讨论的类比相同的想法。我们将创建一些具有10个特征的数据集。这些数据集将包含两个不同的分类类别,每个类别的样本数相同。

 

“有机”数据

 

每个类别将遵循其中每个特征的某种正态分布。例如,对于第一种特征:第一个类别样本的平均值为1500,标准差为360;第二个类别样本的平均值为1300,标准差为290。其余特征的分布如下:



该表非常密集,但可以总结为:


  • 有四个特征在两类之间几乎无法区分,

  • 有四个特征具有明显的重叠,但在某些情况下应该可以区分,并且

  • 有两个特征只有一些重叠,通常是可区分的。


创建两个这样的数据集,一个1000样本的数据集将保留为验证集,另一个1000样本的数据集可用于训练/测试。

 

这会创建一个数据集,使分类变得足够强大。

 

合成数据

 

现在事情开始变得有趣了!合成数据将遵循两个自定义分布中的其中一个。第一个我称之为“ Spikes Distribution”。此分布仅允许合成特征采用少数具有每个值的特定概率的离散值。例如,如果原始分布的平均值为3且标准差为1,则尖峰(spike)可能出现在2(27%),3(46%)和4(27%)。

 

第二个自定义分布我称之为“ Plateaus Distribution”。这种分布只是分段均匀分布。使用平台中心的正态分布概率推导出平稳点的概率。您可以使用任意数量的尖峰或平台,当添加更多时,分布将更接近正态分布。

 

为了清楚说明这两个分布,可以参考下图:


(注:尖峰分布图不是概率密度函数)


在这个问题中,合成数据的过程将成为一个非常重要的假设,它有利于使合成数据更接近于“有机”数据。该假设是每个特征/类别对的真实平均值和标准差是已知的。实际上,如果合成数据与这些值相差太远,则会严重影响训练模型的准确性。

 

好的,但为什么要使用这些分布?他们如何反映现实?

 

我很高兴你问这个问题!在有限的数据集中,您可能会注意到,对于某个类别,某个特征只会占用少量值。想象一下这些值是:

 

(50,75,54,49,24,58,49,64,43,36)

 

或者如果我们可以对这列进行排序:

 

(24,36,43,49,49,50,54,58,64,75)

 

为了生成此特征的数据,您可以将其拆分为三个部分,其中第一部分将是最小的20%,中间的60%将是第二部分,第三部分将是最大的20%。然后使用这三个部分,您可以计算它们的平均值和标准差:分别为(30,6.0),(50.5,4.6)和(69.5,5.5)。如果标准差相当低,比如大约为相应均值的10%或更小,则可以将该均值视为该部分的尖峰值。否则,您可以将该部分视为一个平台,其宽度是该部分标准差的两倍,并以该部分的平均值作为中心。

 

或者,换句话说,他们在模拟不完美的数据合成方面做得不错。

 

我将使用这些分布创建两个800样本数据集 - 一个使用尖峰,另一个使用平台。四个不同的数据集将用于训练模型,以便比较每个数据集的有用性:


  • 完整 (Full) - 完整的1000个样本有机数据集(用于了解上限)

  • 真实 (Real) - 只有20%的样本有机数据集(模拟情况而不添加合成数据)

  • 尖峰(Spike) - “真实”数据集与尖峰数据集相结合(1000个样本)

  • 平台(Plateaus) - “真实”数据集与平台数据集相结合(1000个样本)

 

现在开始令人兴奋的部分!
 

训练

 

为了测试每个数据集的强度,我将采用三种不同的机器学习技术:多层感知器(MLP),支持向量机(SVM)和决策树(Decision Trees)。为了帮助训练,由于某些特征的幅度比其他特征大得多,因此利用特征缩放来规范化数据。使用网格搜索调整各种模型的超参数,以最大化到达最好的超参数集的概率。

 

总之,我在8个不同的数据集上训练了24种不同的模型,以便了解合成数据对学习效果的影响。


相关代码在这里:https://github.com/EricLeFort/DataGen 

 

结果

 

经过几个小时调整超参数并记录下精度测量结果后,出现了一些反直觉的结果!完整的结果集可以在下表中找到:


多层感知器(MLP)


 
支持向量机(SVM)



决策树(Decision Trees)


 
在这些表中,“Spike 9”或“Plateau 9”是指分布和使用的尖峰/平台的数量。单元格中的值是使用相应的训练/测试数据对模型进行训练/测试,并用验证集验证后的的最终精度。还要记住,“完整”(Full)类别应该是准确性的理论上限,“真实”(Rea;)类别是我们在没有合成数据的情况下可以实现的基线。


一个重要的注意事项是,(几乎)每次试验的训练/测试准确度都明显高于验证准确度。例如,尽管MLP在Spike-5上得分为97.7%,但在同一试验的训练/测试数据上分别得分为100%和99%。当在现实世界中使用时,这可能导致模型有效性的过高估计。


完整的这些测量可以在GitHub找到:

https://github.com/EricLeFort/DataGen 

 

让我们仔细看看这些结果。

 

首先,让我们看一下模型间的趋势(即在所有机器学习技术类型中的合成数据集类型的影响)。似乎增加更多尖峰/平台并不一定有助于学习。你可以看到在3对 5时尖峰/平台之间的一般改善,但是当看到5对9时,则要么变平或稍微倾斜。

 

对我来说,这似乎是违反直觉的。随着更多尖峰/平台的增加,我预计会看到几乎持续的改善,因为这会导致分布更类似于用于合成数据的正态分布。

 

现在,让我们看一下模型内的趋势(即各种合成数据集对特定机器学习技术的影响)。对于MLP来说,尖峰或平台是否会带来更好的性能似乎缺少规律。对于SVM,尖峰和平台似乎表现得同样好。然而,对于决策树而言,平台是一个明显的赢家。

 

总的来说,在使用合成数据集时,始终能观察到明显的改进!

 

以后的工作

 

需要注意的一个重要因素是,本文的结果虽然在某些方面有用,但仍然具有相当的推测性。因此,仍需要多角度的分析以便安全地做出任何明确的结论。

 

这里所做的一个假设是每个类别只有一个“类型”,但在现实世界中并不总是如此。例如,杜宾犬和吉娃娃都是狗,但它们的重量分布看起来非常不同。

 

此外,这基本上只是一种类型的数据集。应该考虑的另一个方面是尝试类似的实验,除了具有不同维度的特征空间的数据集。这可能意味着有15个特征而不是10个或模拟图像的数据集。

 

我计划继续研究以扩大本研究的范围,敬请期待!

 

关于作者


Eric拥有软件工程学士学位和机器学习硕士学位。他目前在加拿大多伦多担任机器学习工程师。他曾使用LSTM,CNN,决策树集合,SVM等工作解决与NLP,计算机视觉和商业智能系统相关的问题!

 

如果您想了解更多关于他的信息,请浏览他的网站(http://ericlefort.ca/ )

 

原文标题:

My Thoughts on Synthetic Data

原文链接:

https://www.codementor.io/ericlefort/my-thoughts-on-synthetic-data-kq719a5ss

译者简介:蒋雨畅,香港理工大学大三在读,主修地理信息,辅修计算机科学,目前在研究学习通过数据科学等方法探索城市与人类活动的关系。希望能认识更多对数据科学感兴趣的朋友,了解更多前沿知识,开拓自己的眼界。

版权声明:本号内容部分来自互联网,转载请注明原文链接和作者,如有侵权或出处有误请和我们联系。

关联阅读

原创系列文章:

1:从0开始搭建自己的数据运营指标体系(概括篇)

2 :从0开始搭建自己的数据运营指标体系(定位篇)

3 :从0开始搭建自己的数据运营体系(业务理解篇)

4 :数据指标的构建流程与逻辑

5 :系列 :从数据指标到数据运营指标体系

6:   实战 :为自己的公号搭建一个数据运营指标体系

7:  从0开始搭建自己的数据运营指标体系(运营活动分析)

数据运营 关联文章阅读:  

运营入门,从0到1搭建数据分析知识体系    

推荐 :数据分析师与运营协作的9个好习惯

干货 :手把手教你搭建数据化用户运营体系

推荐 :最用心的运营数据指标解读

干货 : 如何构建数据运营指标体系

从零开始,构建数据化运营体系

干货 :解读产品、运营和数据三个基友关系

干货 :从0到1搭建数据运营体系

数据分析、数据产品 关联文章阅读:

干货 :数据分析团队的搭建和思考

关于用户画像那些事,看这一文章就够了

数据分析师必需具备的10种分析思维。

如何构建大数据层级体系,看这一文章就够了

干货 : 聚焦于用户行为分析的数据产品

如何构建大数据层级体系,看这一文章就够了

80%的运营注定了打杂?因为你没有搭建出一套有效的用户运营体系

从底层到应用,那些数据人的必备技能

读懂用户运营体系:用户分层和分群

做运营必须掌握的数据分析思维,你还敢说不会做数据分析

合作请加qq:365242293  


更多相关知识请回复:“ 月光宝盒 ”;

数据分析(ID : ecshujufenxi )互联网科技与数据圈自己的微信,也是WeMedia自媒体联盟成员之一,WeMedia联盟覆盖5000万人群。


今天看啥 - 高品质阅读平台
本文地址:http://www.jintiankansha.me/t/bD2510vYz6
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/22869