《统计学习方法》-01统计学及方法概论

# 统计学习方法
## 01 统计学习方法概论
其实吧,我认为,很多看统计学习的人,大多一开始不会去打好所有的数学和计算机基础,因为本来也没有必要。所以呢……这个书里面出现的为了严谨而使用的各种数学术语就真的很鸡肋……我承认在描述一个抽象的概念的时候,为了严谨,使用数学语言来表表达是最好的,然而……增加了很多阅读的难度。
举个例子吧:
在书中讲到了经验风险最小化和结构风险最小化(P8),然后就讲到要在经验风险的后面加一个正则化项来防止过拟合。
下面这个式子也叫结构风险:
$$R_{srm}(f)=\frac{1}{N}\sum_{i=1}^n L(y_i , f(x_i))+\lambda J(f)$$
在这个式子里面呢…… 按他的说法,$\lambda J(f)$是一个正则项,然后$J(f)$是……是 __泛函__ ……
其实,$J(f)$是一个由我们系统学习到的模型的复杂度来决定的一个值,如果我们学习到的模型太过于复杂(比如过拟合的情况),那么这个值就会很大,那么整体的结构风险就会变大,这样就可以有效避免过拟合,因为我们的目标是使结构风险最小化。
那么泛函是森么鬼……简单点说泛函就是自变量为函数的函数,生僻一点来说,是一个由函数空间到实数集的映射,但是说白了,就是上面我说到的,根据函数模型的复杂程度,我们可以得到一个值,这个值随着不同的函数而变化。
的确严格意义上使用 __泛函__ 这个词会很准确,但是确实增加了阅读的负担,个人认为哪怕是在上手之后再去补一些数学知识,可能会高效得多,而这些术语的使用也增加了入门门槛。
好的,吐槽归吐槽,作为读书笔记,我想抛开一些奇怪的术语来简单谈一谈, __统计学习,我们到底在干什么__
### 模型、策略和算法
首先,我们需要做的是什么,统计学习中,我们需要做的是训练我们的系统,或者说我们的程序,这个程序很复杂,现阶段我们也不需要知道它具体是什么,但是我们的目的,就是在一次次的训练中,去提升它的性能。
这里有一点值得注意,那就是我们的系统的性能并不是死的,它是可以提升的,传统的算法中,比如我们写一个排序算法,写的是归并排序,那么时间复杂度就是$n\log{n}$不会变了,只要代码完成了,那么就是这样了,程序也不会出错,但是就这样了……
然而,我们在统计学习中编写的程序,完全不一样,可能一开始我们的沙雕程序根本得不到正确的答案,然而随着训练次数的增加,我们的沙雕就变成了正常人,效率也高了,正确率也高了。

那么,构造这个系统,本身有几个要素,第一个是模型。

__模型__ ,就是用来抽象具体现实情况的,比如我得到了一组值$(x,y)$,我把它们画在坐标纸上面,感觉……嗯,大体上这些点貌似趋于一条直线,那么,我就是在用线性模型去描述隐含在这些点之下的规律。
当然,选择模型只是第一步,比如说线性模型$y=kx+b$,这个模型里面有两个参数对吧,参数不同,直线也不同,那么哪一条直线能够最好地描述这些点分布的规律呢?这就是我们训练模型的目的。
所以,模型就是我们训练的对象,我们训练模型,实际上是使得模型的各参数取到一个最合适的值,从而达到我们使用该模型的目的——更好地描述现象。

__策略__ ,上面说到我们要去训练模型(找到适合的参数),那么,先不说怎么训练吧,我们首先需要一些考核标准对吧,我们要去评价我们的模型表现如何,如果挺好了,就不用再去训练了,如果还是很糟糕,就要继续改进,所以 __策略__ 就是一种评价方式,在这个评价方式下,我们可以去说怎么样的模型不好,怎么样的模型是好的,以及我们应该往哪个方向去努力。
我们会用损失函数来评价模型的好坏,对于一个输入$x$,我们的模型可以得到一个预测值$f(x)$,而这个理想值$y$可能不等于$f(x)$,我们的目的是让我们的$f(x)$尽可能地趋近$y$,而损失函数,或者说代价函数,就是来度量这两者的差值的。
损失函数有好多种:

* 0-1损失函数
$$L(y,f(x))=\begin{cases}
1,\ y\neq f(x)\\
0,\ y=f(x)
\end{cases}$$

* 平方损失函数
$$
L(y,f(x))=(y-f(x))^2
$$

* 绝对损失函数
$$
L(y,f(x))=|y-f(x)|
$$

* 对数损失函数
$$
L(y,P(y|x))=-logP(y|x)
$$
*我没太懂这个函数……*

损失函数可以度量模型每次预测的值和理想值的差距,然后,我们用对于一整个训练集的平均损失来度量模型的能力,毕竟一两次的成功和失败说明不了什么。我们把这个平均损失,叫做经验风险:
$$
R_{emp}(f)=\frac{1}{N} \sum_{i=1}^N L(y,f(x))
$$

只要我们能够将这个经验风险函数$R_{emp}$最小化,那么就可以得到最优的模型,达到我们的目的。至此,我们将一个虚无缥缈的预测问题,具体化为了函数求最小值的问题。
但是,由于每一个输入的数据都会有噪声,也就是不太理想的一些误差或者浮动,所以完全符合训练数据的模型,往往完全不能用,比如用了一个很扭曲的曲线拟合了一些点,这条曲线确实完美地穿过了所有的样本点,但是,很明显它不能反映一个整体趋势,也不能去做预测。
为了防止过拟合的现象,我们在经验风险后面增加一个项,这个项保证在即使是在经验风险很小的情况下,如果模型过于复杂,整体的风险仍然会很大。

这就是结构风险:
$$R_{srm}(f)=\frac{1}{N}\sum_{i=1}^n L(y_i , f(x_i))+\lambda J(f)$$

结构风险来源于奥卡姆剃刀原则,越简单的规律越好,通过由模型复杂度决定的$J(f)$乘上一个$\lambda$因子,去调节整个结构风险的大小,我们的任务就是使得结构风险最小化。

__算法__ ,就是具体实现上的问题了, 使用一种算法达到结构风险最小化的目标。
###泛化能力
就像即使我们做了很多套高考模拟卷,最后也要看高考考得怎么样而不是我们备考的时候模拟卷做得怎么样,上面提到的经验风险和结构风险,都是 在训练的时候得到的指标,只有在我们的模型真正开始去做预测的时候,我们才能在实战中来检验它的能力。
书中提到,我们根据不同的模型的泛化误差上界的高低来选择更好的模型。
在公式上,经验风险还是:
$$
R_{emp}(f)=\frac{1}{N} \sum_{i=1}^N L(y,f(x))
$$

只是这里的数据来源就是我们的测试数据集了,而不是训练数据。
泛化误差上界我没懂……靠
### 监督学习的一些简单例子
在这一章中,简单介绍了一下监督学习,监督学习分几种:
* 分类问题
* 标注问题
* 回归问题
大概以上就是第一章的主要内容。
重点是要搞清楚, __做统计学习,到底是在干什么__ 。
#读书笔记##笔记#
全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务