机器学习并没有那么深奥,它还很有趣
编者按:在科技圈,如果你不懂“机器学习”,那你就 out 了。当别人在谈论机器学习娓娓道来时,你却一头雾水,怎么办?在跟同事的聊天中,你只能频频点头却插不上话,怎么办?让我们来做些改变!Adam Geitgey 撰写了一份简单易懂的《机器学习,乐趣无限》的资料,共分为5个部分,主要针对所有对“机器学习”感兴趣,却苦于不知从何下手的朋友,希望。能借此让更多人认识了解“机器学习”,激发其对“机器学习”的兴趣。
相信很多人都已经厌倦了维基百科上的长篇累牍,迫切地希望能有人给出个更准确、更高水平的解释。这些,正是“机器学习”将为你做到的!
什么是“机器学习”?
机器学习,意味着你不再需要编写那些纷繁复杂的特定传统代码,机器运用一套通用的算法——泛型算法,就能告诉你关于一组数据的有趣之处。不需要写代码、编程序,只要把数据交给泛型算法,它就能自动建立起数据逻辑。
举个例子:用于分类的泛型算法是能够把一组数据分门别类的,用于识别手写数字的分类泛型算法同样能够做到在不改变代码的条件下将垃圾邮件和非垃圾邮件区分开。两者使用的是同一种泛型算法,但是因为输入的数据不同,所以输出的分类逻辑是不一样的。
这一种机器学习算法相当于一个黑盒子,能够处理各种有关分类的问题。
“机器学习”是一个呈伞状结构的体系,除了分类算法以外,还覆盖了各种各样其他的泛型算法。
两类机器学习算法
你可以把机器学习算法暂且想象为拥有着两大类分支的体系——有监督学习和无监督学习。这两者的区别显而易见,不外乎是有无监督之差,但是其重要性却是不容忽视的。
有监督学习
假设,你现在是房地产经纪人,你的业务持续增长,所以你必须雇一帮新的实习代理帮忙。然而当下的问题是:你只要随便一瞥就能知道一间房子大概的价值,但是你雇来的实习代理不行,他们不如你经验丰富,还做不到对房子进行相对准确的估价。
那么为了帮助你的实习代理(当然同时也是为了给你自己放假),你可以编写一个能够完成房产估价工作的应用程序,这个程序能够根据房子的大小、周边环境等条件找出相似的房子,然后进行价格预估。
因此,你需要记录下你所在城市三个月内房产交易的信息。针对每笔交易,你需要记录下一系列细节信息,比如:房间数目、房子大小、周边地区环境,等等,最重要的是要记录下交易的最终价格。
以上就是我们收集到的数据,专业地称之为“训练数据”,我们希望通过这些数据建立一个程序,来帮助我们对我们所在区域的其他房子进行估价。当然,我们同时也希望能通过这些数据,对区域以外的其他房子进行价格预估。
这种模式就叫做“有监督学习”。
你从一开始就知道了每间房子的价格,换句话说,你已经知道了一个问题的答案,而且你能够原路返回,重新思考这个问题,从而建立起一个解决这个问题的思路和逻辑。
那么建立一个能预估房价的应用程序,你需要把关于每间房子的数据信息——“训练数据”——输入你的机器学习算法中,算法就会得出用于解决这些数据关系的一套数学公式。
这就有点像一份数学考试的答案纸被涂掉了所有的算术符号,就像下面这张图。
天啊!老师答案纸上的算术符号不知道被哪个淘气的学生都涂掉了!这个时候你应该很难看出这次考试考的是什么数学问题,到底是加法还是减法?
所以要解决到底是加法还是减法的问题,你这时就需要对左边和右边的数字进行一些“计算加工”来弄清他们之间的关系了。
通过这种“有监督学习”,你可以让电脑帮你完成一系列的“计算加工”工作。当你弄清楚等式左右两边的数学关系以后,你就会知道用什么方法解决这个数学问题了,那么类似的问题也就迎刃而解啦!
无监督学习
我们再回到前面提到的房地产经纪人的例子。假如就连作为房地产经纪人的你,对每间房子的价格都不确定,那该怎么办?
如果你了解到的只有房子的大小、位置这些信息,那也没关系,用我接下来介绍的“无监督学习”你一样能有所作为。
机器学习可以让你在没有掌握有决定性意义的数字信息(这里指的是房子的价格)的条件下也能有所作为。
这就有点儿像,有个人递给你一张纸,上面写着一串数字(这里指的是除了房价以外的其他数据信息)然后告诉你“我也不知道这一大串数字是什么意思,但是你应该能从中得出些隐含的信息,好好干,祝你好运!”
我们拿到这串数字数据能做些什么呢?对于一个新手来说,你可以用一个算法自动识别出你的数据内部的细分市场区隔。你可能就会发现邻近大学地区的一些买家倾向于购买房间多、面积小的房子,而在郊区的买家则比较青睐建筑面积大的,房间数量不需要多的(大概只需三个)房子。了解了不同客户的不同需求能够对你的市场推广工作起到很大的指导作用。
除此之外,你能做的还有就是自动识别出那些与其他不同的离群孤立的房子,可能那些孤立出来的房子都是高楼大厦,所以你可以有针对性地把销售主力集中在这个区域。
在这篇帖子接下来的部分,我们将会更多地关注在“有监督学习”上,但这并不代表“无监督学习”就是无用的。事实上,随着算法的不断完善,“无监督学习”变得越来越重要,因为它在数据没有被贴上正确答案标签的条件下同样能使用。
给学者们的附注:确实是有很多不同类型的机器学习的泛型算法,但是对于刚入门的新手来说,从这两类算法开始确实是一个不错的选择。
运用“机器学习”给房子进行估价确实很酷,但是这真的算是学习吗?
作为人类,你的大脑可以解决很多种突发状况,而且在没有明确的指示的情况下同样可以学会处理这些状况。如果你很长一段时间都在做房屋销售,那么你就会对房屋的正确估价、房屋的营销策略、房屋的潜在客户等产生本能的反应。而强大的人工智能调查的目的就是把产生这种本能反应的能力在电脑上复制下来。但是就现在来说,机器学习算法还没能达到那么高的水平,它暂时只适用于一些特定的、有限的问题。因此,在这种情况下,“学习”被定义为“根据示例数据得出相应的公式来解决特定的问题”可能更为恰当。但是很显然“机器运用根据示例数据得出的公式解决特定问题”这个定义不能作为个好名字,所以,我们干脆就直接称之为“机器学习”。
当然,可能在50年后人工智能已经强大到那种地步了,那么你一定会觉得我写的这篇帖子里有点奇怪。如果真是如此,请你放下这篇帖子,让你的机器人保姆给你做个三明治,尽情享受人工智能带来的便捷和舒适吧。
话不多说,我们试试编写那个房屋估价的程序吧!
我们到底怎么编写一个能够对房子进行估价的程序呢?往下读之前,请你先在自己的脑海里想想。
假设你现在对“机器学习”一无所知,你大概会写一些房屋估价相关的一些基本规律和规则吧?就像这样:
如果你能耐下性子细细研究上面这些代码,说不定你会写出个像样的估价程序。但是,这个估价程序并不是完美的,当价格出现波动时,你的估价程序可能就不适用了。
如果电脑能够帮你输出一个相对准确的估价函数岂不是更好?只要这个函数输出的估价能跟原始数据中的价格相吻合,没有人会在乎这个函数到底是怎么来的。
换种方式来理解这个问题:如果把房子的最终价格比作一碗汤,而汤中的食材就是“房间数目”、“房子大小面积”、“周边环境”这些必需的信息。如果你了解每种食材(房产估价的所需信息)分别对这锅汤(预估的价格)的影响程度,你应该就会有一个相对确切的“炖汤食材比例”,这个比例同样也能用来对房子进行估价。
你会发现,以上那些假设虽然不甚恰当,且略微不切实际,但是会把你的原先的复杂的函数简化到以下程度:
留意一下以下加粗的几组数字:841231951398213, 1231.1231231, 2.3242341421, 以及201.23432095。这些就是我们用于权衡计算的指标数字,如果我们能计算出适用于所有房子的完美指标,那么程序就能预估房子的价格了。
计算出这个完美指标最笨的方法就像这样:
第一步:
把各个指标设置为1.0
第二步:
运用所有你了解的房产价格信息来测试你的程序,检查你求得的函数输出的结果与实际房价的偏差。
用你求得的函数来对每间房子进行价格预估。
比如说,假设第一间房子实际售价为250,000美元,但是你的函数输出的预估价为178,000美元,那么就这一间房子而言,程序价格预估的偏差就是72,000美元。
现在把你数据库里所有的每间房子价格偏差的平方值相加。
假如你数据库里有500个房屋成交信息,而通过测试这些交易信息得出的你的函数预估偏差总值达到了86,123,373美元,这数字就代表着你的函数当前的偏差总值。现在,把这个偏差总值除以500,得出每间房子预估偏差的平均值,把这个平均值暂且先称为函数的“成本费用”。如果你能通过对权衡指标的把玩从而把“成本费用”降低至零,那么你的程序就完美了。这就意味着,根据输入的数据信息,你的程序就能够相对准确地对房子价值进行预估。
第三步:
运用所有可能的指标组合重复第二步。找到能让你函数的“成本费用”最大程度地降至零的指标组合,那你的问题就解决了。
三个步骤很简单吧!现在来看看我们前面都做了些什么吧:首先,你拿到了一些数据信息,然后把它运用到三个非常简单的、通用的步骤,最后得到了一个能对你所在地区的房产进行价格预估的应用程序(函数)。
“机器学习”如此神通广大,Zillow(美国一家房地产估价网站)可要当心咯!
然而,下面的这些问题可能会给你带来些困扰。
1. 最近40年以来,像语言学、翻译学等许多不同领域的调查显示,这些用于煮出一锅“数据炖汤”(根据刚刚炖汤例子创出的新词)的通用算法比人类自己琢磨出的一套规则有用多了,就连最笨的机器学习工具都要比专家级别的人类强。
2. 你最后研究出来的那个函数对“房间的大小面积”或是“房间数目”一概不知,它只知道通过那些输入的已知数据来算出最正确的估价答案。
3. 很可能你完全不了解一组指标数据是怎么预估出房产价值的,也就是说你得到了一个你不完全了解其工作原理,只知道它能帮你预估房价的函数。
4. 想象一下,假如你刚刚研究出来的房产价值预估的函数输入的不是系数变量“房产面积”和“房间数目”,而是一大串数字,而这其中的每个数字都代表着用装在你车顶上的相机所拍下的照片的像素亮度值。那么这个时候,把输出的预估结果称作“房产价格”就似乎不太贴切了,称之“方向盘转向度”才更恰当。至此,你就已经研究出一个能让汽车自己掌握方向的函数了。很神奇吧?
前面第三步中提到的“运用所有可能的指标”是怎么回事呢?
当然,你不可能通过一个个地尝试完所有可能的指标来找出一个完美的组合,因为这要花费你一辈子的时间去尝试无穷无尽的数字。
为了克服这种低效率的尝试,数学家们已经研究出许多种更为简单有效的方法。下面是其中之一:
首先,根据上面提到的步骤二中的数据信息写一个简单的等式关系:
这个就是你的“成本费用函数”
现在,试着用机器学习的数学术语把这个等式关系重写一次
代表你当前的指标数,J( )代表在当前的指标数下你的成本费用。这个等式关系就代表着我们现在的价值预估函数与实际的偏差程度。
如果我们把这个成本费用函数加入所有可能的指标数据,用曲线图像表示出来,我们会得到一个像这样的曲线图:
我们的成本费用函数曲线图图像呈现一个碗状,纵坐标表示成本费用。这个图像中蓝色的最低点就是我们成本费用的最低值,意味着我们的函数偏差值最小。相反,最高点就是我们函数偏差值达到最大。所以,当我们找到能使这个图像达到最低点的指标值的时候,问题就解决了。
因此,我们要不断地调整我们的指标值来接近图像的最低点,就像在走下山路。只要我们能在不断的调整中,一点点接近图像最低点,我们最终就能在不一个个尝试数字的情况下找到最合适的函数方程式。
如果你还记得微积分学的一些知识的话,你应该会记得如果你求出了函数的导数,就相当于知道了这个函数在各个点的切线斜率。换句话来说,就是知道了哪个方向角度能使我们在图像上呈下降趋势,我们可以借助这些知识来接近图像最低点。
如果我们能运用每个指标值求出了成本费用函数的部分导数,那么我们就能相应地减少每个指标的值,我们就能离“山脚”更进一步了,终究会达到最低点,找出那个最佳的指标值。(如果上面的做法都不奏效,别担心,继续往下读。)
上面的是为函数找出最佳指标值的方法之一的相对高级的总结,我们称之为“梯度下降法”。如果你对这些细节感兴趣的话,可以深入探究一下。
当你使用机器学习软件工具库去解决一个实际的问题,以上的工作你都不用担心。但是了解它实际工作流程也是很有必要。
机器学习还给你带来了哪些方便?
从专业的角度讲,前面提到的泛型算法三步走也被称作“多元线性回归”。我们尝试着研究出一个能适用于所有房屋数据信息的等式关系,然后用这个等式关系去对一间你完全没有见过的房子进行价值预估。能够用这个看似虚拟的等式关系来解决实实在在的问题确实很让人吃惊。
然而,我前面介绍的方法在一些简单的案例中能奏效,但它并不是万无一失的。原因之一就在于房价的非线性的特点,也就是说房价是没有特定规律可循的。
所幸的是我们有很多方法去克服房价的不确定性。还有很多其他的机器学习算法能够解决非线性数据,像类神经网络或是有核支持向量机等;而且还有很多针对复杂的线性问题使用的线性回归方法。总之,不论哪种方法都是以找出最佳指标值为目的的。
然而,和大多数人一样,我还是忽略了过度拟合的问题。我们在初期很容易就能找出一系列切合你原始房产数据库的指标值,但是这些指标值仅仅适用于你的原始数据,对于原始数据库之外的新的房产数据就不起作用了。针对这个问题,我们同样有方法去解决,比如说正则化处理,或者使用交叉验证数据集。懂得怎么处理这些问题正是掌握机器学习的关键。
换言之,尽管基础理念都很简单,但是你要真正掌握机器学习并且取得成效是需要一些技巧和经验的。所幸,这些技巧和经验,是每个开发人员都能够通过学习掌握的。
机器学习的神奇之处在哪?
一旦你见证了运用机器学习技术就能轻轻松松完成一件貌似非常难的任务(比如字迹识别),你就会明白只要有足够的数据信息,就能用机器学习解决很多复杂的问题。你只需简简单单地输入数据信息,等着电脑给你输出一个适用于你的数据的等式关系。
但你必须要清楚机器学习只能够解决数据问题,所以你要确保你输入的数据信息对解决问题是有帮助的。
比如说,假如你建立了一个房价预估模型,而这个模型的依据是房子内盆栽植物种类,显然这个预估模型是不可能预估出房产价值的。因为盆栽植物种类与这间房子的价格是没有任何关系的,所以电脑是没办法导出这两者之间的关系式的。
你只能建立一个实际存在的关系模型。所以切记,如果一个专家都不能人工地用那个数据去解决问题,那么电脑同样也是不能的。不要说既然人类都能解决,那么要机器何用,我们应该关注在机器在解决问题上帮人类省下了多少时间。
怎样进一步了解机器学习?
在我看来,当前机器学习的最大问题就是它的使用仅局限于部分学术界和商业调研,普及度尚待提高;同时,由于缺少简单易懂的行内资料,一些希望对机器学习有进一步了解的外行人只能望而却步。不过,这些问题正一步步被人类解决。
由Andrew Ng在Coursera开设的免费机器学习课程是相当有价值的,我强烈推荐从这个课程开始了解机器学习。它对那些有计算机科学学位的人和有一点点起码的数学基础的人来说更易理解。
你可以下载安装SciKit-Learn,这是个涵盖所有标准算法的Python框架,你能用它对各种不同的机器学习算法进行把玩研究。
注:本文由「图普科技」编译,您可以关注微信公众号tuputech,获得最新、最好的人工智能资讯。