AI从零开始之预测效果评估

我们知道统计学有各种各样的方法可以用来处理数据,那么对一个数据集,各种统计学方法预测的精确度如何来评估呢?这就是本文重点讨论的内容。 一般来说,对回归(regression)问题,最常见的测量方法就是均方差(mean square error, MSE),它可以用下面的公式来表示: 这个公式中, 就是第i个观察数据的预测值,这样来看,当我们的预测值越接近真实的y,那么MSE就越小,反之则越大。当然,我们知道上述公式其实是利用training数据来进行计算的,所以,我们更准确地应该称之为training MSE。 这个时候,让我们静心想一想,其实我们并不关注这个model对我们training 数据表现的有多好,我们更关注地的应该是他对我们真实想预测的数据的表现。因此,一般来说,我们会通过一系列测试的数据集来验证我们的model最终的效果,也就是测试数据的MSE,而不是training data来进行验证。那假如我们没有测试数据集怎么办呢,我们简单地使用training MSE是否可行呢? 我们来看一个例子,如下图一所示: 图一 X和Y分布图 假如我们已经知道了真实的f是如图一种的黑色线所示,然后我们通过不同的统计学方法来预估f,这些方法的flexibility不同,其中橙色的线是我们通过线性回归,蓝色和绿色的线是通过光顺样条(smoothing splines)来预估的,当然蓝色和绿色的线的smooth level不同,我们可以看到绿色的线其实flexibility其实更大,当然他和我们的观察点的符合度也更好。但是,相比蓝色的线,他和真实的f之间的误差其实是更大的。 我们来看下面的图二: 图二 flexibility和均方差之间的关系图 这个图中的灰色的线其实是针对training 数据的MSE的情况,我们可以看到随着flexibility的提高,针对training data的MSE是会逐步减少的,慢慢的可以逐步达到一个很小的值。而红色的线是表示真正的测试数据的MSE的情况,因为我们例子中真实的f是一个非线性的情况,所以在flexibility比较小也就是线性回归的情况下,MSE是比较大的,随着flexibility的增大,这个MSE会逐步减小,到了一个最小点之后,flexibility增大反而会使得MSE变得更大。图中水平的虚线其实就是我们之前提到过的不可避免的误差(irreducible error),这一误差在任何方法中都会存在的。 一般来说,当training MSE非常小,但是测试MSE非常大的时候,我们称之为overfitting,一般来说这就是我们太想去train一个model来适配training data,甚至过度去满足那些random的数据特性了。 上面的例子我们看到的是一个f是非线性的情况,现在我们来看另外一个例子,这个例子中真实的f是一个接近线性的情况: 图三 真实f是接近线性的情况 图三中仍然黑色的线是我们的真实的f的情况,橙色是我们的线性回归的情况,绿色和蓝色仍然是不同的smoothness的光顺样条来预估。我们可以如下图四所示,我们的training MSE并没有什么变化,但是test的MSE因为本身真实的f就比较接近线性,因此在开始的线性回归中他的test MSE其实误差并不大,这样只是有一个很小的下降就可以到最低点了,而随着flexibility的增加,可以看到后面的test MSE的情况也会变得越来越不好。 图四 接近线性的f的情况下的flexibility和MSE的关系 另外一种极端的情况如下图五所示,真实的f是非常非线性的,这种情况下请示线性回归的开始他的test MSE就会特别大,而随着flexibility的增加后面的test的MSE的也只是小幅度的增加。 图五 特别非线性的f 其实从我们上面的几种情况来看,我们最理想的状况就是找到那个测试MSE最低点,而事实上,大多数情况我们都没有测试数据,如何来找到测试MSE最低点呢,一个很重要的方法就是交叉验证(cross-validation),这个我们会在后面的章节中详细介绍。 至此,本文所想和大家探讨的关于预测质量的内容就全部结束了,希望对大家有用。 转载请注明出处:http://www.softlifelogging.com/2018/06/05/ai从零开始之预测效果评估/ 更多精彩内容,敬请关注公众号: 随手记生活

Read More »

AI从零开始之如何预估f

我们在AI从零开始之统计学简介知道,统计学其实就是为了那个f而奋斗,也在AI从零开始之我们为什么为了那个虚无缥缈的f而奋斗中知道了我们为什么要评估这个f,那么本文就继续来讨论一下我们怎样来评估f。 一般来说,在评估f之前,我们总是已经有了一系列的可观察的数据,我们把这些数据称之为训练数据(Training data),就像下图一所示的学历和收入关系图中的红点,就是我们的训练数据。我们利用统计学的方法来训练这些数据并最终评估出f。总得来说统计学的方法有两种,一种是参数化(parametric)的一种是非参数化(non-parametric)的。 图一 学历和收入关系图 参数化的方法 参数化的方法一般分为两步: 就是假设一个函数格式,比如我们假设f就是一个简单的线性model: 当我们有了这样的假设之后,问题就变得很简单了,我们要做的事情就是来评估这些 , ,… 了。 在1中的model选择好了之后,下面我们就需要根据training data来train这个model了。同样以上面的线性model为例,我们需要找到相应的, ,… 来满足下面的条件: 所以,在参数化的方法中,我们把评估f简化成了评估一系列参数, ,… ,这无疑使得我们的工作变得简单了很多。然而我们同时也可以发现,这样的方法其实也是有缺点的,因为我们选择的model其实并不能真实表达正确f,我们当然可以选择更flexible的model来进行预估,不过越flexible的model意味着我们需要预估的参数就越多,这样他最初的简化这一好处就变得越小,同样的,越flexible也容易引入另外一个问题,就是overfitting,很容易受到一些错误或者噪音的干扰,这个问题我们在以后再详细描述。所以如何选择一个合理的model也是一个trade off的过程。 我们举个例子来看一下,假设我们收入和学历以及经历的真实关系如图二中的蓝色部分所示 :   图二 真实的f示意图 我们利用参数化的方法来预估这个f,假设我们还是选择了最简单的线性model: 那么我们就只要预估, ,即可,我们可以使用最小二乘法线性回归(least squares linear regression)来得到这些参数,如图三所示:   图三 最小二乘法线性回归的f 从图三可以看出,其实这个预估是不准确的,真实的f是有各种波动,而我们这里就没有了。 非参数化的方法 非参数化的方法没有显式地假设f的形式,他是尽可能地直接寻找一个和f相近的点。这样一来他就摆脱了参数化方法的那种固有的死板限制,从而更可能和真实的f相接近。当然我们知道有利必然有弊,这样的方法就需要大量的training data才有可能达到一个比较好的效果。 同样对上面的例子,我们可以使用薄板样条插值(thin-plate spline)来进行预估,得到的结果(smooth)如图四所示:   图四 薄板样条插值得到的f 我们可以看到这个图的结果和我们理想的f就比较接近,在使用薄板样条插值的时候,我们需要选择一个smoothness的值,不同的值会有不同的结果,假如我们选择的smoothness的值比较小,那么我们可能会得到如图五所示的结果: 图五 低smooth的薄板样条插值的f 图五中的结果可以完美的覆盖所有的training data,但是他的结果其实是不理想的。这就是我们之前提到过的overfitting。当然这些具体的内容我们可以在后期再详细讨论。 至此,本文就介绍了两种方法来预估f,一种是参数化的,一种是非参数化的。 转载请注明出处: http://www.softlifelogging.com/2018/06/05/ai从零开始之如何预估f/ 更多精彩内容,敬请关注公众号: 随手记生活

Read More »

AI从零开始之有监督学习和无监督学习

统计学学习可以分为两类,一类是有监督学习(supervised learning),另一类则是无监督学习(unsupervised learning)。那么这两个概念究竟该如何理解,本文就尝试从自己学习的角度来和大家分享一下,这中间有不对的地方,希望大家批评指出。 所谓有监督学习就是我们手上的数据是有一个明确的结果(或者label),然后我们可以根据这些数据来创建一个model,通过新的输入数据在这个model上预测或者评估出一个结果。 举个简单的例子来看,假设现在你是一个土豪,手上有很多房子,准备把其中一套房卖了开个小饭店。那么究竟这套房该卖多少钱呢,你可能会看看这套房所在小区及周边已经卖掉的房子卖了多少钱。我们简化一下,假设你周边的房子就和面积相关。然后你发现张三家的50平卖了300万。李四家的70平卖了500万,王二麻子加的100平卖了1000万……,有了这些数据之后,你通过这些数据来进行了一次学习,然后得到了一个model,把自己家房子的面积,比如120平输入到了这个model里面,希望得到一个预估的价格。这个过程就是一个有监督的学习,因为你手上的数据其实是很明确知道之前多少平的房子卖了具体多少钱的。 而无监督学习则是说我们手上的数据其实并没有一个明确的结果,然后我们来分析这些数据的共性或者关系,最后尝试做出一些分类。 同样上面的例子,你的房子已经卖了,现在这个小饭店也开起来了,在雇了几个漂亮的服务员之后你就开始营业了。过了一段时间,你准备看看你卖的菜的情况。然而此时你的数据并没有告诉你哪个菜是什么情况,你没有一个参考的结果,这时你把这些菜的销量拿出来看看,然后你会发现有一系列的菜他们的销量都不错,然后你就把他们归结到了一类。以后要是哪一天有了一个新菜的销量也在这个圈里面,你就同样可以把这个新的菜归到这一类之中了。 除了有监督和无监督,其实还有一个中间状态,我们称之为半监督学习。这个半监督的概念我理解就是你手上有一些数据是可以很明确的知道结果的,但另外一些数据则是没有明确结果的,当我们用这种数据来进行分析的时候,我们就称之为半监督学习。 举个例子,小时候我们学习各种动物,在课堂上老师教了我们这个是鸡,这个是鸭,然后还给我们看了一系列动物照片,但是没有告诉我们这些动物是什么名字。当我们在回家后看到了一只鸡的时候,我们就可以通过老师告诉我们的答案推测出这个新看到的动物就是鸡。但是假如我们遇到了一个新的动物既不是鸡也不是鸭,但我们可以从老师给我们看的一些动物照片中知道,这个新看到的动物其实和那些照片中的某些是一类的,但我们不知道他究竟是什么。这个过程就是一个半监督学习的过程了。 转载请注明出处: http://www.softlifelogging.com/2018/06/05/ai从零开始之有监督学习和无监督学习/ ‎ 更多精彩内容敬请关注公众号: 随手记生活

Read More »

AI从零开始之我们为什么为了那个虚无缥缈的f而奋斗

在前文我们介绍统计学简介的时候说,我们是为了那个虚无缥缈的f而奋斗的,我们知道做任何事情其实都是有一定目的的,比如说我们工作是为了赚钱,赚钱是为了买房,买房是为了娶老婆,娶老婆是为了生孩子,生孩子是为了传宗接代(开个玩笑)。那么我们来评估f是为了什么呢?其实,说白了业界认为其实就主要有两个目的:“预测”( prediction)和“推论”(inference) 预测 很多情况,像我们之前提到的房价预测。它就是通过一系列我们已经看到的X和Y的结果,来进行预测心得输入的结果。我们之前提到Y = f(X) + Ɛ, 而因为Ɛ的平均值是0,所以我们可以用下面公式来进行预测: 其中就是f的预测,而 则是我们想要的结果Y的预测值。一般来说,这种情况,我们不care 究竟是什么,我们要的是结果,所以 对我们来说就是一个黑盒。 我们通常认为的准确性由两部分来决定,一部分就是 的准确性,这部分我们称之为可减少(reducible)。他是由于这个的不准确性导致的,我们理论上可以通过技术的改进,不断地缩小这个误差,使得,从而  。那么这种情况下的 就是准确的吗,其实并不然,我们在之前的文章中提到,其实真实的Y值还和Ɛ相关,而Ɛ则是和X无关的一个误差,这个误差是没有办法规避的,我们称之为irreducible。 到了这个时候,我想你可能就要问了,这个Ɛ究竟是怎么来的啊,为什么我们不能避免啊,其实一般意义上来说,Ɛ可能是由一些我们没有测量的值引入的。比如说我们预测房价,我们有了和房价相关的各种因素,比如面积,学区,交通等等,但是我们没有去收集装修信息,那么这个装修信息就成了我们这个Ɛ的一个来源;除了这个,还有一种是没法收集的信息引入的误差,比如房子墙角的蜘蛛网,让来看房的人感觉不舒服,或者买房人的讨价还价的能力,这些都可能引起最终房价的波动。而这些就是一些我们没法通过技术来规避的误差。 推论 这种情况下的case,一般来说我们会关系Y和各个X之间的关系,而不是去预测一个新的输入会有什么样的输出。比如说我们提到到的工资和学历以及经验之间的例子,假如我们更关心的是不同的工资究竟受学历的影响情况如何,而不是说来预测一个新的学历的人能拿到多少工资。 在这种情况下, 就不能是一个黑盒了,我们需要通过 来分析各种X对 的影响程度。 一般来说,推论可以回答这些问题: 哪些用来预测的X是和Y相关联的,这个在有大量X而真正重要的X比较少的情况下尤其有效。 Y和各个X之间的关系。就是说我们修改每一个X对Y的最终是一个正向的影响还是一个负向的影响。这样我们就可以决定如何修改这些X了。 Y和各个X之间的关系可以用简单的线性关系来描述还是必须要用一个复杂的公式来描述。   这就是本文想要解释的我们为f而奋斗两个重要目的,预测和推论。 转载请注明出处: http://www.softlifelogging.com/2018/06/05/ai从零开始之我们为什么为了那个虚无缥缈的f而奋/ 更多精彩内容敬请关注公众号: 随手记生活

Read More »

AI从零开始之统计学简介

今天我们来看一下统计学主要是干些什么,在大家深入了解之前能够有一个感性的认识。 要想感性(呃,不是性感),那最好的方法肯定是举个例子来说明了。我们经常说上学无用论,所谓有用无用,粗俗点理解就是能不能赚钱,现在我们假设知道了一些学历(或者说学习年数)和收入的数据,他们如果画图的话就会显示成下面的图一所示: 图一收入和学历之间的关系图 现在我们假设收入就只和学历之间有关系,我们把收入写成Y,学历这里置为X,那么我们认为Y和X之间其实是有一个关系的,用公式表示如下: Y = f(X) + Ɛ 这里的f就是我们认为的一个固定的但是我们不知道是什么的关于X的函数,Ɛ是一个误差项,这个误差项和X是没有关系的,并且误差的平均值应该是0。 回到我们的例子上来,我们来看图二,中间的蓝色的线就是我们假设存在的f,每个点的垂直的线就是用来表示Ɛ的,我们可以看到Ɛ有时是正的,有时是负的,所以总的来说,它的平均值接近为0。 图二收入和学历之间的的f和Ɛ 通常来说,其实收入可能和多个输入有关,不仅仅是学历,比如和经验也有关系,如图三所示,我们可以看到一个收入和学历,经验之间的关系图。 图三收入和学历,经验之间的关系图 从这个来看,我们可以发现其实X并不是一个元素,而应该是一系列的输入:X = (X1,X2,…Xp),这里的每一个X就表示一个输入,比如X1是学历,X2是经历等等。 那统计学究竟是干什么的呢?统计学其实就是一系列方法,这些方法是用来估计f的。所以,通俗地讲,我们都是为了这个虚无缥缈的f来进行奋斗的,哈哈。 转载请注明出处: http://www.softlifelogging.com/2018/06/05/ai从零开始之统计学简介/ ‎ 更多精彩内容,敬请关注公众号:随手记生活

Read More »