周志华-机器学习-笔记(二)-线性模型

本文介绍了线性模型的基础原理及其几种经典应用,包括线性回归、对数几率回归、线性判别分析等,并探讨了多分类学习策略及类别不平衡问题的解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  线性模型(linear model)试图学得一个通过属性的线性组合来进行预测的函数。如,给定由d个属性描述的示例x=(x1;x2;...;xd)x=(x1;x2;...;xd),其中xixi是在ii个属性上的取值,则线性模型为

f(x)=w1x1+w2x2+...+wdxd+b

一般写成向量形式

f(x)=wTx+bf(x)=wTx+b

其中w=(w1;w2;...;wd)w=(w1;w2;...;wd)wwb学得之后,模型就得以确定。
  • 线性模型有很好的可解释性(comprehensibility)。
  • 许多功能更为强大的非线性模型(nonlinear model)可在线性模型的基础上通过引入层级结构或高维映射而得。

下面介绍几种经典的线性模型。

线性回归

  给定数据集D={(x1,y1),(x2,y2),...,(xm,ym)}D={(x1,y1),(x2,y2),...,(xm,ym)},其中xi=(xi1;xi2;...;xid),yiRxi=(xi1;xi2;...;xid),yi∈R,(yiyi是对应的xixi的标签)
线性回归试图学得

f(xi)=wxi+b使f(xi)yif(xi)=wxi+b,使得f(xi)接近与yi

  在线性回归中,最小二乘法就是试图找到一条直线,使所有样本到直线上的欧氏距离之和最小。求解wwb使E(w,b)=mi=1(yiwxib)2E(w,b)=∑i=1m(yi−wxi−b)2最小化的过程,称为线性回归模型的最小二乘“参数估计”(parameter estimation)
假如输出标尺是在指数尺度上的变化,那将输出标尺的对数作为线性模型逼近的目标,即
lny=wTx+bln⁡y=wTx+b

这就是“对数线性回归”(log-linear regression)
这里写图片描述
更一般地,使用单调可微函数g()g(⋅),用
y=g1(wTx+b)y=g−1(wTx+b)

  这样的模型称为“广义线性模型”(generalized linear model),函数g()g(⋅)称为“联系函数“(link function)。对数线性回归是广义线性模型在g()=ln()g(⋅)=ln⁡(⋅)时的一个特例。
对数几率回归

  广义线性模型在做分类任务时,只需找一个单调可微函数将分类任务的真实标记yy与线性回归模型的预测值联系起来。
  考虑二分类任务时,输出标记为y={0,1},而线性回归模型产生的预测值z=wTx+bz=wTx+b是实值,所以要将实值zz转换为0/1值,最理想的是”单位阶跃函数“(unit-step function)。(若预测值为临界值0时则可以任意判别)。
  但问题是单位阶跃函数是不连续的函数,因此不能直接用作g()g−(⋅)。故有没有理想的替代函数,既有单位阶跃函数的特点,同时是单调可微的呢?对数几率函数(logistic function)就是这样一个常用的替代函数:

y=11+ezy=11+e−z

如下图:
这里写图片描述
  对数几率函数可以将zz值转化为一个接近0或1的y值,并在z=0z=0附近变化很陡,将代数几率函数作为g()g(⋅)代入广义线性模型,有
y=11+e(wTx+b)y=11+e−(wTx+b)

该式可变化为
lny1y=wTx+bln⁡y1−y=wTx+b

  若将yy视为x为正例的可能性,则1y1−y是其反例的可能性,两者的比值y1yy1−y称为”几率“(pdds),反映了xx为正例的相对可能性,对几率取对数则得到”对数几率“(log odds):
lny1y

  y=11+e(wTx+b)y=11+e−(wTx+b)实际上是用线性回归模型的预测结果去逼近真实标记的对数几率,其对应模型称为”对数几率回归“(logistic regression)
  至于如何确定wwb的值,在这里暂时不做讨论。
线性判别分析

  性别判别分析(Linear Discriminant Analysis)简称LDA,是一种经典的线性学习方法,它的思想很简单:给定训练样例集,设法将样例投影到一条直线上,使得同类样例的投影点尽可能接近、异类样例的投影点尽可能远离;在对新样本进行分类时,将其投影到同样的这条直线上,再根据投影点的位置来确定新样本的类别。这里写图片描述
令给定的数据集D={(xi,yi)}mi=1,yi{0,1}D={(xi,yi)}i=1m,yi∈{0,1}
XiμiΣiXi、μi、Σi分别代表第i{0,1}i∈{0,1}类示例的集合、均值向量、协方差矩阵。
则两类样本在直线上的投影分别为wTμ0wTμ0wTμ1wTμ1
两类样本的协方差分别为wTΣ0wwTΣ0wwTΣ1wwTΣ1w
由于直线是一维空间(于直线本身考虑,直线就是一维),因此wTμ0wTμ0wTμ1wTμ1wTΣ0wwTΣ0wwTΣ1wwTΣ1w均为实数。
  要使同类样例的投影点尽可能接近,可以让同类样例的投影点的协方差尽可能小,及wTΣ0w+wTΣ1wwTΣ0w+wTΣ1w尽可能小;要使异类样例的投影点尽可能远离,可以让类中心之间的距离尽可能大,即||wTμ0wTμ1||22||wTμ0−wTμ1||22尽可能大。同时考虑两者,则得到最大化目标:

J=||wTμ0wTμ1||22wTΣ0w+wTΣ1w(3.32)(3.32)J=||wTμ0−wTμ1||22wTΣ0w+wTΣ1w

  此处定义两个概念:
  “类内散度矩阵”(within-class scatter matrix):
Sw=Σ0+Σ1xX0(xμ0)(xμ0)T+xX1(xμ1)(xμ1)TSw=Σ0+Σ1=∑x∈X0(x−μ0)(x−μ0)T+∑x∈X1(x−μ1)(x−μ1)T

  “类间散度矩阵”(between-class scatter matrix):
  
Sb=(xμ1)(xμ1)TSb=(x−μ1)(x−μ1)T

  则公式(3.32)可以重写为
J=wTSbwwTSww(3.35)(3.35)J=wTSbwwTSww

  这就是LDA欲最大化的目标,即SbSbSwSw的“广义瑞利商”(generalized Rayleigh quotient)。
  确定ww的方法:(这里不是太懂,后续更新)
  注意到公式(3.35)的分子和分母都是关于w的二次项,分子分母会将ww的长度约去,因此公式(3.35)的解与长度无关,只与其方向有关。不失一般性,令wTSww=1,则(3.35)等价于
minwwTSbws.t.wTSww=1minw−wTSbws.t.wTSww=1
多分类学习

  在很多情况下,我们会利用二分类学习器来解决多分类问题。不失一般性,考虑NN个类别C1,C2,...,CN,多分类学习的基本思路是“拆解法”,即将多分类任务拆为若干个二分类任务求解。
  最经典的拆分策略有三种:“一对一”(One vs. One,简称OvO)、“一对其余”(One vs. Rest,简称OvR)和“多对多”(Many vs. Many,简称MvM)。
  给定数据集D
  D={(x1,y1,(x2,y2),...,(xm,ym))},yi{C1,C2,...,CN}D={(x1,y1,(x2,y2),...,(xm,ym))},yi∈{C1,C2,...,CN}
  
  当使用OvO拆分时,将这NN个类别两两配对,从而产生N(N1)/2个二分类任务。在训练阶段,OvO将为区分CiCiCjCj训练成一个分类器,该分类器把DD中的Ci类样例作为正例,CjCj类样例作为反例。在测试阶段,新样本将同时提交给所有分类器,于是得到N(N1)/2N(N−1)/2个分类结果,最终把预测的最多的类别作为最终分类结果。

  当使用OvR拆分时,在训练阶段,将一个类的样例作为正例,所有其它类的样例作为反例来训练NN个分类器。在测试阶段,新样本将同时提交给所有分类器,若仅有一个分类器预测为正类、则对应的类别标记作为最终分类结果;若有多个分类器预测为正类,则通常考虑各分类器的预测置信程度,选择置信度最大的类别标记作为分类结果。
  这里写图片描述
  对比OvO和OvR可以看出,OvR只需训练N个分类器,而OvO需训练N(N1)/2N(N−1)/2个分类器,因此,OvO的存储开销和测试时间开销通常比OvR更大。但在训练时,OvR的每个分类器均使用全部的训练样例,OvO的每个分类器仅使用两个类的样例,因此,在类别很多时,OvO的训练时间开销通常比OvR小。但预测性能在多数情况下两者差不多。

  MvM是每次将若干个类作为正类,若干个其它类作为反类。它的正反类构造必须有特殊的设计,不能随便选取。
  “纠错输出码”(Error Correcting Output Codes,简称ECOC)是一种最常用的MvM技术。其工作工程主要分为两步:
  编码:对NN个类别做M次划分,形成一个二分类训练集,这样产生MM个训练集,可训练出M个分类器。
  解码:MM个分类器分别对测试演变进行预测,这些预测标记组成一个编码。将这个预测标记与每个类别各自的编码进行比较,返回其中距离最小的类别作为最终预测结果。
  类别划分通过“编码矩阵”(coding matrix)指定,常见有二元码(只有正类和反类)和三元码(正类反类和停用类)。在测试阶段,ECOC编码对分类器的错误有一定的容忍和修正能力。下图是一个示意图:
  这里写图片描述
  上图(a)的若取海明距离(在信息编码中,两个合法代码对应位上编码不同的位数称为码距,又称海明距离)最小,又或者取欧氏距离最小的预测结果是C3

类别不平衡问题

  类别不平衡(class-imbalance)就是指分类任务中不同类别的训练样例数目差别很大的情况。在使用OvR、MvM策略后产生的二分类任务仍可能出现类别不平衡现象。不失一般性,我们假设正类样例较少,反类样例较多。
  从线性分类器的角度讨论,在用y=wTx+by=wTx+b对新样本xx进行分类时,通常将预测出来的y值与阀值比较,例如当y>0.5时判别为正例,否则反例。故:

y1y>1(3.46)(3.46)若y1−y>1则预测为正例

  当训练集中正、反例的数目不同时,令m+m+表示正例数目,mm−表示反例数目,则观察几率m+mm+m−。由于我们通常假设训练集是真实样本总体的无偏差采样,因此观察几率就代表了真实几率。当分类器的预测几率高于观察几率时,为正例的可能性大。于是:
y1y>m+m(3.47)(3.47)若y1−y>m+m−则预测为正例

  但分类器做决策时是根据式(3.46),因此需要让
y,1y,=y1y×mm+(3.48)(3.48)y,1−y,=y1−y×m−m+
使其实际上还是执行式(3.47)。这是类别不平衡学习的一个基本策略——“在缩放”(rescaling,亦称rebalance)。
  在实际中,“训练集是真实样本总体的无偏采样”这个假设往往不成立,所以我们未必能有效地基于训练集观测几率来推断真实几率。现有技术大体上的三类做法:
欠采样(undersampling):去除一部分反例,使得正例与反例数目接近。
过采样(oversampling):增加一些正例,使得正例与反例数目接近。
阀值移动(threshold-moving):将式(3.48)嵌入到其决策过程中。
### 关于周志华机器学习》(西瓜书)第章的学习笔记 #### 模型评估与选择概述 模型评估与选择是机器学习领域的重要组成部分,旨在通过合理的方法评价不同模型的表现并挑选最优者。这一过程不仅涉及如何衡量单个模型的好坏,还包括怎样对比多个候选方案以做出最佳决策。 #### 偏差、方差和噪声的概念解析 偏差度量了学习算法的期望预测与实际结果之间的差距,反映了算法自身的拟合精度;方差描述的是相同规模训练集变化引起的学习效果波动情况,体现了数据扰动带来的影响;而噪声则设定了给定任务下所有可能采用的学习方法能达到的最佳预期泛化误差界限,揭示了问题本身固有的复杂性和挑战性[^2]。 #### 性能度量指标——P-R图及其应用 为了更直观地展示各类分类器的工作特性,通常会绘制精确率-召回率(Precision-Recall, P-R)曲线来辅助分析。当面对多组实验结果时,可以通过观察这些图形相互间的位置关系来进行优劣评判:如果某条曲线始终位于另一条之上,则表明前者具有更好的整体表现;而对于那些存在交点的情况,则需进一步计算各自下方区域面积大小作为判断依据之一。此外,“平衡点”作为一种特殊的性能测度,在特定条件下也能提供有价值的参考信息[^3]。 #### 偏差-方差分解理论简介 该理论为理解学习算法的一般化能力提供了框架性的指导思路,通过对平均测试错误率实施拆分操作,可以深入剖析导致过拟合现象背后的原因所在,并据此探索改进措施的方向。具体而言,总误差由三部分构成——不可约减误差点(即噪声)、平方形式表达出来的偏差项以及线性累加而成的方差成分[^4]。 ```python import numpy as np from sklearn.model_selection import train_test_split from sklearn.metrics import precision_recall_curve, auc def evaluate_model_performance(model, X, y): """ 计算并返回PR曲线下面积(AUC),用于量化模型的整体性能。 参数: model (object): 已经训练好的分类模型实例。 X (array-like of shape (n_samples, n_features)): 测试特征矩阵。 y (array-like of shape (n_samples,)): 对应的真实标签向量。 返回: float: PR AUC得分。 """ # 划分训练集/验证集 X_train, X_val, y_train, y_val = train_test_split(X, y, test_size=0.2) # 使用训练集拟合模型 model.fit(X_train, y_train) # 获取验证集中各观测对应的概率估计值 probas_pred = model.predict_proba(X_val)[:, 1] # 绘制PR曲线并求得AUC分数 precisions, recalls, _ = precision_recall_curve(y_val, probas_pred) pr_auc_score = auc(recalls, precisions) return pr_auc_score ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值