3.1.3 机器学习算法示例
本节以简单线性回归模型和决策树模型为例简单地介绍机器学习的算法。
1.简单线性回归模型
要使用一个变量预测另一个变量,最简单的办法是建立一个只包含两个变量的简单线性回归模型(一元线性回归)。虽然简单线性回归模型作为一个基础的算法存在很多问题和限制,但是学习和理解它有利于我们对更复杂的模型有更加深刻的认知,它不仅是多元线性回归模型的基础,更是广义线性模型、深度学习模型的基础,因此我们先以简单线性回归模型为例,讨论一些统计学习算法中的重要问题。
在很多时候,我们观察到两个变量x和y的一些取值,然后希望建立统计学习模型来通过x预测y的值。比如,x是农田的施肥量,y是产量;x是受教育程度,y是收入水平;x是消费金额,y是信用卡消费金额;x是社区内的警察数量,y是社区的犯罪率。要想建立y关于x的模型(用x预测y),我们需要回答三个最根本的问题:①x和y的函数关系是什么样的?②如果y还受到除了x之外的变量影响,那么如何在模型里表示?③在建立好模型后,x发生了一个单位的变化,y会发生多少变化?
在简单线性回归模型中,我们通过假设x与y成线性函数关系来回答问题①,即
式中,β0为截距;β1为斜率;u为误差项。在简单线性回归模型中,针对问题①,我们假设x与y呈线性关系。针对问题②,我们设立了误差项,所有未观测到的、未知的对y有影响的变量都被归入u中。针对问题③,如果固定u,那么x每变化一个单位,y将变化β1单位。
对于模型(3-1)来说,因为模型存在截距项,所以我们始终可以做出u的期望值为0的假设,即E(u)=0。为了回答问题③,我们采用的方式是固定u,事实上这在实际情况中并不现实,比如在对受教育程度和收入水平建模时,一个人本身的天赋水平是被归入u的,而显然,受教育程度与天赋水平也会有关系,所以我们很难固定u。那么如何定义x和u的关系,以便更好地回答问题③呢?
对于两个随机变量的关系,最常见的度量方式是利用相关系数,即
如果x与u不相关,那么它们的相关系数为0,即x与u不是线性相关的。但是,如果x和u不是线性相关的,而是非线性相关的呢?此时使用相关系数去假设x与u的关系则是不够的。因此,为了更好地回答问题③,我们假设u的均值不依赖于x,即u的条件期望值等于u的期望值
这个假设是说,在任何x取值水平下,u的均值都是不变的,且等于全局均值。这种u称为均值独立于x的u,这个假设结合E(u)=0,可以得到E(u|x)=0。因此,我们又把这个假设称为零条件均值假设。为什么说这个假设可以帮助我们更好地回答问题③呢?那是因为如果我们对模型(3-1)的等式两边同时取关于x的条件期望值,就可以得到
也就是说,在假设E(u)=0和假设E(u|x)=E(u)下,我们可以得到式(3-4),它表示:每个单位的x的变化,会导致y在当前x水平下的期望值发生β1的变化。这样的解释剥离了u的影响,也不用再满足固定u这种不切实际的要求。
有了对简单线性回归模型的了解,接下来最重要的问题就是如何求解模型,即如何从数据中得到对β0和β1的估计。
假设样本为{(xi,yi)|i=1,2,…,n},其中,n表示样本中一共有n个观测点。如果样本真的是从简单线性回归模型(3-1)中产生的,那么这些观测点必定满足
根据假设E(u)=0和E(u|x)=E(u),我们可以得到关于u的以下两个矩性质,即
此时,我们可以采用矩估计方法来做进一步推导,即
根据两个方程的两个未知数,简单推导可得β0和β1的估计式
从式(3-11)中可知,,即x不可以只有一个取值,如果只有一个取值,那么式(3-11)将失去意义,β0和β1将无法求解。这也是我们建立简单线性回归模型的一个隐含假设。
2.决策树模型
决策树是一种以树结构为基础,通过序贯判断来实现分类或回归的机器学习算法。决策树由三个部分组成:一个根节点、若干中间节点、若干叶子节点。如图3-3的例子所示,在使用身高、体重、睡眠时间预测学习成绩等级(A,B)的决策树中,我们首先会选择一个特征睡眠时间,将人分为两群。我们自然会期望这两群人的成绩等级具有明显差异,第一群人最好全是成绩为A的,第二群人全是成绩为B的,但这种情况非常罕见。在通常情况下,两群人中成绩等级为A的人数占比是有显著差异的,但只用睡眠时间并不能把人完全分开,我们还需要结合别的特征(身高、体重)。如图3-3所示,我们给出了一个决策树的决策过程作为示例。
图3-3 决策树的决策过程示意图
其中,第一层就是决策树的根节点,第二层是中间节点,第三层是叶子节点。可以看到,对于根节点和中间节点,存在两个需要解决的问题:①给定一个节点,该节点应该使用什么特征进行树的分裂?②给定一个节点和该节点使用的特征,分裂应该在什么值进行,即用什么值进行划分(cut off point)?对于叶子节点,我们需要解决的问题:③被分流到这个叶子节点的样本,是应该被预测为A还是应该被预测为B?
在决策树分裂的过程中,我们很自然地希望分裂之后在样本中A或者B的占比越大越好,即纯度越高越好,那么如何选择分裂用的特征和分裂的特征值呢?为了回答问题①和②,我们需要量化的定义,给定某个分裂(特征选择、截断值选择),分裂后比分裂前节点上样本的纯度提升了多少,即这次分裂带来了多大收益。那么,要定义分裂前后的收益,就需要定义分裂前的纯度和分裂后的纯度。我们通常使用基尼指数来度量某个数据集的纯度,即
式中,k为成绩等级的取值;pk表示在数据集D中任取一人成绩等级为k的概率;Gini(D)反映了从数据集D中随机抽取两个样本,其类别标记不一致的概率。因此,Gini(D)越小,数据集D的纯度越高。
有了基尼指数,我们就能判断分裂前后的数据集纯度。那么我们首先选择哪个属性(睡眠时间、身高、体重)来进行分裂呢?这个时候就需要对Gini(D)进行拓展,式(3-13)为属性x的基尼指数,即
式中,v为x的取值;V代表在数据集D中x有V个不同的取值。属性x的基尼指数越小,代表分裂后数据集的纯度越高。因此,选择分裂节点即在找哪个属性使分裂后基尼指数小。
有了对基尼指数的讨论,我们可以类似地解决问题②,感兴趣的读者可以自行补充,在此不做赘述。要想解决问题③,一个很简单的办法就是,我们可以将叶子节点中占比大的等级作为该叶子节点的分类结果。