前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >写给大家看的机器学习书(第三篇)

写给大家看的机器学习书(第三篇)

作者头像
小莹莹
发布2018-04-23 14:31:41
7860
发布2018-04-23 14:31:41
举报
文章被收录于专栏:PPV课数据科学社区

题记 —— 我们为何出发

在开始这个系列文章的第三篇之前,为了对初次见面的朋友更友好,将这个题记放在前面。

哪怕所有的初心最终都被遗忘,至少现在的我们足够认真。 ——阿真

机器学习很火。 机器学习专家很贵。 所有大型互联网公司都驾着机器学习的马车朝着人工智能前进。

然而今天哪怕是互联网从业者,大部分也是不知道机器学习到底是什么的。机器如何学习?机器学到的是什么?为什么机器经过学习能够神奇的预测用户的喜好、股票的涨跌?人们好奇又渴望。

这里所说的从业者可能是开发工程师,可能是产品经理,也可能是运营,他们与机器学习专家们在同一家公司工作,参与同一个项目,但机器学习算法对他们仍然像黑魔法一样,神秘又疑惑。这样的局面未免让人沮丧,毕竟如果相对论都可以在高等教育中得到普及,有什么领域是复杂到没办法好好说清楚的呢。

这个系列文章,我将试着为开发工程师,产品经理、设计师、所有希望了解学习机器学习的人,介绍机器学习的原理、方法和实战技巧。

希望把所有的复杂变明了,所有的阴天破乌云,希望世界和平,阿门!

本篇综述

前两篇我们已经学习了机器学习的概念和组成:

这一篇,我们要具体地讲一个学习算法,把它用在有好货这个场景,看看这个算法到底是怎么样从用户日志中寻找规律,学得模型的。一旦学得模型以后就可以对未来做出预测 —— 预测用户是否会点击某个商品,预测人生的巅峰、世界的和平、一起学习机器学习的女朋友...

这个学习算法的名字叫 PLA,全称 Perceptron Learning Algorithm。其中 Perceptron 译作感知机,它是人工神经网络中最基础的两层神经网络模型。学好Perceptron Learning Algorithm,你离入门人工神经网络也就不远啦。

具体来说,这一篇我们将首先介绍PLA的假设集合,看看PLA的假设集合中等着被挑选的候选函数长什么样。看过PLA假设集合的函数表示之后,重要的是理解PLA假设集合的直观解释,事实上之所以把PLA作为第一个学习算法,就是因为它有着非常直观的理解方式。

接着将看到PLA的细节,PLA 是一个相当简洁的算法,算法过程仅有4步,我写的Python 编码含注释不到30行。学习PLA的重点应该放在理解PLA算法的第三步,理解PLA之所以被设计成这样,背后的含义其实朴素又直观。

然后,我们将讨论学习算法两个很重要的问题——学习算法能最终停止并学到东西吗?如果能,学习算法需要运行多久呢?这时我们将惊讶于经典PLA的两点性质:(1)算法可能永远也无法运行结束,会迷失在茫茫的训练数据中永远找不到出口。(2)哪怕知道PLA最终能找到出口,我们也无法事先知道学习需要花多久。不过别急于换台,我们紧接着就会给出一版升级的PLA算法,只需在经典PLA的基础上增加简单两步,就可以解决上面的问题。

好,我们开始吧。

1. PLA 的 假设集合 (Hypothesis Set)

首先,我们从有好货的用户日志中得到训练数据如下(考虑数据安全,数据当然是我Mock的):

2. Perceptron Hypothesis 的直观解释

3. PLA 怎么选一条最好的线

代码语言:javascript
复制
import numpy as npimport matplotlib.pyplot as pltdef PLA(trainingData):
    w = np.mat([1,2127,205]).transpose() # Step 1: 向量w赋初值
    while True: 
        (status, x, y) = noMistakePoint(trainingData, w)
        if status == 'YES': # Step 2: 切分正确,学习完成
            return w
        else:
            w = w + y*x # Step 3: 修正wdef noMistakePoint(training_data, w):
    '''训练数据中是否有点被切分错误'''
    status = 'YES'
    for (x, y) in training_data:
        if mSign(w.transpose() * x) <> sign(y):
            status = 'NO'
            return (status, x, y)
    return status, None, Nonesign = lambda x:1 if x > 0 else -1 if x < 0 else -1def mSign(m):
    '''判断某个矩阵的[0][0]元素正负.大于0返回1,否则返回-1'''
    x = m.tolist()[0][0]
    return 1 if x > 0 else -1 if x < 0 else -1

4. PLA 一定会停吗?PLA 多久会停?

当 PLA 停止计算时,就说明它找到了一条线能将所有的训练数据切分正确。那么问题来了,PLA 一定会停吗?它一定能找到这样的一条直线吗?

答案是:不一定! 事实上,如果训练数据本身就不存在任何一条线能将其正确切分,比如如下图所示,那么 PLA 无论如何也无法找到理想的直线。学习将进入永不停止的循环。

训练数据至少存在一条直线能将其切分开,称为训练数据是线性可分的 (Linear Seperable) 。因此:

训练数据是线性可分的 (Liner Seperable) ,是 PLA 能够学习的必要条件。

5. PLA 搞鸡毛啊!

这个时候有的朋友要骂娘啦,整了半天 PLA 的训练数据必须线性可分,哪怕线性可分需要计算多久也不知道。PLA 搞鸡毛啊! 不要急!!大招马上出来。

我们再看看下面这张图,这里的训练数据不是线性可分,是由其中两个点导致的。在现实中,哪怕原本的训练数据产生于某个“上帝真相”并且是线性可分的,在收集数据处理数据的过程中不可避免的会引入一些脏数据,这部分错误的训练数据我们称为噪声(Noise)。针对这种噪声数据引起的,原本线性可分的训练数据变成了不是线性可分的情况,有一个升级版的 PLA 算法,只需要增加简单的两步节能解决问题:

当然,如果你的训练数据不是线性可分是下图这种情况,作为线性分类器的 PLA 是无能为力的,这需要后面要讲的非线性模型来搞定。期待一下吧。

预告和其它

下一篇我们将围绕一个有关赚钱的机器学习问题展开讨论。

你是否也有过那么一时三刻的不自信:当你有一天成了机器学习专家,学会了从股市的历史数据中学得模型,这个时候你敢跟着模型对股市的预测,进行真金白银的投资吗?

所谓“有史为鉴,可以知兴亡”,从历史中总结出的规律,真的能在未来的预测中被信赖吗?为了做一个对未来负责的机器学习专家,我们下一篇将展开对这个问题的讨论。

感谢您的阅读,如果你希望收到后续文章的更新,可以考虑关注我。或者关注这个同名专栏,文章将会在您的通知中心推送更新。

再次感谢您的阅读,这里是《写给大家看的机器学习书》,希望我有把事情说清楚,有任何疑惑或者问题,欢迎留言。

祝开心 :)

系列推荐

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2017-03-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 PPV课数据科学社区 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 题记 —— 我们为何出发
  • 本篇综述
  • 1. PLA 的 假设集合 (Hypothesis Set)
  • 2. Perceptron Hypothesis 的直观解释
  • 3. PLA 怎么选一条最好的线
  • 4. PLA 一定会停吗?PLA 多久会停?
  • 5. PLA 搞鸡毛啊!
  • 预告和其它
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档