机器学习概述

李先生 2020年07月13日 127次浏览

机器学习概述

1. 通过一个生活案例切入机器学习

  • 语音识别

  • 图片识别(图片转文字)

  • 高铁的身份认证(对比身份证和人脸)

  • 等等

1.1从买芒果讲起

  • 怎么挑芒果才靠谱?

  • 妈妈告诉我

  • 金黄色要比浅黄色的更甜一些”

  • 买回芒果之后,你发现生活没有那么简单。一番细品,再苦想你得出结论:

    • “那些大个儿的金黄色的芒果一定是甜的,而那些小个儿 的金黄的就只有一半是甜的了”
  • 于是你再一次来到水果市场,原来的水果摊关门了换了一家新的,刚总结的经验在这里不 适用了,一切从头开始,你尝了一遍后发现:

    • “那些小个的浅黄的芒果是当中最甜的
  • 有一天,你旅游来到了一个新的国家,这儿的芒果味道与家乡的截然不同:

    • 绿色的竟然要比黄色的味道更棒
if 个头=“大” and 颜色=“金黄色” and 产地=“AAA” then 甜度 = 5            
if 个头="小" and 颜色="浅黄色" and 产地="BBB" then 甜度 = 4
if 个头=“小” and 颜色=“绿色” and 产地=“CCC” then 甜度 = 3
  • 你结婚了,你的另一半不喜欢芒果而喜欢苹果,为了 她,你跑遍了水果店,又得学“神农遍百果”, 摸索 苹果的特征和味道之间的关系

  • 想一想,总感觉哪里不对

    • 这个程序也有一个麻烦的地方 ,你每次遇到一个不符合程序规则的情况,你就要手工的修改一下你的规则,时间久了,你发现规则越来越 多,越来越复杂(这就催生了 规则引擎 这样的产品),你对芒果如此了解, 都可以拿下一个" 芒果科学家 "的 title 了(如果有的话_)。
    • 怎么办?能不能找到一个更加智能的挑选芒果的算法呢?有,那就是 机器学习 !其实,机器学习就是之前介绍的 规则算法的进化版,它能比人 肉寻找规则 更加聪明,能从数据中 自动的学到知识(这是机器学习中的 “ 学习 ”的含义)

    image20200713092936001.png

    image20200713094050299.png

    • 你在市场上随机选择了一些 不同品种的芒果(我们称之为 训练样本), 把每个芒果的特征信息都写进如下的一个表格中:包括 颜色、大小、形状、 产地 等(我们称之为 特征变量 ),当然还有一个最重要的信息,就是每一 只芒果你亲自品尝过后的 甜度,你可以把它们标记为 甜和不甜(这称之为 目标变量 ,这个过程又叫 数据标记 )。你把这些数据输入到一个机器学习 算法中去,然后这个算法就会自动的帮你找到什么特征的芒果会比较甜 (这就得到了***机器学习模型***)

1.2写个机器学习算法吧

image20200713101017030.png

等你下一次到市场买芒果的时候,你只需要把摊位上的 芒果特征信息收集 一下,然后扔进你的 机器学习模型 中,它就会 自动预测 哪些芒果是甜的。 这个机器学习模型可能比之前经验的规则要更加复杂,挑选甜芒果的准确度要更高。例如之前挑选 100 个芒果,可能只有 70 个是甜的(70%的准确率, 这就是模型的评估指标 precision),而现在用机器学习模型可能有 90 个是 甜的,准确率达到了 90%。更加重要的是,你以后每吃一个芒果,都可以把 它的数据添加到模型中进行训练,不断 迭代升级你的模型,准确率也会越来越高。算法还可以在每次预测错误之后进行自我修正(这就是 增强学习), 更妙的是,你还能用 同一个算法来训练不同的模型,例如预测苹果、橙子、 香蕉、葡萄、樱桃、西瓜等等(这就是 迁移学习

1.3总结

  • 我们要挑选“甜”的芒果,即预测芒果的“甜度”,这就是 机器学习的目标, “甜”的 芒果叫 正例, “不甜”的芒果叫 负例
  • 奶奶告诉你金黄色的芒果都是甜的,其实这就是一个 最简单的模型,不过这个模型来源于经验规则,这个模型是 欠拟合
  • 只尝了一家水果店总结出来的甜芒果的规律到另外一家店就不适用了,这就叫模型的 过拟合,这是因为机器学习的样本太少,没有找到更 普适的规律
  • 你总结出来的挑选芒果的 if ... then ... 规则,就是模型的一种表现形式(基于规则的模型, 例如以后会学到的决策树算法结果就是这样的规则)
  • 你采集了大量的芒果的信息并记录成一张表格,这就是机器学习的 训练样本,机器学习 算法 就是基于这些训练样本来学习找到甜芒果的 规律
  • 训练样本中的芒果的一些信息:例如产地,颜色,大小等,这就叫 特征变量,机器学习 常常提到的 特征工程 就是指 采集这些特征变量 的过程。如何 设计和收集 足够多的特征变量,是决定机器学习预测效果非常重要的因素。
  • 按照模型挑选了你认为甜的 100 个芒果,结果吃过之后只有 70 个是甜的, 70% 就是 模型预测的 准确度(precision),这是预测模型评估非常重要的一个指标。
  • 算法每次在预测错了之后还能进行 自我修复,这就是机器学习中的 增强学习
  • 如果你已经训练好了一个挑选芒果的模型,然后根据数据稍微微调一下就用它来 挑苹果, 挑西瓜,这就是机器学习中的 迁移学习
  • 当你把挑芒果这件事情做得相当棒了,人人都来找你帮忙挑芒果,你就变成 芒果领域的 数据科学家了,如果你的模型比其他数据科学家做的模型都好,还掌握了别人不掌握的核 心技术,那你就是芒果领域中的 首席数据科学家
  • 有一天,你成立了一家公司,专门利用你的机器学习模型来帮人挑芒果,你给公司起了一 个时髦的 Slogan叫 人工智能挑芒果,恭喜你,你进入了时下最时髦的 AI+创业领域, 赶快融资圈钱吧,发财了别忘了我哦
  • ~

ps:欠拟合和过拟合

一个机器学习模型的质量问题,从对训练集样本拟合程度的角度,可以分 为两类:欠拟合(Underfitting)和过拟合(Overfitting)。

image20200713151820854.png

2.什么是机器学习

Looking for a function y=f(x)

image20200713104605718.png

image20200713104711035.png

image20200713104953184.png

image20200713105634401.png

3.了解机器学习的分类

机器学习,核心在“学习”两个字上,机器是如何“学习”的呢?一般来说有三种学习模式:
image20200713111338290.png

3.1监督学习

所谓的监督,简单的理解就是算法在学习过程需要指定目标来进行学习(例如需要知道训练样本中的 每一个芒果是甜的还是不甜)。就好比我们已经知道了题库中每道题目的正确答案,然后对所有这些题进 行学习。当我们学到了解题方法之后,对不在题库中的题目进行解答,最终验证我们的学习效果如何。

image20200713111718478.png

监督学习是机器学习中最常见和最重要的一种学习方式。监督学习主要用来解决预测性问题,最常用的 算法有如下 :

  1. K 近邻(K-Nearest Neighbors, KNN)
  2. 线性回归(Linear Regression)
  3. 逻辑回归(Logistic Regression)
  4. 支持向量机 (Support Vector Machine, SVM)
  5. 朴素贝叶斯 (Naive Bayes)
  6. 决策树(Decision Tree)
  7. 随机森林(Random Forests)
  8. 神经网络(Neural Network)

3.2 非监督学习

顾名思义,非监督学习就是一种无目标的学习。你可能会有很多疑问:无目标是什么意思?没有目标 那机器学出来的东西是什么?有用吗?其实这里说的无目标是相对监督学习的有目标来说的, **指的是学习 过程中没有目标变量的监督,但并不是说非监督学习是没有目的的乱学 **。其实不同的非监督学习算法都是 有各自的目的的,例如聚类分析,它的目的就是从数据中去发现结构,找到相似的数据把它们聚为一类。 之所以说聚类是非监督学习,就是因为到底聚多少个类,这个是需要算法自己去探索的。 非监督学习就好 比给了你一本书,让你去自学,从中找到一些规律

image20200713112245377.png

非监督学习算法常用于对数据进行探索性分析,例如 聚类,降维,寻找关联性 等。另外,监督学习和 非监督学习并非完全独立,有时候我们会把非监督学习的输出作为监督学习算法的输入,往往会产生比较 好的预测效果。常用的非监督学习算法有 :

  1. K 均值聚类(K-Means Clustering)
  2. 基于密度的聚类方法(DBSCAN)
  3. 主成分分析(Principal Component Analysis , PCA)
  4. 自组织映射神经网络(Self-Organizing Map, SOM)
  5. 受限玻尔兹曼机(Restricted Boltzmann Machine, RBM)

3.3 强化学习

强化学习不同于监督学习和非监督学习。在强化学习中没有原始数据输入让算法来学习强化学习面对的是一个不断变化的状态空间,要解决的是一个决策链问题。其目的是找到在当前状态下的最佳决策是 什么。这里的挑战是,当下的决策好坏当下无法验证和评估,要根据多次决策以后才能知道。就像下棋, 当前的决策(落子)要在五步十步棋之后才能判断是好还是坏。所以强化学习中并没有大量的原始数据输入,机器需要在 不断变化的环境 中通过大量的 试错学习,再根据某种规则找到产生最佳结果的路径,从而做出最佳决策

image20200713113110259.png

强化学习最经典成功案例就是 AlphaGo ,此外强化学习主要用于:玩游戏、机器人、自动驾驶 等领 域。你可以考虑利用强化学习算法来学玩微信的小游戏“跳一跳”,一开始不需要准备什么数据,就是让程序不停的玩,每跳一次**“死”了就惩罚,“不死”就奖励**,用不了多久你的程序就可以做到怎么跳都不 会“死”了

4.了解机器学习要解决的问题

机器学习并不是简单的玩数学游戏,它是能真刀真枪的解决很多实际问题的。简单归纳总结一下,机器学习主要解决六大类问题:

(1) 分类问题

抽象来看,分类问题就是构造一个分类器(Classifier) ,可以对数据样本的 类别进行预测。分 类器可以理解为一个函数: y=f(x) ,其中 x是自变量, y 是因变量,而且 y 的取值不是数值而是一个 类别标签,当我们知道了 x 的值之后,就可以根据 f(x)来预测 y 的值。分类问题属于监督学习 的范 畴

image20200713113747015.png

image20200713113800533.png

image20200713113822326.png

image20200713143503168.png

(2) 聚类问题

物以类聚,人以群分”,这就是聚类,它的目的就是要把相似的数据聚在一起。例如通信运营 商可以对手机用户的 通话行为 进行聚类,把 喜欢上网 的聚类一类,喜欢夜间打电话 的聚为另外一 类。你也可以对大量的文章进行聚类,把 相似的文章聚为一类 然后归到同一个文件夹中。聚类问题属于非监督学习的范畴

image20200713144841579.png
image20200713145455130.png

(3) 回归问题

回归问题和分类问题非常像,它们都属于监督学习的范畴。分类问题要构建的是分类器(Classifier), 而回归问题需要构建的就是一个回归器(Regressor)。回归器也是一个函数: y=f(x),其中 x 是自变 量, y是因变量,与分类问题不同的是, y 的取值是数值而不是类别。当知道了 x 的值之后,就可以通 过 f(x)来预测 y 的值。

image20200713145648575.png

image20200713145706132.png

(4) 关联问题

关联问题最有名的案例就是啤酒和尿布的故事。 关联规则算法可以从交易型数据中发现频繁关联 出现的 Item(商品),又称为购物篮分析和关联规则挖掘。关联规则挖掘属于非监督学习的范畴。
image20200713145821946.png

image20200713145812677.png

(5) 序列问题

序列问题包括 时间序列 的预测,序列型关联 规则(例如先看了速度与激情 1,接下来看速度与激情 2 的可 能性比较大)等。语言模型(哪些词经常可以搭配在一起)也属于序列问题。序列问题既可以 是非监督学习的方法(类似关联规则算法),也可以转换为回归,分类等 监督学习 的问题。

image20200713150057400.png

image20200713150108628.png

(6) 异常检测问题

异常检测就是检测样本取值是否显著的偏离常规,从中发现有意义的 孤立点异常值监督学习非监督 学习 都可以应用于异常检测问题。。

image20200713150310523.png

5.机器学习开发流程

  • 数据收集
  • 数据预处理
  • 特征提取
  • 模型构建
  • 模型测试评估
  • 投入使用(模型部署与整合)
  • 迭代优化

image20200713151002955.png
image20200713151036602.png

5.1互联网公司 机器学习工作者、数据挖掘工程师们 工作内容是什么?

  • 研究各种算法,设计高大上模型 ?

  • 深度学习的应用,N层神经网络 ?

  • ······

5.2大部分复杂模型的算法精进都是数据科学家在做

大多数程序员

  • 跑数据,各种 map-reduce,hive SQL,数据仓库搬砖

  • 数据清洗,数据清洗,数据清洗

  • 分析业务,分析case,找特征

  • 常用算法跑模型

我们应该怎么做?

  1. 学会分析问题
  2. 掌握算法基本思想,学会对问题用相应的算法解决
  3. 学会利用简便的库或者框架解决问题

ps:学好本门课的建议

很多初学者在学机器学习的过程中可能会遇到很多困惑:

  • 资料那么多,我该从哪里开始学起,给我推荐一本最好的入门书吧。
  • 数学和统计知识要学哪些?学多深?
  • 计算机编程要学到什么程度?
  • 算法的原理到底要理解到什么深度?那一堆数学公式都需要自己会推导吗?
  • 实际的工作和学习有什么差别?学完之后我能找到什么样的工作呢?

image20200713150547863.png

image20200713150611790.png

image20200713150633440.png

image20200713150645989.png

image20200713150730359.png

image20200713150744250.png