zoukankan      html  css  js  c++  java
  • 机器学习原理与算法(一) 机器学习概述

    版权声明:本系列文章为博主原创文章,转载请注明出处!谢谢!


     本章索引:

    本章为整个系列的引言部分。将包含以下内容:

    1. 机器学习的动机

    2. 机器学习的应用场景

    3. 机器学习的定义


    在正式开始本系列文章的第一部分以前,我非常迫切的希望给众看官分享一桶鸡汤,至少这是我自己喝过的鸡汤,且细品过它的美味。

    时间回溯到大约一年前,彼时的我,已经从学校离开多年,却不得不去探索一个熟悉而又陌生,美丽而又讨厌的名词 - 傅里叶变换熟悉-因为考试需要,无数次强行记忆傅里叶变换公式;陌生-因为毕业后就没有再联系过它;美丽-因为数学本身是完美的,美到让我们抑制不住满怀的激动,去和心爱的姑娘分享为什么欧拉公式($e^{ipi} +1=0$)是世界上最美的公式(然后被姑娘一脸嫌弃:没情趣);讨厌-因为...不说了,不去百度,谁还能告诉我傅里叶变换和逆变换的积分定义式?反正我在考试结束后就迫不及待的忘记了它。

    博主愧为通信专业的硕士毕业生,却没有在学校中真正明白它的实际意义。相信通信相关专业的学生大都被它折磨过(真·学霸无双除外)。是它,是它,就是它,在我们的花样年华的青葱岁月,联合拉格朗日、拉普拉斯、莱布尼茨等一众妖孽(玩笑,对这些前辈当十分敬佩和尊重,“妖孽”只是形容学生对这些词语的畏惧而已),一遍又一遍的摧残着我们幼小的心灵。曾几何时,我们能熟记各种函数的傅里叶变换和逆变换公式,却总不能深入到它内心,去理解它到底能做什么,为什么函数们要像个小姑娘一样变来变去,从直观的时域变到无比抽象的频域,再不厌其烦的变换回来。我们不知道,我们也不想知道,反正考试不用知道。我们需要做的,就是熟记公式,套上试题,然后在考试后尽快忘记它们!一切看起来万事大吉了。

    但是,这就是我们学习的真正目的吗?我们在学校里以为最没有用处的课程,却成了工作中最有用的工具;我们不得不在年老以后回去一遍又一遍的回想曾经排斥的课程内容。这是学生的之错还是教育之殇?

    让我们回到上面提到的傅里叶变换的故事,我在这里并不是要详解它的原理,而是一篇讲解傅里叶变换的博文用同样的鸡汤点醒了我对教育的思考。博客地址在此:http://blog.jobbole.com/70549/。我要表达的观点,原作者已经在博文末尾很明确的阐述了,我只负责搬运:

    "老实说,数学工具对于工科生和对于理科生来说,意义是完全不同的。工科生只要理解了,会用,会查,就足够了。但是很多高校却将这些重要的数学课程教给数学系的老师去教。这样就出现一个问题,数学老师讲得天花乱坠,又是推理又是证明,但是学生心里就只有一句话:学这货到底干嘛用的?

    缺少了目标的教育是彻底的失败。

    在开始学习一门数学工具的时候,学生完全不知道这个工具的作用,现实涵义。而教材上有只有晦涩难懂,定语就二十几个字的概念以及看了就眼晕的公式。能学出兴趣来就怪了!

    好在我很幸运,遇到了大连海事大学的吴楠老师。他的课全程来看是两条线索,一条从上而下,一条从下而上。先将本门课程的意义,然后指出这门课程中会遇到哪样的问题,让学生知道自己学习的某种知识在现实中扮演的角色。然后再从基础讲起,梳理知识树,直到延伸到另一条线索中提出的问题,完美的衔接在一起!"

    鸡汤到此,没喝够的同学们请回去再喝一遍。


    我为什么长篇大论讲解一个看似与机器学习关系不是很大的故事?我只是不想再让看到这篇博客的同学们再走同样曲折的道路。一个理论,如果你不能明确它的研究动机和应用场景,那么它不过是一个枯燥而没有用处的知识。所以,对于那些有印象但不清楚为什么要使用机器学习算法、以及何时才合适使用机器学习算法的看官们,请务必仔细阅读这一部分的内容,虽然我没有说三遍,但,这的确很重要!!在错误的场合使用机器学习,不但对解决问题毫无帮助,还会使我们变成哲学家 -- 把简单的问题搞复杂。(博主自己也是小菜鸟,理解如果有误还望不吝指出)。

    1. 机器学习的动机

    在过去的几十年,已经有很多计算机程序帮助人们解决了大量的实际问题。然而,人们注意到实际的情况中存在这样一类问题:我们无法针对问题本身,将程序逻辑直接编写出来。

    例如,我们希望有一个程序可以识别手写的字母或者数字,这是很难用直接的逻辑实现的。因为手写的字体千变万化,我们费劲千辛万苦编写逻辑和程序,告诉机器“茴”字有三万种写法,回头就来了一个不按套路出牌的狂草玩家 -- 他带来了茴字的第三万零一种写法,然后,程序员:我有一句***不知当讲不当讲...

    一个更容易明白的经典例子 - 买水果。诸君请自己过目。

    总结下来,对于这类输入数据千变万化、无法用固定逻辑来适配的问题,机器学习无疑是最好的解决方案。在机器学习算法中,我们不是针对问题本身去编程,而是教给机器一个自己从样本中学习规律的方法(就是传说中的训练 - training),学习完成之后,无论接下来待处理的数据多么复杂,算法都会根据自己学习的知识推断最佳结果。所以对机器学习来说,样本是很重要的输入。

    2. 机器学习的应用场景

    补充一点关于应用场景的讨论:对于一些逻辑不复杂的算法,机器学习不一定能强行使用。曾经和导师在非正式场合讨论过,机器学习在通信领域的网络交换技术上是否可以使用,导师给的结论就是因为网络流量数据还没有复杂到需要用机器学习来处理的地步,所以暂时还没有太多这类研究。这就好比,我们需要用机器学习实现排序算法吗啊?显然不需要,因为排序问题中的规则很固定,设计专门的算法解决即可。

    3. 机器学习的定义

    前面两章把机器学习一通描述,实际上它一点也不神秘。个人理解,它只不过是一些数学算法在编程中的应用和优化而已。

    Machine Learning: Fields of study that gives computers the ability to learning without being explictly programmed.  --Arthur Samuel (1959)

    上面这段引用是机器学习一个非正式但非常直观的定义: 在不直接针对问题进行编程的情况下,赋予计算机学习能力的一个研究领域。

    Machine Learning: Well-posed Learning Problem: A computer program is said to learn from experience E  with respect to some task T and some performance measure P, if its performance on T, as measured by P, improves with experience E. --Tom Mitchell(1998)

    接下来是正式的--一个合理的学习问题应这样定义: 对于一个计算机程序来说,给它一个任务T和一个性能测试方法P,如果在经验E的影响下,P对T的测量结果得到了改进,那么就说该程序从E中学习。

  • 相关阅读:
    Selenium自动化测试-unittest单元测试框架
    Python 面向对象
    【新手总结】在.Net项目中使用Redis作为缓存服务
    asp.net性能优化之使用Redis缓存(入门)
    浅谈MVC、MVP、MVVM架构模式的区别和联系
    jquery uploadify在谷歌浏和火狐下无法上传的解决方案(.Net版)
    [翻译]NUnit---Action Attributes(八)
    [翻译]NUnit---String && Collection && File && Directory Assert (七)
    [翻译]NUnit---Exception && Utility Methods (六)
    [翻译]NUnit---Condition Asserts && Comparisons Asserts && Type Asserts (五)
  • 原文地址:https://www.cnblogs.com/li--chao/p/7302389.html
Copyright © 2011-2022 走看看