统计学习导论(ISLR)(四):分类算法

统计学习导论(ISLR)

  • 个人主页:JoJo的数据分析历险记
  • 个人介绍:小编大四统计在读,目前保研到统计学top3高校继续攻读统计研究生
  • 如果文章对你有帮助,欢迎关注、点赞、收藏、订阅专栏

小编大四统计在读,目前保研到统计学top3高校继续攻读统计研究生。
参考资料:
The Elements of Statistical Learning
An Introduction to Statistical Learning
统计学习导论(ISLR)(二):统计学习概述
统计学习导论(ISLR)(三):线性回归
统计学习导论(ISLR)(四):分类
统计学习导论(ISLR)(五):重采样方法(交叉验证和boostrap)
ISLR统计学习导论之R语言应用(二):R语言基础
ISLR统计学习导论之R语言应用(三):线性回归R语言代码实战
ISLR统计学习导论之R语言应用(四):分类算法R语言代码实战
统计学习导论(ISLR) 第四章课后习题

文章目录

  • 统计学习导论(ISLR)
  • 4.分类
    • 4.1 分类概述
    • 4.2 为什么不能用线性回归
    • 4.3 logistic regression
      • 4.3.1 logistic 模型
      • ️4.3.2 估计回归系数
      • 4.3.3 预测
      • 4.3.4 多元logistic regression
      • 4.3.5 多项式逻辑回归
    • 4.4 分类生成模型
      • 4.4.1 线性判别分析(LDA):p=1
      • 4.4.2 线性判别分析:p>1
      • 4.4.3 二次判别分析
      • 4.4.4 朴素贝叶斯
    • 4.5 分类方法的比较
      • 4.5.1 理论比较
      • 4.5.2 实证比较
    • 4.6 广义线性模型
      • 4.6.1 线性回归
      • 4.6.2 泊松回归
      • 4.6.3 更具普遍性的广义线性模型
    • 4.7 总结


4.分类

在之前讨论的线性回归是针对响应变量Y是定量变量的情况,但是在实际情况中,有许多时候Y是定性的,即分类变量。本章主要讨论分类算法。例如,眼睛的颜色是定性的。预测分类一个样本的定性响应可以被称为对该观察的分类,因为它涉及将观察分配到一个类别或类别。另一方面,通常用于分类的方法首先预测观测值属于某个定性变量的每个类别的概率,作为进行分类的基础。从这个角度来看,它们的行为也类似于回归方法。

有许多关于分类的算法,我想在本文较广泛的介绍一下:logistic regression、linear discriminant analysis,quadratic discriminant analysis、naive Bayes 、KNN。logistic regression可以看做是一般线性模型的基础。后续还会讲到更多的分类方法,例如tree,random forest、boosting和svm;

4.1 分类概述

分类问题经常出现。例如:

  • 1.一个人到达急诊室时出现了一系列症状,这些症状可能是由三种疾病之一造成的。个人有三种情况中的哪一种?
  • 2.网上银行服务必须能够根据用户的IP地址、过去的交易历史等,确定网站上进行的交易是否具有欺诈性。
  • 3.根据一些患有或不患有特定疾病的患者的DNA序列数据,生物学家想找出哪些DNA突变有害(致病),哪些没有害

和回归一样,在分类中,我们定义数据集 ( x 1 , y 1 ) . . . ( x n , y n ) (x_1,y_1)...(x_n,y_n) (x1,y1)...(xn,yn)。其中, y n y_n yn是分类变量,我们通过训练集训练分类器,使得其在训练集和测试集上都表现的很好。在本章中,我们将使用模拟的默认数据集说明分类的概念。我们有兴趣根据年收入和每月信用卡余额预测个人是否会拖欠信用卡付款。数据集显示如图4.1所示

统计学习导论(ISLR)(四):分类算法_第1张图片
图4.1 信贷违约数据集。 左图是年收入和每月信用卡余额。其中拖欠信用卡付款的个人显示为橙色,未拖欠的个人显示为蓝色。中间:信用卡余额箱线图。右图:收入箱线图。

4.2 为什么不能用线性回归

我们已经提出,线性回归不适用于分类型变量。接下来我们探讨一下为什么在分类问题中不能使用线性回归。假设我们正试图根据患者的症状预测其在急诊室的医疗状况。在这个简单的例子中,有三种可能的诊断:中风、药物过量和癫痫发作。我们可以考虑将这些值编码为响应变量Y,如下
Y = { 1 if  stoke 2 if  drug overdose ; 3 if  drug epileptic seizure Y = \begin{cases}1\quad \text {if \textcolor{orange}{stoke}} \\ 2\quad \text{if \textcolor{orange}{drug overdose};}\\ 3 \quad\text{if \textcolor{orange}{drug epileptic seizure}} \end{cases} Y=1if stoke2if drug overdose;3if drug epileptic seizure

使用这种编码,最小二乘法可以用来拟合线性回归模型。但是,这种编码意味着结果排序,将药物过量放在中风和癫痫发作之间,并坚持认为中风和药物过量之间的差异与药物过量和癫痫发作之间的差异相同。在实践中,这样做并没有意义。例如,你可以选择一个同样合理的编码:
Y = { 1 if  epileptic seizure 2 if  stroke ; 3 if  drug overdose Y = \begin{cases}1\quad \text {if \textcolor{orange}{epileptic seizure}} \\ 2\quad \text{if \textcolor{orange}{stroke};}\\ 3 \quad\text{if \textcolor{orange}{drug overdose}} \end{cases} Y=1if epileptic seizure2if stroke;3if drug overdose
这意味着响应变量的关系与上述完全不同。如果响应变量的值具有自然顺序,如轻度、中度和重度,我们认为轻度和中度之间的差距与中度和重度之间的差距相似,那么1、2、3编码是合理的。但是一般来说,没有一个很好的方法可以将两个以上水平的定性反应变量转化为可以进行线性回归的定量反应。对于二元定性变量,存在一些合理的地方。例如,对于患者的病情,可能只有两种可能性:中风和药物过量。那么我们可以将Y如下定义:
Y = { 0 if  stroke 1 if  drug overdose ; Y = \begin{cases}0\quad \text {if \textcolor{orange}{stroke}} \\ 1\quad \text{if \textcolor{orange}{drug overdose};} \end{cases} Y={0if stroke1if drug overdose;
然后,我们可以对这种二元反应进行线性回归,如果 Y ^ > 0.5 \hat{Y}>0. 5 Y^>0.5,则预测药物过量,反之是中风。在二分类的情况下,即使我们翻转上述编码,也不难证明线性回归将产生相同的最终预测。对于上述0/1编码的二元响应变量,用最小二乘法进行回归并非完全不合理:可以证明,在这种特殊情况下,使用线性回归得到的 X β ^ X\hatβ Xβ^实际上是对Pr(drug overdose| X)的估计。然而,如果我们使用线性回归,我们的一些估计值可能超出[0,1]区间,如图4.2所示,这使得它们很难解释为概率!然而,这些预测提供了一个粗略的估计。

因此不使用回归方法进行分类至少有两个原因:

  • 1.回归方法不能容纳两个以上类别的定性反应;
  • 2.即使只有两类,回归方法也无法提供有意义的Pr(Y | X)估计。因此,最好使用适合定性响应值的分类方法。
    统计学习导论(ISLR)(四):分类算法_第2张图片
    图4.2 使用违约数据集进行分类。 左图:使用线性回归预测违约概率,有一些概率的估计值是负的。右图:使用logistic regression,所有值都在[0,1]之间

4.3 logistic regression

4.3.1 logistic 模型

logistic regression 是从线性回归推导过来的。
再次考虑违约数据集,其中响应变量是属于Yes or No的两个类别之一。逻辑回归并没有直接对这种反应进行建模,而是将可能性建模为一个特定的类别。对于违约数据,逻辑回归对违约概率进行建模。例如,违约概率可以写为
p r ( d e f u a l t = Y e s ∣ b a l a n c e ) pr(defualt = Yes|balance) pr(defualt=Yesbalance)
Pr(default=Yes | balance)的值(我们缩写为p(balance)将在0到1之间。然后,对于任何给定的信用卡余额,都可以对违约概率进行预测。例如,对于p(balance)>0.5的任何个人,可以预测default=yes。或者,如果一家公司希望保守地预测有违约风险的个人,那么他们可以选择使用较低的阈值,例如设置p(balance)>0.1,则预测default=yes。

在4.2中,我们考虑使用线性回归预测违约概率
p ( x ) = β 0 + β 1 X . p(x) = \beta_0+\beta_1X. p(x)=β0+β1X.
如果我们使用线性回归预测是否违约,我们会得到图4.2的左图结果,会出现一些负值或者大于1的值,这些预测是不合理的。为了避免这个问题,我们需要使用一个函数,作用于p(x),使其返回值位于[0,1]。有许多函数可以实现,这里我们使用logistic function:
s ( X ) = e β 0 + β 1 X 1 + e β 0 + β 1 X s(X) = \frac{e^{\beta_0+\beta_1X}}{1+e^{\beta_0 + \beta_1 X}} s(X)=1+eβ0+β1Xeβ0+β1X
通过最大似然估计的方法拟合模型,得到图4.2的右图结果,可以发现所有的值都位于[0,1],说明拟合结果较为合理。

机会比率odds
在logistic regression中,可以计算机会比率(odds)
p ( X ) 1 − p ( X ) \frac {p(X)}{1-p(X)} 1p(X)p(X)
机会比指的是所研究的事件(或属性)“发生”的概率与“没有发生”的概率之比。机会比率在市场调查民意测验等社会学以及流行病学方面有着广泛的应用。在一些体育彩票和赛马中,利用了机会比来代替概率。例如,一个事件发生的概率是0.9,那么 o d d s = 0.9 1 − 0.9 = 9 odds=\frac{0.9}{1-0.9}=9 odds=10.90.9=9

取对数: l n ( p i 1 − p i ) ln(\frac{p_i}{1-p_i}) ln(1pipi)得到 对数单位,对数单位是线性的
l n ( p i 1 − p i ) = β 0 + β 1 X ln(\frac{p_i}{1-p_i})=\beta_0 + \beta_1X ln(1pipi)=β0+β1X
与线性回归对比,当X增加一个单位时, 对数单位 也增加一个单位,相应的, 机会比率 增加 e β 1 e^{\beta_1} eβ1

️4.3.2 估计回归系数

在线性回归中,我们使用最小二乘法来估计回归系数,但是在估计logistic regression中,最好使用最大似然估计。因为它具有更好的统计特性。使用最大似然估计拟合逻辑回归模型背后的基本直觉如下:我们寻求β0和β1的估计值,使得将这些参数的估计值给出的P(X)中,对于所有违约的个人,产生一个接近于1的数字,对于所有未违约的个人,产生一个接近于零的数字。这就是最大似然估计的一个直觉观点。从数理角度来看,要找到一个使得事件发生概率最大的参数。因此,我们引入似然函数:
L ( β 0 , β 1 ) = ∏ i = 1 n p ( x i ) L(\beta_0, \beta_1) = \prod_{i=1}^{n}p(x_i) L(β0,β1)=i=1np(xi)
我们要估计参数 β 0 ^ β 1 ^ \hat{\beta_0} \hat{\beta_1} β0^β1^,使得上面似然函数值取最大值。最大似然法是一种非常通用的方法,在线性回归设置中,最小二乘法实际上是一种特例,但是最大似然函数要求知道具体的分布。

表4.1 对于违约数据集,logistic regression的回归结果
在这里插入图片描述

表4.1是系数估计值,模型结果:
P r ( Y = Y e s ∣ b a l a n c e ) = e − 10.6513 + 0.0055 b a l a n c e 1 + e − 10.6513 + 0.0055 b a l a n c e Pr(Y=Yes|balance)=\frac{e^{-10.6513+0.0055balance}}{1+e^{-10.6513+0.0055balance}} Pr(Y=Yesbalance)=1+e10.6513+0.0055balancee10.6513+0.0055balance
其中,balance表示信用卡余额,通过信用卡余额预测违约的概率,可以看出,当balance增加一个单位,对数单位增加0.0055

4.3.3 预测

一旦系数被估计出来,我们就可以计算出任何给定信用卡余额的违约概率。例如,使用表4.1中给出的系数估计,我们预测一个信用卡余额为1000美元的个人的违约概率为

p ^ ( X ) = e − 10.6513 + 0.0055 × 1000 1 + e − 10.6513 + 0.0055 × 1000 = 0.00576 \hat{p}(X) = \frac{e^{-10.6513+0.0055\times1000}}{1+e^{-10.6513+0.0055\times1000} }=0.00576 p^(X)=1+e10.6513+0.0055×1000e10.6513+0.0055×1000=0.00576

可以看出当前条件下 违约概率不到1%,说明此时违约很小。当信用卡余额为2000美元时,违约概率超过了50%

对于违约数据,使用logistic回归模型的估计系数,该模型使用学生身份预测违约概率。Studentstatus被编码为一个伪变量,学生的值为1,非学生的值为0,由表中的variablestudent[Yes]表示
可以使用第三章中的虚拟变量方法,将定性预测值与逻辑回归模型结合使用。例如,违约数据集包含定性变量Student。为了适应使用学生状态作为预测变量的模型,我们只需创建一个dummy variable,该变量的值为1(学生)和0(非学生)。表4.2显示了根据学生状态预测违约概率的逻辑回归模型。与虚拟变量相关的系数为正,相关的P值具有统计学意义。这表明学生往往比非学生有更高的违约概率。

表4.2 学生状态与违约状态回归结果

在这里插入图片描述

4.3.4 多元logistic regression

现在我们考虑使用多预测变量预测二分类响应变量的问题。通过类比第三章中从简单线性回归到多重线性回归的扩展,我们可以将模型转换如下:

p ( X ) = e β 0 + β 1 X 1 + . . . + β p X p 1 + e β 0 + β 1 X 1 + . . . + β p X p p(X) = \frac{e^{\beta_0+\beta_1X_1+...+\beta_pX_p}}{1+e^{\beta_0+\beta_1X_1+...+\beta_pX_p}} p(X)=1+eβ0+β1X1+...+βpXpeβ0+β1X1+...+βpXp

对数单位可以转换为:

l o g ( p ( X ) 1 − p ( X ) ) = β 0 + β 1 X 1 + . . . + β p X p log(\frac{p(X)}{1-p(X)})=\beta_0+\beta_1X_1+...+\beta_pX_p log(1p(X)p(X))=β0+β1X1+...+βpXp

接下来继续考虑违约数据集,有balance,income(千美元),student三个变量,引入到模型当中,适用最大似然估计,得到参数估计值如下表4.3。

表4.3 多元logistic regression参数估计结果

统计学习导论(ISLR)(四):分类算法_第3张图片

从表4.3可以看出,balance和student的虚拟变量通过了显著性检验,说明这两个变量对是否违约具有显著性影响。然而,虚拟变量的系数为负值,表明学生比非学生更不可能违约。相比之下,虚拟变量的系数在表4.2中为正。这是因为学生身份和信用卡余额之间是相关的,往往学生信用卡余额较大,进而导致较高的违约率,但是对于一个拥有特定信用卡余额的学生而言,违约概率低于拥有相同信用卡余额的非学生。但总体而言,学生的信用卡余额往往更高,这也导致了学生的总体违约率高于非学生。下图4.3可以看出具体关系。

统计学习导论(ISLR)(四):分类算法_第4张图片
图4.3. 违约数据集。左图:显示学生(橙色)和非学生(蓝色)的违约比率。实线显示作为信用卡函数的违约速率,而水平虚线显示总体违约率。右图:显示了学生(橙色)和非学生(蓝色)的违约数箱线图
从左图可以看出,对于给定一个信用卡余额,所有的学生违约率低于非学生,从右图可以看出,学生总体违约率高于非学生。
这个简单的例子说明了当其他预测因素相关时,只涉及一个预测因素的回归所带来的问题。在线性回归设置中,使用一个预测值获得的结果可能与使用多个预测值获得的结果截然不同,尤其是当预测值之间存在相关性时。
当信用卡余额为1500美元、收入为40000美元的学生,其违约概率估计为
p ^ ( X ) = e − 10.869 + 0.00574 × 1500 + 0.003 × 40 − 0.6468 × 1 1 + e − 10.869 + 0.00574 × 1500 + 0.003 × 40 − 0.6468 × 1 = 0.058. \hat{p}(X) = \frac{e^{-10.869+0.00574\times1500+0.003\times40-0.6468\times1}}{1+e^{-10.869+0.00574\times1500+0.003\times40-0.6468\times1} }=0.058. p^(X)=1+e10.869+0.00574×1500+0.003×400.6468×1e10.869+0.00574×1500+0.003×400.6468×1=0.058.
非学生违约概率估计值如下:
p ^ ( X ) = e − 10.869 + 0.00574 × 1500 + 0.003 × 40 − 0.6468 × 0 1 + e − 10.869 + 0.00574 × 1500 + 0.003 × 40 − 0.6468 × 0 = 0.105. \hat{p}(X) = \frac{e^{-10.869+0.00574\times1500+0.003\times40-0.6468\times0}}{1+e^{-10.869+0.00574\times1500+0.003\times40-0.6468\times0} }=0.105. p^(X)=1+e10.869+0.00574×1500+0.003×400.6468×0e10.869+0.00574×1500+0.003×400.6468×0=0.105.

4.3.5 多项式逻辑回归

我们有时希望对一个有两个以上类的响应变量进行分类。例如,在第4.2节中,我们在急诊室有三类状况:中风、药物过量、癫痫发作。然而,我们在本节中看到的逻辑回归方法只允许K=2类响应变量。事实证明,将两类逻辑回归方法推广到K>2类的情况是可能的。这种扩展有时被称为多项式逻辑回归。简单来说就是将二元逻辑回归的y值进行扩展,其他保持一致。
为此,我们首先选择一个多项式回归类作为基准。
P r ( Y = k ∣ X = x ) = e β k 0 + β k 1 x 1 + . . . + β k p x p 1 + ∑ l = 1 K − 1 e β l 0 + β l 1 x 1 + . . . + β l p x p ( k = 1 , . . . , K − 1 ) Pr(Y=k|X=x) = \frac{e^{\beta_{k0}+\beta_{k1}x_1+...+\beta_{kp}x_p}}{1+\sum_{l=1}^{K-1}e^{\beta_{l0}+\beta_{l1}x_1+...+\beta_{lp}x_p}}(k=1,...,K-1) Pr(Y=kX=x)=1+l=1K1eβl0+βl1x1+...+βlpxpeβk0+βk1x1+...+βkpxp(k=1,...,K1)
对于Y=K,我们定义如下:
P r ( Y = K ∣ X = x ) = 1 1 + ∑ l = 1 K − 1 e β l 0 + β l 1 x 1 + . . . + β l p x p Pr(Y=K|X=x) = \frac{1}{1+\sum_{l=1}^{K-1}e^{\beta_{l0}+\beta_{l1}x_1+...+\beta_{lp}x_p}} Pr(Y=KX=x)=1+l=1K1eβl0+βl1x1+...+βlpxp1
因此,可以证明对于 k = 1 , . . . , K − 1 k=1,...,K-1 k=1,...,K1,
l o g ( P r ( Y = k ∣ X = x ) P r ( Y = K ∣ X = x ) ) = β k 0 + β k 1 x 1 + . . . + β k p x p log(\frac{Pr(Y=k|X=x) }{Pr(Y=K|X=x) })=\beta_{k0}+\beta_{k1}x_1+...+\beta_{kp}x_p log(Pr(Y=KX=x)Pr(Y=kX=x))=βk0+βk1x1+...+βkpxp
估计方法和之前一样,使用多项式逻辑回归。

现在,我们简要介绍多项式逻辑回归的另一种编码,即SoftMax Codeing。softmax编码等同于刚才描述的编码。在softmax编码中,与选择基础类相比,我们对称地处理所有K类,并假设
P r ( Y = k ∣ X = x ) = e β k 0 + β k 1 x 1 + . . . + β k p x p ∑ l = 1 K e β l 0 + β l 1 x 1 + . . . + β l p x p Pr(Y=k|X=x) = \frac{e^{\beta_{k0}+\beta_{k1}x_1+...+\beta_{kp}x_p}}{\sum_{l=1}^{K}e^{\beta_{l0}+\beta_{l1}x_1+...+\beta_{lp}x_p}} Pr(Y=kX=x)=l=1Keβl0+βl1x1+...+βlpxpeβk0+βk1x1+...+βkpxp
此时,我们估计所有类的系数。此时的机会比率等于:
l o g ( P r ( Y = k ∣ X = x ) P r ( Y = k ′ ∣ X = x ) ) = ( β k 0 − β k ′ 0 ) + ( β k 1 − β k ′ 1 ) x 1 ( ) + . . . + ( β k p − β k ′ p ) x p . log(\frac{Pr(Y=k|X=x) }{Pr(Y=k'|X=x) })=(\beta_{k0}-\beta_{k'0})+(\beta_{k1}-\beta_{k'1})x_1()+...+(\beta_{kp}-\beta_{k'p})x_p. log(Pr(Y=kX=x)Pr(Y=kX=x))=(βk0βk0)+(βk1βk1)x1()+...+(βkpβkp)xp.

4.4 分类生成模型

逻辑回归是通过逻辑函数来建模的,使得 P r ( Y = k ∣ X = x Pr(Y=k|X=x Pr(Y=kX=x,即Y对x的一个条件分布。现在我们考虑一种替代或者说限制条件更少的方法。对于响应变量的每一个取值,他们对X的条件分布是不同的。我们使用贝叶斯理论来计算这些概率。当每一类的分布都是正态分布时,那么该模型和逻辑回归相似。

为什么我们要提出这种新模型?

  • 当这两个类别之间存在实质性的分离时,逻辑回归模型的参数估计就出人意料地不稳定。我们在本节中所考虑的方法不受这个问题的影响。
  • 如果预测值在每个类别中的分布近似正态,且样本量较小,则本节中的方法可能比逻辑回归更准确
  • 本节中的方法可以自然地扩展到两个以上响应类的情况。

为了更好的理解,我们先来回忆一下贝叶斯公式,假设A有两类,则 A 1 A_1 A1在B的条件下发生的概率表示为:

P ( A 1 ∣ B ) = P ( A 1 ) P ( B ∣ A 1 ) P ( A 1 ) P ( B ∣ A 1 ) + P ( A 2 ) P ( B ∣ A 2 ) P(A_1|B)=\frac{P(A_1)P(B|A_1)}{P(A_1)P(B|A_1)+P(A_2)P(B|A_2)} P(A1B)=P(A1)P(BA1)+P(A2)P(BA2)P(A1)P(BA1)
其中 P ( A 1 ) P(A_1) P(A1)代表先验概率

假设我们希望将Y有k类。令 π k \pi_k πk代表第k类的先验概率, f k ( X ) = P r ( X ∣ Y = k ) f_k(X)=Pr(X|Y=k) fk(X)=Pr(XY=k)表示在Y为第K类时,X的概率密度函数,也就是说当X=x时,有很大的可能是第k类,那么 f k ( x ) f_k(x) fk(x)很大。根据贝叶斯理论,得到下述关系:
P r ( Y = k ∣ X = x ) = π k f k ( x ) ∑ l = 1 K π l f l ( x ) . Pr(Y=k|X=x) = \frac{\pi_kf_k(x)}{\sum_{l=1}^{K}\pi_lf_l(x)}. Pr(Y=kX=x)=l=1Kπlfl(x)πkfk(x).
这是我们说的后验概率,也就是X=x时候,属于第k类的概率。也就是说,给定观测值的预测变量,观测值属于第k类的概率。
其中先验概率 π k \pi_k πk很好得到,我们可以用样本频率来近似先验概率,然而预测 f k ( x ) f_k(x) fk(x)往往是很难的。我们之前在第二章简要的介绍了贝叶斯分类器,在所有分类器中,将一个观测x分类为Pk(x)最大的类别的分类器的错误率最低。因此,如果我们能找到一种方法来估计 f k ( x ) f_k(x) fk(x),那么我们可以计算 p k ( x ) p_k(x) pk(x),从而使用贝叶斯分类器。接下来,我们讨论使用三种不同的 f k ( x ) f_k(x) fk(x)分类器:线性判别分析(LDA)、二次判别分析和朴素贝叶斯

4.4.1 线性判别分析(LDA):p=1

线性判别分析可以用于降纬和分类,本章主要介绍其在分类上的应用。现在,我们假设p=1,我们只有一个预测变量。我们首先得到 f k ( x ) f_k(x) fk(x)的估计值,从而计算 p k ( x ) p_k(x) pk(x),进一步我们将其分类到使得 p k ( x ) p_k(x) pk(x)最大的那一类。为了估计 f k ( x ) f_k(x) fk(x),我们首先在形式上做一些假设。
首先假设 f k ( x ) f_k(x) fk(x)服从高斯分布:
f k ( x ) = 1 2 π σ k e x p ( − ( x − μ k ) 2 2 σ k 2 ) f_k(x) = \frac{1}{\sqrt{2\pi}\sigma_k}exp(-\frac{(x-\mu_k)^2}{2\sigma_k^2}) fk(x)=2π σk1exp(2σk2(xμk)2)

其中 σ k 2 \sigma_k^2 σk2第k类参数的方差,我们假设不同类的方差相等,即 σ 1 2 = . . . = σ k 2 \sigma_1^2=...=\sigma_k^2 σ12=...=σk2,我们将 f k ( x ) f_k(x) fk(x)代入,得到
p k ( x ) = π k 1 2 π σ e x p ( − ( x − μ k ) 2 2 σ 2 ∑ l = 1 K π l 1 2 π σ e x p ( − ( x − μ k ) 2 2 σ 2 p_k(x)=\frac{\pi_k \frac{1}{\sqrt{2\pi}\sigma}exp(-\frac{(x-\mu_k)^2}{2\sigma^2}}{\sum_{l=1}^{K}\pi_l \frac{1}{\sqrt{2\pi}\sigma}exp(-\frac{(x-\mu_k)^2}{2\sigma^2}} pk(x)=l=1Kπl2π σ1exp(2σ2(xμk)2πk2π σ1exp(2σ2(xμk)2
其中 π k \pi_k πk可以根据样本得到。贝叶斯分类器就是找到让 p k ( x ) p_k(x) pk(x)最大的那一类作为分类结果。
取对数后不难发现等价于找到使得下述最大的那一类
δ k ( x ) = x u k σ 2 − u k 2 2 σ 2 + l o g ( π k ) . \delta_k(x)=x\frac{u_k}{\sigma^2}-\frac{u_k^2}{2\sigma^2}+log(\pi_k). δk(x)=xσ2uk2σ2uk2+log(πk).
当K=2时,并且 π 1 = π 2 \pi_1 = \pi_2 π1=π2,有:
y = { 1 2 x ( μ 1 − μ 2 ) > μ 1 2 − μ 2 2 2 o t h e r w i s e y = \begin{cases}1\quad2x(\mu_1-\mu_2)>\mu_1^2-\mu_2^2 \\2\quad otherwise \end{cases} y={12x(μ1μ2)>μ12μ222otherwise
因此,贝叶斯决策边界是当 δ 1 ( x ) = δ 2 ( x ) \delta_1(x)=\delta_2(x) δ1(x)=δ2(x)时,即:
x = μ 1 2 − μ 2 2 2 ( μ 1 − μ 2 ) = μ 1 + μ 2 2 x = \frac{\mu_1^2-\mu_2^2}{2(\mu_1-\mu_2)}=\frac{\mu_1+\mu_2}{2} x=2(μ1μ2)μ12μ22=2μ1+μ2
我们模拟一个结果如图4.5,显示的两个正态密度函数 f 1 ( x ) 和 f 2 ( x ) f_1(x)和f_2(x) f1(x)f2(x)代表两个不同的类别。两个密度函数的均值和方差参数为 μ 1 = − 1.25 , μ 2 = 1.25 , σ 1 2 = σ 2 2 = 1 μ_1=−1.25,μ_2=1.25,σ_1^2=σ_2^2=1 μ1=1.25μ2=1.25σ12=σ22=1。这两个密度重叠,因此对于一个给定的X=x,观测所属的类别存在一些不确定性。如果我们假设一个观测值同样可能来自任一类,即 π 1 = π 2 = 0.5 π_1=π_2=0.5 π1=π2=0.5,我们可以看到贝叶斯分类器将观测值分配给类1 i f x < 0 ifx<0 ifx<0,否则分配给类2。
统计学习导论(ISLR)(四):分类算法_第5张图片
图4.4 左图:显示了两个一维正态密度函数。垂直虚线表示Bayes决策边界。右图:从这两个类别中各抽取20个观测值,并以直方图显示。Bayes决策边界再次显示为一条垂直虚线。实线垂直线表示根据训练数据估计的LDA决策边界。

注意: 这里我们假设X从某一已知的高斯分布提取的,因此可以计算出贝叶斯边界,在实际中,我们得不到贝叶斯边界,而只能LDA边界,可以看做是贝叶斯边界的一个估计。

在实际中,即便我们确定我们的假设,即X是从每个类的高斯分布中提取的,但我们仍然需要估计 μ k , π k , σ 2 \mu_k,\pi_k,\sigma^2 μk,πk,σ2,估计如下:
μ ^ k = 1 n k ∑ i : y i = k x i σ ^ 2 = 1 n − K ∑ k = 1 K ∑ i : y i = k ( x i − μ ^ k ) 2 π ^ k = n k / n \hat{\mu}_k = \frac{1}{n_k}\sum_{i:y_i=k}x_i\\ \hat{\sigma}^2 = \frac{1}{n-K}\sum_{k=1}^{K}\sum_{i:y_i=k}(x_i-\hat{\mu}_k)^2 \\\hat{\pi}_k=n_k/n μ^k=nk1i:yi=kxiσ^2=nK1k=1Ki:yi=k(xiμ^k)2π^k=nk/n
因此LDA分类器对于给定的X=x,将其分类到使得下列值最大的那一类:
δ ^ k ( x ) = x μ ^ k σ ^ 2 − μ ^ k 2 2 σ ^ 2 + l o g ( π ^ k ) . \hat{\delta}_k(x)=x\frac{\hat{\mu}_k}{\hat{\sigma}^2}-\frac{\hat{\mu}_k^2}{2\hat{\sigma}^2}+log(\hat{\pi}_k). δ^k(x)=xσ^2μ^k2σ^2μ^k2+log(π^k).
从上述形式可以看出 δ k ( x ) \delta_k(x) δk(x)是x的线性函数,我想这就是线性判别分析命名的来源吧。
LDA分类器假设每个类别的观测值具有共同方差的高斯分布,并将这些估计值插入到贝叶斯分类器中。

4.4.2 线性判别分析:p>1

现在,我们将LDA分类器扩展到多个预测变量的情况。为此,我们假设x=(X1,X2,…,Xp)是从多元高斯分布中提取的,带有一个特定于类的多变量高斯平均向量和一个公共协方差矩阵。图4.5显示了P=2的多变量高斯分布的两个示例。任何特定点的表面高度表示 ( x 1 , x 2 ) (x_1,x_2) (x1,x2)落在该点周围一个小区域内的概率。在任一面板中,如果沿 X 1 X_1 X1轴或 X 2 X_2 X2轴切割表面,则生成的横截面将具有一维正态分布的形状。图4.5的左图中 V a r ( X 1 ) = V a r ( X 2 ) Var(X_1)=Var(X_2) VarX1=VarX2 C o r ( X 1 , X 2 ) = 0 Cor(X_1,X_2)=0 CorX1X2=0;该表面具有典型的钟形。然而,如图4.5右图所示,如果预测变量相关或方差不相等,钟形将被扭曲。在这种情况下,钟的底部将是椭圆形,而不是圆形,

统计学习导论(ISLR)(四):分类算法_第6张图片
图4.5. 图中显示了两个多元高斯密度函数,P=2.左图:这两个预测因子不相关。右图:这两个变量的相关性为0.7.

类比4.4.1中,p=1的情况,可以得到,我们要找到使得下式最大的那一类
δ k ( x ) = x T Σ − 1 μ k − 1 2 μ k T Σ − 1 μ k + l o g π k \delta_k(x) = x^T\Sigma^{-1}\mu_k-\frac{1}{2}\mu_k^T\Sigma{-1}\mu_k+log\pi_k δk(x)=xTΣ1μk21μkTΣ1μk+logπk
上式可以看做是p=1的情况下的向量形式。图4.6的左侧显示了一个示例。三个大小相等的高斯类显示了特定于类的平均向量和一个公共协方差矩阵。这三个椭圆代表的区域分别占这三个类别概率的95%。虚线是Bayes决策的边界。换句话说,它们代表一组值,其中 δ k ( x ) = δ l ( x ) \delta_k(x)=\delta_l(x) δk(x)=δl(x)
统计学习导论(ISLR)(四):分类算法_第7张图片
图4.6. 一个包含三个类的示例。每个类别的观测值均来自P=2的多元高斯分布,带有一个类别特定的平均向量和一个公共协方差矩阵。左图:图中显示了三个类别中每个类别95%概率的椭圆。虚线是Bayes决策的边界。右图:每个类别产生20个观察结果,相应的LDA决策边界用黑色实线表示。Bayes决策边界再次显示为虚线

和简单的LDA一样,我们需要估计 π k , Σ , μ k \pi_k,\Sigma,\mu_k πk,Σ,μk,据此来找到使得 δ k ( x ) \delta_k(x) δk(x)最大的那一类。从图4.6的右侧计算贝叶斯分类器和LDA分类器的测试错误率分别为0.0746和0.0770。这表明LDA在这些数据上表现良好。
下面使用LDA我们对违约数据集进行测试,根据信用卡余额和学生身份,来预测是否违约,得到混淆矩阵如下表4.4。

表4.4 违约数据集混淆矩阵(LDA)

统计学习导论(ISLR)(四):分类算法_第8张图片
矩阵对角线上的元素表示默认状态被正确预测的个体,而非对角线元素表示被错误分类的个体。LDA对23名没有违约的人和252名确实违约的人做出了错误的预测。
LDA模型训练10000个训练样本,结果错误率为2.75%。看起来错误率很低,但必须注意两点:

  • 1.训练误差往往比测试误差小,我们更关心的是测试误差
  • 2.我们可以看出只有3.33%的人违约,这是一个极不平衡的数据,因此,即便我们预测所有的样本都不违约,也只有3.33%的错误率,因此,使用错误率来衡量模型的好坏是不可取的,我们可以使用F1-score,ROC等其他指标。

实际上,像这样的二元分类器可能会产生两种类型的错误:它可能会错误地将违约的个体预测为不违约(弃真错误),或者它可能会错误地将不违约的个体预测为违约的个体(取伪错误)。确定这两种错误中的哪一种是很有意义的。例如在预测是否患癌症时,我们要非常重视得了癌症却被错判为未患癌症的病人,我们可以针对不同的错误给不同的权重来处理这种问题。
一个小细节:我们可以发现学生身份变量不服从高斯分布,还记得我们之前对LDA的假设,这说明不符合LDA的假设,但是LDA是一种鲁棒性较强的模型。后续我们还会介绍不要求预测变量是正态分布的方法。
我们继续来看表4.4,对于违约类,LDA错误地将252个违约的样本预测为不违约,错误率达到 252 / 333 = 75.7 % 252/333=75.7\% 252/333=75.7%,这是我们不能接受的。

为什么LDA在对违约的客户进行分类方面做得这么差?因为LDA产生尽可能少的错误分类总数,但是不考虑是哪一类错误。相比来说,信用卡公司更注重将违约错判为不违约的这一部分错误。也就是我们更关心违约个人的违约状态
因此我们可以考虑降低阈值,例如将违约概率超过20%的客户列为违约客户
P r ( d e f a u l t = Y e s ∣ X = x ) > 0.2 Pr(default = Yes|X=x)>0.2 Pr(default=YesX=x)>0.2

采用这种方法得到混淆矩阵如下表4.5所示。

表4.5 阈值设为0.2下,LDA得到的混淆矩阵

统计学习导论(ISLR)(四):分类算法_第9张图片
现在,LDA预测将有430人违约。在333名违约者中,LDA错误预测了138人,即41.4%。与使用50%的阈值所导致的75.7%的错误率相比,这是一个巨大的改进。然而,这种改进是有代价的:现在有235未违约的错判为违约的个体。总体错误率轻微上升到3.73%。这种总误差率的轻微上升只是为了更准确地识别那些确实违约的个人。图4.7显示了修改后验违约概率的阈值所产生的权衡。不同的错误率表现为阈值的函数。
统计学习导论(ISLR)(四):分类算法_第10张图片

图4.7 不同阈值下LDA分类的错误率

其中,蓝色虚线代表违约个体的错误率,黑色曲线代表总体错误率。可以看出,随着阈值的降低,违约个体之间的错误率稳步降低,但未违约个体之间的错误率增加。我们如何决定哪个阈值是最好的?有点类似于我们第二章讲的variance和bias之间权衡问题。
下面给出两个常用与分类问题的评估指标:ROC曲线和F1-score
ROC曲线
ROC曲线,ROC曲线可以展示不同阈值下两种类型错误。
统计学习导论(ISLR)(四):分类算法_第11张图片

图4.8 LDA在违约数据集上得到的ROC曲线

其中,横轴表示FPR,纵轴表示TPR
首先定义以下几个概念:

TP(True Positive):正确地预测阳性样本
FP(False Positive):错误地预测为阳性样本本
TN(True Negative):正确的预测阴性样本
FN(False Negative):错误地预测为阴性样本
TPR:表示实际为阳性的样本中,正确判断为阳性的比率
FPR:表示实际为阴性的样本中,被错误的判断为阳性的比例。

T P R = T P T P + F N F P R = F P T N + F P TPR = \frac{TP}{TP+FN}\\ FPR = \frac{FP}{TN+FP} TPR=TP+FNTPFPR=TN+FPFP
ROC曲线下区域的面积为AUC,AUC越大,说明模型拟合效果越好。

F1-Score
F1-scoe作为分类问题的评估指标,结合了精确率和召回率两个指标,常常用于许多机器学习竞赛中。F1越大说明拟合效果越好。F1计算公式如下:
F 1 = 2 1 P + 1 R F_1 = \frac{2}{\frac{1}{P}+\frac{1}{R}} F1=P1+R12
其中:
P(precision)表示查准率精准率:表示为正确判别为正例样本中占总预测正例样本的比例。
p r e c i s i o n = T P T P + F P precision = \frac{TP}{TP+FP} precision=TP+FPTP
R(recall)表示召回率查全率:表示为正确判别为正例样本占总实际正例样本的比例。
r e c a l l = T P T P + F N recall = \frac{TP}{TP+FN} recall=TP+FNTP
在这里介绍一个另外一个较为常用的准确率(accuracy)的概念,表示整个预测正确的比例
a c c u r a c y = T P + T N T P + F P + T N + F N accuracy = \frac{TP+TN}{TP+FP+TN+FN} accuracy=TP+FP+TN+FNTP+TN

4.4.3 二次判别分析

正如我们所讨论的,LDA假设每个类别内的观测值都来自一个多元高斯分布,该分布具有一个特定类别的平均向量和一个所有类别共有的协方差矩阵。二次判别分析(QDA)提供了一种可选的二次判别分析方法。与LDA一样,QDA分类器的结果是假设每个类别的观测值都来自高斯分布,并将参数估计结果结合到贝叶斯定理,以实现各类的预测。然而,与LDA不同,QDA假设每个类都有自己的协方差矩阵。也就是说,它假设来自第k类的预测因此服从 X X X~ N ( μ k , Σ k ) N(\mu_k,\Sigma_k) N(μk,Σk)。其中 Σ k \Sigma_k Σk是第k类的协方差矩阵。此时,对于一个给定的X=x,根据贝叶斯理论,我们要选取使得下列式子最大那一类:
δ k ( x ) = − 1 2 ( x − μ k ) T Σ k − 1 ( x − μ k ) − 1 2 l o g ∣ Σ k ∣ + l o g π k = − 1 2 x T Σ k − 1 x + x T Σ k − 1 μ k − 1 2 μ k T Σ k − 1 μ k − 1 2 l o g ∣ Σ k ∣ + l o g π k \delta_k(x) = -\frac{1}{2}(x-\mu_k)^T\Sigma_k^{-1}(x-\mu_k)-\frac{1}{2}log|\Sigma_k|+log\pi_k\\ = -\frac{1}{2}x^T\Sigma_k^{-1}x +x^T\Sigma_k^{-1}\mu_k -\frac{1}{2}\mu_k^T\Sigma_k^{-1}\mu_k -\frac{1}{2}log|\Sigma_k|+log\pi_k δk(x)=21(xμk)TΣk1(xμk)21logΣk+logπk=21xTΣk1x+xTΣk1μk21μkTΣk1μk21logΣk+logπk
从上式可以看出,是X的2次项的函数。因此命名为QDA。

为什么我们认为这些类是否共享一个公共协方差矩阵很重要?我们再来讨论一下第二章所讲的偏差-方差权衡。当预测QDA时,假设有p个预测变量,估计协方差矩阵需要估计p(p+1)/2参数。QDA为每个类别估计一个单独的协方差矩阵,总参数为kp(p+1)/2。当p很大时,则估计的参数也很多,这样一方面增加了模型的复杂度,容易导致过拟合,从而导致方差太大的问题,
另一方面,估计的参数越多意味着我们需要更多的数据,这在某些情况下可能不满足。
LDA模型假设同方差,这意味着只有K个线性系数需要估计。因此,LDA是一种比QDA更Regularization的模型,因此方差也大大降低。但可能导致偏差变大。
因此,可能可以找到一个折中的方法:粗略地说,如果训练集相对较少,因为减少方差至关重要,LDA往往比QDA更好。相比之下,如果训练集非常大,因此分类器的方差不是主要问题,此时QDA可能会好一些。此外,如果LDA认为这些类共享一个共同的协方差矩阵的假设没什么问题,此时建议使用LDA。或者如果公共协方差矩阵的假设显然不成立,则建议使用QDA。图4.9展现了LDA和QDA在不同情况下的比较。在左图中,两个变量之间的相关性是0.7,并且 Σ 1 = Σ 2 \Sigma_1=\Sigma_2 Σ1=Σ2,此时贝叶斯决策边界是一次的。所有LDA比QDA更精确的逼近这个边界。右图中蓝色类变量之间的相关性为−0.7. 橙色类变量之间的相关性为0.7,且 Σ 1 ≠ Σ 2 \Sigma_1 \neq\Sigma_2 Σ1=Σ2现在贝叶斯决策边界是二次的,所以QDA比LDA更准确地逼近这个边界
统计学习导论(ISLR)(四):分类算法_第12张图片

图4.9 贝叶斯(紫色虚线)LDA(黑色虚线)和QDA(绿色曲线)拟合结果图

4.4.4 朴素贝叶斯

上述我们已经介绍了LDA和QDA的做法。我们回顾一下贝叶斯理论,最关键的是要找到 f k ( x ) f_k(x) fk(x),LDA和QDA都是假设一组多元正态分布的概率密度函数取估计。朴素贝叶斯不从这个角度来分析,不要求 f k ( x ) f_k(x) fk(x)服从某一个固定的分布,而是假设对于每一类,预测变量之间是相互独立的。因此满足:
f k ( x ) = f k 1 ( x 1 ) × f k 2 ( x 2 ) × . . . × f k p ( x p ) , f_k(x) = f_{k1}(x_1)\times f_{k2}(x_2)\times ...\times f_{kp}(x_p), fk(x)=fk1(x1)×fk2(x2)×...×fkp(xp)
其中 f k j f_{kj} fkj表示第k类中第j个预测变量的概率密度函数。
下面我们来看一下这个假设是否合理。首先,这个假设是一个很强的假设。但是实际上我们估计二维密度函数是有挑战性的,因为我们不仅要考虑每个预测变量的分布,还要考虑预测分布的联合分布。在多元正态分布的情况下,不同预测因子之间的关系由协方差矩阵的非对角元素代替。尽管如此,这种联系可能很难定性,并且极难估计。但是通过假设预测变量在每一类中是独立的,我们完全不需要担心预测因子之间的关系。但在大多数情况下,可能这种假设并不合适。但是,它通常也会产生相当不错的结果,尤其是在相对误差不大的情况下,我们无法有效地估计每个类别中预测因子的联合分布。由于估计联合分布需要大量数据,朴素贝叶斯是一个不错的选择。
本质上,朴素贝叶斯假设引入了一些偏差,但减少了方差,因此它是在实践中效果相当好的分类器。
一旦做了这个假设,则根据贝叶斯理论,我们可以得到
P r ( Y = k ∣ X = x ) = π k × f k 1 ( x 1 ) × f k 2 ( x 1 ) × . . . × f k p ( x p ) ∑ l = 1 K π l × f l 1 ( x 1 ) × f l 2 ( x 2 ) × . . . × f l p ( x p ) Pr(Y=k|X=x)=\frac{\pi_k\times f_{k1}(x_1)\times f_{k2}(x_1) \times ... \times f_{kp}(x_p)} {\sum_{l=1}^{K}\pi_l\times f_{l1}(x_1)\times f_{l2}(x_2)\times ...\times f_{lp}(x_p)} Pr(Y=kX=x)=l=1Kπl×fl1(x1)×fl2(x2)×...×flp(xp)πk×fk1(x1)×fk2(x1)×...×fkp(xp)
使用训练集来估计一元正态分布的概率密度函数 f k j f_{kj} fkj,我们做如下简单假设:

  • 如果X是数值型变量,我们假设 X j ∣ Y = k X_j|Y=k XjY=k~ N ( μ j k , σ j k 2 ) . N(\mu_{jk},\sigma_{jk}^2). N(μjk,σjk2).换句话说,我们假设在每一类中,每一个变量都是来自一个正态分布。这看起来有点像QDA的做法,但是有一点,我们假设预测变量是相互独立的,相等于QDA中协方差矩阵为对角阵
  • 如果X是数值型变量,我们也可以使用非参数估计的方法。例如通过每个变量的直方图,然后我们估计预测变量观测数据与直方图相同的比例。或者使用核密度估计的方法来估计。
  • 如果X是分类型变量,我们可以简单地计算每个类别对应的第j个预测变量训练数据集各个值的比例。假设 X j ∈ 1 , 2 , 3 X_j∈{1,2,3} Xj1,2,3,我们在第k类中有100次观测。假设第j个预测值分别有32、55和13个观察值中取1、2、3。然后我们可以估计:
    f ^ k j ( x j ) = { 0.32 if  x j = 1 0.55 if  x j = 2 0.13 if  x j = 3 \hat{f}_{kj}(x_j)=\begin{cases} 0.32\quad\text{if } x_j=1\\ 0.55\quad\text{if } x_j = 2\\ 0.13\quad\text{if }x_j = 3 \end{cases} f^kj(xj)=0.32if xj=10.55if xj=20.13if xj=3

现在我们考虑构建一个朴素贝叶斯分类器,p=3,K=2。前两个预测变量是数值型的,第三个变量是分类型的,共有三个取值。并且假设先验概率 π ^ 1 = π ^ 2 = 0.5 \hat{\pi}_1 = \hat{\pi}_2=0.5 π^1=π^2=0.5。各个变量的情况如图4.10所示。
统计学习导论(ISLR)(四):分类算法_第13张图片

图4.10 朴素贝叶斯预测变量分布情况

现在我们假设对一个新的数据进行分类 x ∗ = ( 0.4 , 1.5 , 1 ) T x^*=(0.4,1.5,1)^T x=(0.4,1.5,1)T,根据图4.10,计算 f ^ 11 ( 0.4 ) = 0.368 \hat{f}_{11}(0.4)=0.368 f^11(0.4)=0.368, f ^ 12 ( 1.5 ) = 0.484 \hat{f}_{12}(1.5)=0.484 f^12(1.5)=0.484, f ^ 13 ( 1 ) = 0.32 \hat{f}_{13}(1)=0.32 f^13(1)=0.32, f ^ 21 ( 0.4 ) = 0.030 \hat{f}_{21}(0.4)=0.030 f^21(0.4)=0.030, f ^ 22 ( 1.5 ) = 0.130 \hat{f}_{22}(1.5)=0.130 f^22(1.5)=0.130, f ^ 23 ( 1 ) = 0.616 \hat{f}_{23}(1)=0.616 f^23(1)=0.616
带入到贝叶斯分类器中: P r ( Y = 1 ∣ X = x ∗ ) = 0.944 Pr(Y=1|X=x^*)=0.944 Pr(Y=1X=x)=0.944 P r ( Y = 1 ∣ X = x ∗ ) = 0.056 Pr(Y=1|X=x^*)=0.056 Pr(Y=1X=x)=0.056。因此应该分到第1类中。
下面使用朴素贝叶斯训练违约数据集,得到混淆矩阵如下表4.6。
其中阈值设为 P r ( Y = d e f a u l t ∣ X = x ) > 0.5 Pr(Y=default|X=x)>0.5 Pr(Y=defaultX=x)>0.5

表4.6朴素贝叶斯预测违约数据集混淆矩阵

统计学习导论(ISLR)(四):分类算法_第14张图片

我们和LDA结果对比,发现虽然LDA的总体错误率略低,但朴素贝叶斯预测的真正违约者比例更高。在这个朴素贝叶斯的实现中,我们假设每个定量预测都是来自于高斯分布。
下面我们调整阈值,改为 P r ( Y = d e f a u l t ∣ X = x ) > 0.2 Pr(Y=default|X=x)>0.2 Pr(Y=defaultX=x)>0.2,得到结果如下表4.7.

表4.7 朴素贝叶斯得到的混淆矩阵(阈值为0.2)

统计学习导论(ISLR)(四):分类算法_第15张图片

与具有相同阈值的LDA相比。Naive Bayes的错误率较高,但能正确预测近三分之二的真实违约数据。
在这个例子中,朴素贝叶斯并没有令人信服地优于LDA,这一点也不太令人惊讶:这个数据集n=10000,p=4,因此朴素贝叶斯假设导致的方差减少不一定值得。我们希望在p较大或n较小的情况下,使用朴素贝叶斯比LDA或QDA效果更好。

4.5 分类方法的比较

4.5.1 理论比较

我们现在对LDA、QDA、朴素贝叶斯和逻辑回归进行理论比较。假设一共有k类,我们要找到使得 P r ( Y = k ∣ X = x ) Pr(Y=k|X=x) Pr(Y=kX=x)最大的那一类。这里我们做一个小trick,我们将第K类作为基础类,那等价于我们要找到使得下式最大:
l o g ( P r ( Y = k ∣ X = x ) P r ( Y = K ∣ X = x ) ) log(\frac{Pr(Y=k|X=x)}{Pr(Y=K|X=x)}) log(Pr(Y=KX=x)Pr(Y=kX=x))
下面我们分析每种方法的具体形式:
LDA:
l o g ( P r ( Y = k ∣ X = x ) P r ( Y = K ∣ X = x ) ) = l o g ( π k f k ( x ) π K f K ( x ) ) = l o g ( π k e x p ( − 1 2 ( x − μ k ) T Σ − 1 ( x − μ k ) ) π K e x p ( − 1 2 ( x − μ K ) T Σ − 1 ( x − μ K ) ) ) = l o g ( π k π K ) − 1 2 ( x − μ k ) T Σ − 1 ( x − μ k ) + 1 2 ( x − μ K ) T Σ − 1 ( x − μ K ) ) = l o g ( π k π K ) − 1 2 ( μ K + μ k ) T Σ − 1 ( μ k − μ K ) + X T Σ − 1 ( μ k − μ K ) ) = a k + ∑ j = 1 p b k j x j . log(\frac{Pr(Y=k|X=x)}{Pr(Y=K|X=x)})=log(\frac{\pi_kf_k(x)}{\pi_Kf_K(x)})\\ =log(\frac{\pi_kexp(-\frac{1}{2}(x-\mu_k)^T\Sigma^{-1}(x-\mu_k))}{\pi_Kexp(-\frac{1}{2}(x-\mu_K)^T\Sigma^{-1}(x-\mu_K))})\\=log(\frac{\pi_k}{\pi_K})-\frac{1}{2}(x-\mu_k)^T\Sigma^{-1}(x-\mu_k)+\frac{1}{2}(x-\mu_K)^T\Sigma^{-1}(x-\mu_K))\\= log(\frac{\pi_k}{\pi_K})-\frac{1}{2}(\mu_K+\mu_k)^T\Sigma^{-1}(\mu_k-\mu_K)+X^T\Sigma^{-1}(\mu_k-\mu_K))\\=a_k + \sum_{j=1}^{p}b_{kj}x_j. log(Pr(Y=KX=x)Pr(Y=kX=x))=log(πKfK(x)πkfk(x))=log(πKexp(21(xμK)TΣ1(xμK))πkexp(21(xμk)TΣ1(xμk)))=log(πKπk)21(xμk)TΣ1(xμk)+21(xμK)TΣ1(xμK))=log(πKπk)21(μK+μk)TΣ1(μkμK)+XTΣ1(μkμK))=ak+j=1pbkjxj.
其中 a k = l o g ( π k π K ) − 1 2 ( μ K + μ k ) T Σ − 1 ( μ k − μ K ) a_k=log(\frac{\pi_k}{\pi_K})-\frac{1}{2}(\mu_K+\mu_k)^T\Sigma^{-1}(\mu_k-\mu_K) ak=log(πKπk)21(μK+μk)TΣ1(μkμK), b k j b_{kj} bkj
Σ − 1 ( μ k − μ K ) \Sigma^{-1}(\mu_k-\mu_K) Σ1(μkμK)。因此LDA是对于X线性的.
同样分析QDA:
l o g ( P r ( Y = k ∣ X = x ) P r ( Y = K ∣ X = x ) ) = a k + ∑ j = 1 p b k j x j + ∑ j = 1 p ∑ l = 1 p c k j l x j x l . log(\frac{Pr(Y=k|X=x)}{Pr(Y=K|X=x)})=a_k + \sum_{j=1}^{p}b_{kj}x_j+\sum_{j=1}^{p}\sum_{l=1}^{p}c_{kjl}x_jx_l. log(Pr(Y=KX=x)Pr(Y=kX=x))=ak+j=1pbkjxj+j=1pl=1pckjlxjxl.
QDA假设对数单位是关于X呈现二次关系
最后分析朴素贝叶斯
l o g ( P r ( Y = k ∣ X = x ) P r ( Y = K ∣ X = x ) ) = a k + ∑ j = 1 p g k j ( x j ) . log(\frac{Pr(Y=k|X=x)}{Pr(Y=K|X=x)})=a_k +\sum_{j=1}^{p}g_{kj}(x_j). log(Pr(Y=KX=x)Pr(Y=kX=x))=ak+j=1pgkj(xj).

采用了一种广义加法模型的形式。

  • LDA是一种特殊的QDA,当 c k j l = 0 c_{kjl}=0 ckjl=0。也可以看作是QDA的 Σ 1 = . . . = Σ k = Σ \Sigma_1=...=\Sigma_k=\Sigma Σ1=...=Σk=Σ
  • 任何线性决策边界都是一种特殊的朴素贝叶斯。令 g k j ( x j ) = b k j x j g_{kj}(x_j)=b_{kj}x_j gkj(xj)=bkjxj,LDA就是一种特殊的朴素贝叶斯
  • 朴素贝叶斯和QDQ都不是对方的特例,朴素贝叶斯是一种更灵活的方法,但是它仅限于加法模型,而QDA可以有更广泛的形式。因此在预测变量区分不同类别有相关性时,QDA可能更准确。

这些方法中没有一种方法能完全优于其他的方法:在任何情况下,方法的选择将取决于预测变量在每个K类中的真实分布,以及样本量和预测变量个数等其他因素。
例如logistic回归和LDA,如果预测变量服从正态分布,则LDA优于logistic回归,不服从,则logistic回归可能更好

下面再讨论一下KNN分类器。我们在第二章结尾介绍了KNN分类器,它与本章各方法都不同,对于一个给定的数据,计算其与已知数据集的距离,确定k个最小距离的数据,然后看着k个数据集中属于哪一类最多则分到哪一类中。是一种非参数的方法,没有确定的决策边界。与其他方法比较如下:

  • KNN是非参数估计,因此当决策边界是非线性时,KNN会优于LDA和logistic回归,但要求n很大并且p较小
  • 为了准确的得到分类结果,KNN要求很大的数据集,并且希望变量数量较少。因为KNN作为非参数方法,更倾向于解决偏差,而导致方差可能较大
  • 如果决策边界是非线性的,但是n不是很大,或者p不是很小,那么QDA可能比KNN更好。这是因为QDA可以在利用参数形式的同时提供非线性决策边界,这意味着它需要较小的样本量来实现准确分类
  • KNN不能给出预测变量的影响情况

4.5.2 实证比较

现在,我们进行逻辑回归、LDA、QDA、朴素贝叶斯和KNN的实证比较。对于每个场景,我们制作了100个随机训练数据集。在每个训练集上,我们将每个方法拟合数据数据,并在一个大的测试集上计算得到的测试错误率。共有六个实际场景,其中前三个是线性的,后面三个是非线性的。线性的结果如图4.11所示,非线性场景的结果如图4.12所示。KNN方法需要选择k,我们选择k:K=1和交叉验证选择k两个结果。每个场景都是一个二元分类,并且有两个数值型预测变量。

统计学习导论(ISLR)(四):分类算法_第16张图片

图4.11 线性情景下各个模型的错误率箱线图

场景1:两个类各有20个数据集。每个类别内的观察是不相关的随机正态分布变量,每个类别的平均值不同。
KNN-1表现很差,因为数据量n不是很大,从而导致了方差较大,LDA表现最好,因为满足LDA的所有假设,朴素贝叶斯比QDA效果更好,因为满足相互独立

场景2:细节如场景1所示,只是在每个类别中,两个预测值的相关性为−0.5.
大多数方法的性能与之前类似。值得注意的例外是朴素贝叶斯,它在这里的表现非常差,因为预测变量在这里不相互独立被了。

场景3:与前一个场景一样,每个类别内的预测因子之间存在显著的负相关关系。然而,这一次我们从t分布中生成了x1和x2,每类有50个观察值。t-分布形状与正态分布相似,但它倾向于产生更多的极值点,即更多远离平均值的点。
违反了LDA的假设,因为观测结果并非来自正态分布。此时,逻辑回归优于LDA。QDA结果随着非正态性序列的出现而显著恶化。朴素贝叶斯的表现也非常糟糕,因为独立性假设被违背了
下面我们来看一下非线性情况下各种方法的比较。
统计学习导论(ISLR)(四):分类算法_第17张图片

图4.12 非线性情况下各种方法的错误率箱线图

场景4:数据来自正态分布,第一类预测变量之间的相关性为0.5,第二类预测变量之间的相关系数为-0.5。
符合QDA假设,并出现二次决策边界。图4.12的左图显示,QDA优于所有其他方法。朴素贝叶斯的表现不佳,因为不满足独立性假设。

场景5:数据来自独立正态分布。然后,通过logistic函数作用于预测变量得到响应值。 图4.12的中间显示,与线性方法相比,QDA和朴素贝叶斯方法的结果稍好,而更灵活的KNN-CV方法的结果最好。但在所有方法中,k=1的KNN给出的结果最差。这突出了一个事实,即使数据显示出复杂的非线性关系,如果没有正确选择平滑度,非参数方法(如KNN)仍可能产生较差的结果。

场景6:观察结果由正态分布生成,每个类别具有不同的对角协方差矩阵。然而,样本大小非常小:每个类中只有n=6。 朴素贝叶斯的表现非常好,因为它的假设得到了满足。LDA和logistic回归表现不佳,因为真实决策边界是非线性的。QDA的表现比naiveBayes差一点,因为考虑到非常小的样本量,前者在估计每类预测因子之间的相关性时产生了太多的方差。KNN的表现也受到了小样本的影响。

4.6 广义线性模型

在第三章中,我们假设响应是定量的,并尝试使用最小二乘线性回归进行预测。到目前为止,在本章中,我们假设这是定性的。然而,我们有时可能会遇到既不定性也不定量的情况,因此第3章中的线性回归和本章中涵盖的分类方法都不适用。
例如,我们使用bikeshare数据。响应变量是每小时有多少共享单车的使用者,这个变量即不是分类型变量,也不是数值型变量,而是一个非负整数集。预测变量有:月份、时间、工作日(是工作日则为1)、温度和天气(晴朗、多云、小雨或小雪、大雨或大雪)。

4.6.1 线性回归

首先,我们考虑使用线性回归预测BiksShare数据。结果如表4.8所示。例如,我们看到,天气从晴朗到乌云密布的变化导致平均每小时骑自行车的人减少12.89人;然而,如果天气进一步恶化到下雨或下雪,那么这将进一步导致每小时骑自行车的人减少53.60。

表4.8回归系数结果

统计学习导论(ISLR)(四):分类算法_第18张图片图4.13显示了与月份和时间相关的系数。我们发现,自行车使用量在春季和秋季最高,冬季最低。此外,在高峰时段(上午9点和下午6点)时,比基奥赛奇是最好的,而在夜间则是最低的。因此,乍一看,将线性回归模型拟合到BikeShare数据集似乎可以提供合理而直观的结果。统计学习导论(ISLR)(四):分类算法_第19张图片

图 4.13 month和hour的回归系数图

但是线性回归有一些问题存在,例如,BikeShare数据集中9.6%的拟合值为负值:也就是说,线性回归模型预测数据集中9.6%的小时内用户数为负值。这是没有实际意义的估计值。
此外,当估计值较小时,我们合理估计其方差也很小,此时导致异方差问题,这与我们线性回归的假设相违背。如下图4.14。
最后,在线性回归中, ϵ \epsilon ϵ是一个连续值误差项,而我们的响应变量是非负整数,这也是不合理的,因此对于这个问题线性回归模型拟合效果不好。
我们或许可以通过转换响应变量来克服这些问题,例如取对数:
l o g ( Y ) = ∑ j = 1 p X j β j + ϵ log(Y)=\sum_{j=1}^{p}X_j\beta_j+\epsilon log(Y)=j=1pXjβj+ϵ
结果如下图4.14。
统计学习导论(ISLR)(四):分类算法_第20张图片
图4.14 左图:纵轴是骑自行车人数,横轴是hour。右图:纵轴是取对数后的骑自行车人数,横轴是hour。(为了显示更平滑,使用了抖动)

虽然取对数后有一定的改善,但在响应变量为0的部分,不能取对数,因此我们接下来介绍一些更适合的方法

4.6.2 泊松回归

为了克服线性回归在分析BikeShare数据集时的不足,我们使用Poisson回归。首先介绍一下泊松分布:
假设一个随机变量 Y Y Y为非负整数,如果 Y Y Y服从泊松分布,则有:
P r ( Y = k ) = e − λ λ k k ! k = 0 , 1 , 2 , . . . Pr(Y=k) = \frac{e^{-\lambda}\lambda^k}{k!} \quad k=0,1,2,... Pr(Y=k)=k!eλλkk=0,1,2,...
其中 λ \lambda λ Y Y Y的期望,也是 Y Y Y的方差,有 λ = E ( Y ) = V a r ( Y ) \lambda=E(Y)=Var(Y) λ=E(Y)=Var(Y)

泊松分布通常用于计数建模。在本例中,预测一天中特定时间、特定天气条件下以及一年中特定月份的骑共享自行车的用户数量。假设 λ = 5 \lambda=5 λ=5,则平均用户数为5,那么我们就可以计算各个取值的概率。但是,在实际中, λ \lambda λ不会是一个固定值,下面我们考虑下面的模型 λ = E ( Y ) \lambda = E(Y) λ=E(Y),将 λ \lambda λ看做是 X j X_j Xj的回归:
l o g ( λ ( X 1 , . . . X p ) ) = β 0 + β 1 X 1 + . . . + β p X p log(\lambda(X_1,...X_p))=\beta_0+\beta_1X_1+...+\beta_pX_p log(λ(X1,...Xp))=β0+β1X1+...+βpXp
估计结果如下表4.9

表4.9 回归系数结果

统计学习导论(ISLR)(四):分类算法_第21张图片

这样可以得到
λ ( X 1 , . . . X p ) = e β 0 + β 1 X 1 + . . . + β p X p \lambda(X_1,...X_p) = e^{\beta_0+\beta_1X_1+...+\beta_pX_p} λ(X1,...Xp)=eβ0+β1X1+...+βpXp
这样可以确保 λ \lambda λ是非负的。我们使用极大似然估计参数,似然函数如下:
L ( β 0 , β 1 , . . . β p ) = ∏ i = 1 n e − λ ( x i ) λ ( x i ) y i y i ! L(\beta_0,\beta_1,...\beta_p) = \prod_{i=1}^{n}\frac{e^{-\lambda(x_i)}\lambda(x_i)^{y_i}}{y_i!} L(β0,β1,...βp)=i=1nyi!eλ(xi)λ(xi)yi
其中 λ ( x i ) = e β 0 + β 1 x i 1 + . . . + β p x i p \lambda(x_i)=e^{\beta_0+\beta_1x_{i1}+...+\beta_px_{ip}} λ(xi)=eβ0+β1xi1+...+βpxip
我们要找到使得似然函数最大的那些参数。
下面我们来看看泊松回归和线性回归之间的区别:

  • 系数解释,为了解释泊松回归模型的系数,我们要关注 E ( Y ) = λ E(Y)=\lambda E(Y)=λ X j X_j Xj之间的关系,可以发现当 X j X_j Xj改变一个单位,则意味平均自行车用户量改变 e β j e^{\beta_j} eβj,例如当天气从晴朗变成多云,意味着只有原来 e − 0.08 = 92.3 % e^{-0.08}=92.3\% e0.08=92.3%继续骑行自行车
  • 均值-方差关系:如前所述,在泊松模型下,均值等于方差。因此,通过使用Poisson回归对自行车使用量进行建模,我们隐式地假设的平均自行车使用量等于该小时内自行车使用量的方差。而我们从图4.14可以看出,骑行自行车用户量越大,方差越大。因此,泊松回归模型能够以线性回归模型无法处理的方式处理BikeShare数据中的均值-方差关系。
  • 非负拟合值:使用Poisson回归模型没有负预测。这是因为泊松模型本身只允许非负值。相比之下,当我们把线性回归模型对BikeShare数据集进行拟合,几乎10%的预测结果为负值

4.6.3 更具普遍性的广义线性模型

我们现在讨论了三种回归模型:线性回归、逻辑回归和泊松回归。这些方法有一些共同特点:

  • 1.给出一些预测变量来预测响应变量,并且假设 Y 对 X j Y对X_j YXj的条件分布服从某一特定的分布。对于线性回归,我们通常假设服从高斯分布或正态分布。对于逻辑回归,我们假设服从伯努利分布。对于泊松回归,我们假设服从泊松分布
  • 每种方法都将平均值为预测变量的函数。在线性回归中,Y的平均值是: E ( Y ∣ X 1 , . . . , X p ) = β 0 + β 1 X 1 + . . . + β p X p E(Y|X_1,...,X_p)=\beta_0+\beta_1X_1+...+\beta_pX_p E(YX1,...,Xp)=β0+β1X1+...+βpXp在logistic回归中: E ( Y ∣ X 1 , . . . , X p ) = P r ( Y = 1 ∣ X 1 , . . . , X p ) = e β 0 + β 1 X 1 + . . . + β p X p 1 + e β 0 + β 1 X 1 + . . . + β p X p E(Y|X_1,...,X_p)=Pr(Y=1|X_1,...,X_p)=\frac{e^{\beta_0+\beta_1X_1+...+\beta_pX_p}}{1+e^{\beta_0+\beta_1X_1+...+\beta_pX_p}} E(YX1,...,Xp)=Pr(Y=1X1,...,Xp)=1+eβ0+β1X1+...+βpXpeβ0+β1X1+...+βpXp
    在泊松回归中:
    E ( Y ∣ X 1 , . . . , X p ) = λ ( X 1 , . . . X p ) = e β 0 + β 1 X 1 + . . . + β p X p E(Y|X_1,...,X_p)=\lambda(X_1,...X_p) = e^{\beta_0+\beta_1X_1+...+\beta_pX_p} E(YX1,...,Xp)=λ(X1,...Xp)=eβ0+β1X1+...+βpXp

我们可以使用一个link function作用于 E ( Y ∣ X 1 , . . . , X p ) E(Y|X_1,...,X_p) E(YX1,...,Xp)中:
η ( E ( Y ∣ X 1 , . . . , X p ) = β 0 + β 1 X 1 + . . . + β p X p \eta(E(Y|X_1,...,X_p)_=\beta_0+\beta_1X_1+...+\beta_pX_p η(E(YX1,...,Xp)=β0+β1X1+...+βpXp
那么线性回归、logistic回归、泊松回归可以表示为:
η ( μ ) = μ , η ( μ ) = l o g ( μ / ( 1 − μ ) , η ( μ ) = l o g ( μ ) \eta(\mu) = \mu, \eta(\mu)=log(\mu/(1-\mu),\eta(\mu)=log(\mu) η(μ)=μ,η(μ)=log(μ/(1μ),η(μ)=log(μ)
高斯分布、伯努利分布和泊松分布都属于一类更广泛的分布,称为指数族。该家族的其他指数分布成员包括指数分布、伽马指数分布和负二项分布。一般来说,我们可以通过对来自指数族特定成员的响应进行建模,然后对响应的平均值进行变换,从而使变换后的平均值成为预测值的线性函数,从而形成回归。任何遵循这种非常普遍的方法的回归方法都被称为广义线性模型(GLM)。因此,线性回归、逻辑广义线性模型回归和泊松回归是GLMs的三个例子。

4.7 总结

本文介绍了分类的各种算法:LDA、QDA、逻辑回归、朴素贝叶斯、泊松回归。没有没有一种方法在任何情况下都能优于其他方法。当真正的决策边界是线性的时,LDA和逻辑回归方法往往表现良好。当边界是中度非线性时,QDA或朴素贝叶斯可能会给出更好的结果。最后,对于更复杂的决策边界,非参数方法(如KNN)可能更好。但非参数方法的平滑度必须谨慎选择。

你可能感兴趣的:(统计学习概论,ISLR,机器学习,数据科学,logistic回归,分类算法)