《机器学习基石》课程学习总结(三)

前面两篇文章要点回顾: 第一篇:机器学习的主要任务是用算法A,利用数据集D从假设集H中挑出一个函数g,使得E_in(g)最小。 第二篇:可以证明,当假设集H的d_vc是有限值,数据集D中样本数量N足够大时,找到的函数g的E_in和E_out很大概率上是近似相等的,因此,E_in很小时可以认为E_out也会很小。也就是说,机器确实从数据中学习到了“知识”。 这篇文章是对第8课内容的总结,比较短,但是很重要。

1、如果数据中有noise

在前面两篇文章中,讨论机器学习时默认有一个前提是成立的,那就是数据集D中的x由某个分布独立产生,y由f(x)产生。现实的数据集D往往不能满足这个条件,而是可能掺杂着noise,以发放银行信用卡为例,noise可能有三种形式:

  • 某个样本点(x,y),x仍是由某个分布产生,但y却与f(x)相反,也就是说,按照函数f计算x,应当发放信用卡,现实却是没有发放信用卡(f(x)=1,y=0),反之同理。
  • 同样的x,不一样的y,在数据集中,同样的x,有的对应的y为1,有的对应的y为0。
  • x有误。样本点中的x不是与其他x产生自同一分布。即顾客个人信息有误。

经过前面各种证明,好不容易得出了机器可以学习的结论,noise的存在,让我们回到原点,我们不得不再次审视,面对有noise的数据集D,机器还可以学习吗?更具体一点,之前推导出的vc bound还有效吗?

所幸的是,尽管有noise的存在,vc bound还是有效的,也就是说,如果我们找出的函数小g,在有noise的数据集D上的E_in很小,那么,它的E_out也有很大的概率是很小的。这里的E_out使用的样本也是同样掺杂着noise的。

从条件概率来看noise,我们可以认为数据集D中的y不是来自f(x),而是来自一个条件分布P(y|x), 只不过P(y = f(x) | x) > P(y != f(x) | x)。此时,对于二元分类问题,我们将f(x)称作ideal mini-target function。因为f(x)就是我们希望尽可能接近的目标函数,使用它做分类预测时,所犯的分类错误率是最小的。

在这种情况下学习到的函数小g也具有了概率的含义,也就是说,给定x,y等于g(x)是一个大概率事件,y不等于g(x)是一个小概率事件。此时的g仍然是在尽可能模仿f,但由于数据中noise不可避免,使得我们的函数小g只能模仿在noise下表现出来的f。

一句话总结:noise可以看成是条件分布P(y|x)。在二元分类问题中,f(x)就是对于给定的x,概率最大的y值,它是机器学习的新目标函数,称为ideal mini-target function。

2、错误衡量err

观察上面定义的ideal mini-target function,容易知道,只要我们能够学习到一个函数小g,使它尽可能接近f(x),那么,用小g做二元分类预测时,犯的错误将会最小。这里有一个很容易被我们忽视的问题,那就是衡量小g犯的错误的大小。

在二元分类问题中,衡量小g犯的错误很简单,假设对于x,对应的样本值为y,小g的预测值为g(x),若g(x)==y,则所犯错误为0,若g(x)!=y,则所犯错误为1。这样的错误衡量称为“0/1 error”。

实际上,对于不同的问题,还有许多的错误衡量err,比如在回归问题中常用的平方错误衡量:err(g(x),y)=(g(x)-y)^2

那么,不同的错误衡量err对我们做机器学习有什么不同的影响呢?

一句话概括就是:P(y|x)和err联合在一起,会决定ideal mini-target function。

比如在二元分类问题中,假如P(y|x)已经确定,err采用“0/1 error” ,那么,ideal mini-target function 就是f(x),即对于给定的x,y为f(x)的概率最大。

在实际的机器学习问题中,P(y|x)是未知的。但是通过选用不同的err,可以隐含地决定ideal mini-target function,也就是我们的算法学习的目标函数。课程视频中有一个简单的小例子来说明这个问题,可用来帮助理解,这里不再赘述。

那么问题来了,如何确定哪个err比较好?

答案是:看你要解决的具体问题,这是评价err好坏的根本标准,但仅仅考虑这一点也是不行的,因为不同的err,在实现算法A时的难度也是不一样的。最后选择的err是在二者之间的一个trade-off。

3、加权分类

这部分内容比较简单,简述如下:

在样本集中,不同的样本(x_n,y_n)有不同的重要性,犯错的代价是不一样的,为了体现出这一点,可以采用“虚拟复制”技术,将其归约为普通的0/1 error问题。

原文发布于微信公众号 - 人工智能LeadAI(atleadai)

原文发表时间:2018-02-04

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏项勇

笔记68 | 切换fragmengt的replace和add方法笔记

1444
来自专栏java闲聊

JDK1.8 ArrayList 源码解析

当运行 ArrayList<Integer> list = new ArrayList<>() ; ,因为它没有指定初始容量,所以它调用的是它的无参构造

1192
来自专栏计算机视觉与深度学习基础

Leetcode 114 Flatten Binary Tree to Linked List

Given a binary tree, flatten it to a linked list in-place. For example, Given...

1958
来自专栏xingoo, 一个梦想做发明家的程序员

AOE关键路径

这个算法来求关键路径,其实就是利用拓扑排序,首先求出,每个节点最晚开始时间,再倒退求每个最早开始的时间。 从而算出活动最早开始的时间和最晚开始的时间,如果这两个...

2527
来自专栏拭心的安卓进阶之路

Java 集合深入理解(6):AbstractList

今天心情比天蓝,来学学 AbstractList 吧! ? 什么是 AbstractList ? AbstractList 继承自 AbstractCollec...

19210
来自专栏后端之路

LinkedList源码解读

List中除了ArrayList我们最常用的就是LinkedList了。 LInkedList与ArrayList的最大区别在于元素的插入效率和随机访问效率 ...

19710
来自专栏MelonTeam专栏

ArrayList源码完全分析

导语: 这里分析的ArrayList是使用的JDK1.8里面的类,AndroidSDK里面的ArrayList基本和这个一样。 分析的方式是逐个API进行解析 ...

4519
来自专栏刘君君

JDK8的HashMap源码学习笔记

3068
来自专栏xingoo, 一个梦想做发明家的程序员

20120918-向量实现《数据结构与算法分析》

#include <iostream> #include <list> #include <string> #include <vector> #include...

1736
来自专栏赵俊的Java专栏

从源码上分析 ArrayList

1181

扫码关注云+社区