您可以捐助,支持我们的公益事业。

1元 10元 50元





认证码:  验证码,看不清楚?请点击刷新验证码 必填



  求知 文章 文库 Lib 视频 iPerson 课程 认证 咨询 工具 讲座 Modeler   Code  
会员   
 
   
 
 
     
   
 订阅
  捐助
机器学习入门
 

作者:Rafael Fernandes 来源:网络  发布于:2016-12-27

   次浏览      
 

数据科学正在快速发展成所有行业开发人员和管理人员的关键技能,它看起来也十分有趣。但是,它非常复杂,虽有许多工程和分析工具助力,却也难清楚掌握现在做得对不对,哪里是不是有陷阱。在本文中,我们解释了如何发挥数据科学的作用,理解哪里需要它,哪里不需要它,以及如何令它为你产生价值,如何从先行者那里获得有用的经验。

这是“Getting A Handle On Data Science ”系统文章中的一部分,你可以通过此 RSS予以订阅。

本文要点

大多数类型的机器学习项目归根结底通常是使用监督式学习方式进行分类或回归。

特征工程是大多数机器学习过程中的一个关键组成部分。

像K均值(K-means)之类无人监督式的学习算法能用于你事前并不清楚数据标签时的聚类分析。

这里提到的绝大多数机器学习算法都是要为模型找到最适合的参数使模型可以最好地拟合数据。

过拟合是数据科学家必须面对的常见问题,在此是从一个有限的数据集得到假设的,在加入更多的数据点后并不能很好的推广。

许多机器学习(ML)项目的其中一部分即为数据集拟合一个函数(通常非常复杂),其目标为针对分类问题计算一个1或者0的数值(比如它是不是垃圾邮件?),或者对回归问题计算一系列数值(比如某种商品每周的销量)。是的,它全是关于数字和大量运算的,这正是计算机所擅长的。这即为机器学习(ML)中的机器(M)了,那么学习(L)又是关于什么的呢?

在 Kaggle 网站上可以找到一些声音数据,通过这些数据可以进行性别识别,我们以此来展开下面的探讨。这些数据集的目标是针对一个给定的语音信号,识别它是来自于男性还是女性。这项挑战归入分类问题这一类。在此该目标是为给定语音信号指定所属类别是男性还是女性,但是,分类问题是不一定要局限为两类的。分类问题的一些其他例子是文本的情感分析(积极的、中立的还是消极的),图像识别(你在一张图片中看到了什么种类的花?),等等。

那么计算机应该如何学习去识别一个已录好的声音是由男性还是女性发出的呢?好吧,如果我们想要计算来帮助我们,那么我们需要去讲它的语言:数字。在机器学习的世界,这就意味着抽取这些数据的特征。如果你访问一下Kaggle的链接,会在上面看到它们已经从语音信号中提取了许多特征。一些特征示例是:平均频率、中频、频率的标准差、四分间距、 基频的平均值,等等。也就是说,他们提取这些可能帮助我们分辨语音信号属于男性还是女性的特征而不是直接用时间序列来表示语音信号,这就是所谓的“特征工程”了。特征工程是大多数机器学习过程的一个重要组成部分。

我将选择这个数据集的两个特征,它们称为平均基频和四分间距,如下图所示。

在本图中,这些点分成了明显的两组。已知这个数据集由男性和女性的声音组成,我猜较高平均基频的那一组是属于女性(更高的音高)的,反之另一组是属于男性的。因此,一种识别该信号属于哪个性别的方式是,把数据分为两组,给其中较高平均基频的一组贴上女性的标签,而另一组贴上男性标签。这其实就是一些机器学习算法所做的抽取工作——分类归并。K平均(K-means)是其中执行这类运算的最常用的一个算法,在其命名中的“K”是你想要识别的群集数量(在本例中是两个)。注意,所有此类算法会获取你想要识别的群集初始数量,以及原始的数据,然后它返回一般性标签(比如0或者1),附到每个点上,表明每个实体属于哪个群集。在本例中,我会按我的领域知识赋予这些标签含义。

K平均属于称为无人监督式学习的一类机器算法,这种机器学习属于你预先不知道数据标签的情况。因为我们有两个可清晰界定的群集,所以它是可行的,但如果有大量的重叠那么可能它就不是分类问题的最佳解决方案了。另一类机器算法称之为监督式学习,在此情况下你可以使用数据标签。让我们拿出来自于这些声音识别数据集的数据标签,并重新描绘一下同一个图表吧。

凭直觉判断,具有最高平均基频的群集的确是属于女性的。为引入监督式方法,我将尝试用一条线把这两类分隔开,这样在视觉上就更容易区分了。这条线称之为决策边界,我还把它的方程式写了下来。这些“theta”是这条线的参数,而“x”则表示这个图中标绘点的两个变量,即本例中的四分间距和平均基频。因为我清楚这些数据标签,所以我能够拟合这条线。所以如果我在该声音数据集上使用左手边的方程式,并且如果我得出该数字大于0,那么我就能够预测这个声音是来自于女性的,或者如果该数字小于0,那么它就是来自于男性的。轻松解决。

然而,这并不是全部。

我仅针对每一类标绘了100个点,但实际上整个数据集是由3164个数据点构成的,男性和女性各占了一半。如果针对每一类标绘200个数据点会发生什么呢?

好吧,黑色虚线现在看起来就不那么合适了。我打算重复一下这个过程,并重新拟合另一条红色虚线,视觉化思维应该是一种分隔这些种类的好方法。图中这两条线之间的数学差异与第一张图中方程式里的“theta”的值有紧密的联系。这就是我所做的,“学习”更好的方式去将提交给我的给定数据进行分类。其实本质上最终是去为该决策边界找新的系数。你能理解是怎么进行的了,对吗?

我们现在是在理解在ML中的L是关于寻找最佳参数去达成当下目标的,在本例中,是去预测给定声音信号是来自于男性还是女性。如果我令你失望了,我表示抱歉,但实际上大多数ML算法是以最适合数据的方式去找用于模型的“theta”或系数或参数(此类算法的典型例子是Logistic Regression 和 Artificial Neural Networks)。当然,这些算法比我靠视觉画条线要更好。它们通常基于最优化的函数,它们通过模型拟合线,把实际的值与预言的值之间的错误降到最低。在ML的领域,这类错误也称为损失或损失函数。

还有一些应该非常广泛的算法,它们基于的是 Random Forest(随机森林) 或Gradient Tree Boosting(一种迭代决策树的算法)之类的决策树集合,它们不会明确去针对一条线去找系统,而是去找其他参数去划分数据,得出更复杂的决策边界。实际上,事实是给出如上的标绘图,不解释为什么一条线应被选择为一个决策边界。我们在理论上应该为该数据集拟合一条曲线。

该黑色虚线应该被选择为一个决策边界,但是这存在一个问题,那就是每个数据科学家都会经常提到的过度拟合。曲线是创建决策边界的,非常局限于当前的数据集,如果有更多的数据点添加进来,可能就不能推广了。我们已经看到,每类有的100个数据点还是有200个数据点之间存在着巨大的差异。那么设想一下,如果更多的数据点加进来呢?

那就很混乱了。整个数据集标绘如上图,现在我用复杂的视觉化方法为该数据拟合的线就变得很有问题了。我们需要帮助机器学习算法现在去选择一条线或曲线,这条线能够最小化我们因为拟合这些决策边界导致的错误或损失。此外,我们在此需要算法的帮助,因为至今为此我们仅靠两个特征去解释声音数据集的从属,然而整个数据集是由21个特征构成的。

这是个好消息,也是个坏消息。

想象一下,我们用三个维度来替换至今为止已向大家展示过的两维度标绘,其中第三个维度是另一个特征,比如所有信号中的最大基本频率,我们就叫它做“最大基频(maxfun)”吧。想象一下如下场景:每个女性的最大基频都在0附近,而每个男性的最大基频都在1附近。如果我们用3D图像来标绘它,你就能更容易地想象到一个能以完美的方式来区分男性和女性的平面了。这真是太棒了。如果你为该数据集增加更多的特征,就可以想象出更高维度的平面(超平面)了,它有希望以更精确的方式把数据区分开。这是好消息。

坏消息是,我们没办法可视化地检查它,除非我们用 主要组件分析 之类降低维度的算法,举个例子,比如把这个高维度的数据转化为两或三维,这是有缺点的,在标绘轴中将不再有物理特征(比如平均基频或最大基频),但是有变量,它们是对你的数据集的最重要特征的推测。让我们通过举例来解释一下这一点,我们来标绘一个简单示例,它来自于声音识别数据集,具有语音的平均频率和中值频率。

如上图所示,这里有两个相关的变量,考虑到它们是来自于相同概率分布的音频样品,所以这是合情合理的。但现在对这两个变量的使用存在有多余的信息。应该找办法简化这些数据在更低维度中的方差的可视化图像,这样会更好。出于这个目的,我为这张图画了一个缩略版本。

如果我们选择一个尽可能可减少这两个变量信息丢失的方向投影出这些数据的可视化图像,从而代替这两个变量的可视化图像,那么会怎样呢?这是在z1轴完成的,但仍会有一些信息丢失的代价。针对此具体示例,这个方向可以看成是一个频率,但它即不是中值也不是平均值。然而,想象一下把21维的数据集投影到两维。我们实际上不可能了解这两维到底代表什么。此外,在这个简单示例中并没有丢失太多的信息,但把21个特征投影为两个将导致大量的丢失。在数据的可视化期间它应该很有意思,但不应该用在机器学习算法的执行上。

我们已经看到这些数据集中的有些特征是相互关联的,它们应该被包含在机器学习项目中吗?我们实际上应该使用多少特征?仅使用两个特征和所有这些数据点,该决策边界不足以对此分类问题有清晰的界定。当你把这条线作为决策边界来计算导致的错误或损失就会确认这一点。通过增加第三个特征(如果特征合适的话),损失应该会被降低。如果不是这样,那就表明要么这个增加的特征不合适,要么就是它对当前的问题没那么重要。

我希望通过本文能唤起你对机器学习的好奇心。这只是一个泛泛的介绍,要了解更多详情需要从前到后地开发和理解一个机器算法项目。机器学习算法可以用每种编程语言来实现。Python 和R 是其中最常用的语言,而且针对机器学习有非常棒的类库,比如用于模型的scikit-learn 和用于信件的caret。我建议你以自己选择的语言去深入钻研一个教程。我要说的就是这么多了,希望你能了解其中的全部内容。

   
次浏览       
     
相关文章 相关文档 相关视频



我们该如何设计数据库
数据库设计经验谈
数据库设计过程
数据库编程总结
数据库性能调优技巧
数据库性能调整
数据库性能优化讲座
数据库系统性能调优系列
高性能数据库设计与优化
高级数据库架构师
数据仓库和数据挖掘技术
Hadoop原理、部署与性能调优
最新活动计划
LLM大模型应用与项目构建 12-26[特惠]
QT应用开发 11-21[线上]
C++高级编程 11-27[北京]
业务建模&领域驱动设计 11-15[北京]
用户研究与用户建模 11-21[北京]
SysML和EA进行系统设计建模 11-28[北京]

MySQL索引背后的数据结构
MySQL性能调优与架构设计
SQL Server数据库备份与恢复
让数据库飞起来 10大DB2优化
oracle的临时表空间写满磁盘
数据库的跨平台设计
更多...   


并发、大容量、高性能数据库
高级数据库架构设计师
Hadoop原理与实践
Oracle 数据仓库
数据仓库和数据挖掘
Oracle数据库开发与管理


GE 区块链技术与实现培训
航天科工某子公司 Nodejs高级应用开发
中盛益华 卓越管理者必须具备的五项能力
某信息技术公司 Python培训
某博彩IT系统厂商 易用性测试与评估
中国邮储银行 测试成熟度模型集成(TMMI)
中物院 产品经理与产品管理
更多...