数据分类&回归

分类与回归:概述

● 分类与回归

    ■ 监督机器学习的核心任务

    ■ 训练:在数据集中找到依赖变量的值与独立变量(特征)的值之间的模式

    ■ 预测:使用这些模式为新的/未见过的数据的依赖变量分配值

● 分类与回归的区别

    ■ 分类:依赖变量是分类的

    ■ 回归:依赖变量是连续的

分类与回归:例子

● 预测公寓价格(回归任务)

    ■ 帮助卖家和买家做出更好的决定

    ■ 理解属性对公寓价格的重要性

● 健康分析:心脏病预测

    ■ 诊断和治疗支持系统

    ■ 识别最重要的风险因素

● 情感分析 / 观点挖掘(基于文本)

● 自动驾驶车辆

    ■ 输入:图像和传感器数据

● 回归任务,例如:

    ■ 加速度

    ■ 转向角

    ■ 事件预测

● 分类任务,例如:

    ■ 障碍物检测

    ■ 路标识别

监督训练/学习: 基本设置

步骤:训练数据,测试数据 -- 模型(分类 / 回归)--> 预测 <-- 评估 --> 真实值

● 给定:数据集 D,由一对 {(x, y)} 组成

    ■ x — 特征(独立变量)

    ■ y — 标签(依赖变量)

● 将数据集 D 分为:

    ■ D_{train} — 用于训练模型的数据

    ■ D_{test}  — 用于评估模型的数据

    ■ 重要:D_{train} \cap D_{test} =\phi (测试数据在训练过程中不允许使用)

● 模型 — 参数化函数 h(x, Θ) = y

    ■ 将输入空间(特征)映射到输出空间(标签)

    ■ Θ — 模型的可训练/可学习参数 (注意:并非所有模型都是参数化的,KNN)

● 模型选择 — 选择一“族”函数 h(x, Θ) = y

    ■ K-最近邻,决策树,线性模型,神经网络,…

● 训练 / 学习

    ■ 系统地找到 Θ 的最佳值的过程

    ■ \Theta _{best} ⇔ 特征和标签之间的最佳映射

分类与回归 —— 评估

● 回归:数值的直接比较 常见的:均方根误差(RMSE):RMSE= \sqrt \frac{\sum^N_{i=1}y_i-y_i^2}{N}

y_i 预期值, y_i^2真实值

● 分类

    ■ 基础情况:二元分类(2个标签:0 或 1)

    ■ 示例:COVID-19 测试

分类:评估 — 混淆矩阵

● 真正例(TP):被正确预测为正类的正类数量

● 真负例(TN):被正确预测为负类的负类数量

● 假正例(FP):被错误预测为正类的负类数量

● 假负例(FN):被错误预测为负类的正类数量

分类:评估 — 流行的指标

● 准确率  Accuracy = \frac{TP+TN}{TP+FP+TN+FN}

Accuracy:衡量模型的整体正确率。

  • 很高:模型在分类任务中的总体表现很好,正确地预测了大部分的样本。
  • 很低:模型的总体预测性能很差,经常做出错误的预测。

● 敏感性  Sensitivity=\frac{TP}{TP+FN} 

Sensitivity/Recall:衡量模型对阳性样本的识别能力。

  • 很高:模型很好地识别出了实际阳性的样本,几乎没有错过任何阳性样本。
  • 很低:模型经常错过真正的阳性样本,这可能导致很多假阴性。

● 特异性  Specificity=\frac{TN}{TN+FP}

Specificity:衡量模型对阴性样本的识别能力。

  • 很高:模型很好地识别出了实际阴性的样本,几乎没有误报。
  • 很低:模型经常将实际的阴性样本错误地预测为阳性,导致很多假阳性。

● 精确度  Precision=\frac{TP}{TP+FP}

Precision:衡量模型预测为阳性的样本中有多少是真正的阳性。

  • 很高:模型预测为阳性的样本中,大部分确实是阳性。
  • 很低:模型预测为阳性的样本中,很多实际上是阴性,导致很多假阳性。

● 召回率  Recall=\frac{TP}{TP+FN}

Sensitivity/Recall:衡量模型对阳性样本的识别能力。

● F1 分数: 精确度和召回率的调和平均  F1=2 \cdot \frac{Precision \cdot Recall}{Precision +Recall}

F1 Score:是 Precision 和 Recall 的调和平均值,用于在两者之间找到平衡。

  • 很高:模型在Precision和Recall之间达到了很好的平衡,整体性能很好。
  • 很低:模型在Precision和Recall之间的平衡性很差,可能导致很多假阳性或假阴性。

举例:

1. 医疗诊断:

场景:假设我们有一个用于检测某种罕见但严重的疾病的测试。

  • 高Sensitivity (灵敏度):几乎所有真正患有该疾病的患者都被正确地识别出来。这是非常重要的,因为错过一个真正的阳性可能导致患者没有得到及时的治疗。

  • 低Precision (精确度):许多被诊断为阳性的患者实际上并没有患病。这可能导致不必要的焦虑和进一步的医疗检查。

2. 垃圾邮件过滤器:

场景:电子邮件系统中的垃圾邮件过滤器。

  • 高Accuracy (准确率):大部分邮件,无论是垃圾邮件还是合法邮件,都被正确地分类。

  • 低Recall (召回率):许多真正的垃圾邮件都没有被过滤器识别,导致用户的收件箱被垃圾邮件充斥。

3. 信用卡欺诈检测:

场景:银行使用算法来检测可能的信用卡欺诈活动。

  • 高Specificity (特异性):几乎所有合法的交易都被正确地识别,用户很少收到关于合法交易的误报警告。

  • 低F1 Score (F1得分):由于假阳性和假阴性都很高,模型在Precision和Recall之间的平衡性很差,导致银行可能错过一些真正的欺诈活动,同时也误报了一些合法的交易。

总结:

在医疗诊断的例子中,我们更关心Sensitivity,因为错过一个真正的阳性可能导致严重的后果。而在垃圾邮件过滤器的例子中,我们可能更关心Accuracy和Recall,因为我们不希望错过任何重要的邮件,同时也不希望收件箱被垃圾邮件充斥。在信用卡欺诈检测的例子中,我们希望F1 Score尽可能高,以确保模型在Precision和Recall之间达到良好的平衡。

分类:评估 — 为什么有这么多的衡量标准?

● 问题:(高度)不平衡的数据集

● 使用案例:COVID-19 测试

    ■ 在一个人群中,大多数人都没有被感染

    ■ 假设一个测试总是(!)返回“阴性”

➜ 尽管测试“无用”,但值非常高

对比精确度和召回率

● 观察:FP 和 FN 并不总是同样的问题  Precision=\frac{TP}{TP+FP} ; Recall=\frac{TP}{TP+FN}

● 例子:心脏病预测

召回率 > 精确度
    ■ 坏:错误分类高风险人群

    ■ 还可以:错误分类健康人群

● 例子:新闻文章分类 (例如,用于像 Google News 这样的搜索引擎)

召回率 < 精确度

    ■ 坏:展示错误类别的文章

    ■ 可以:在结果中遗漏相关文章

举例

1. 医疗诊断:

场景:假设一个医疗测试用于检测某种严重的疾病。

  • False Negative (FN):测试结果为阴性,但实际上患者患有该疾病。这意味着患者可能会错过关键的治疗时机,导致疾病恶化或其他严重后果。

  • False Positive (FP):测试结果为阳性,但实际上患者并没有患病。这可能导致患者经历不必要的压力、进一步的测试或治疗,但不太可能导致直接的生命危险。

在这种情况下,FN明显比FP更为严重,因为它可能导致患者失去生命。

2. 安全监控系统:

场景:假设一个安全监控系统用于检测入侵者。

  • False Negative (FN):系统没有检测到入侵者。这意味着入侵者可以自由进入并可能造成损害或盗窃。

  • False Positive (FP):系统错误地认为有入侵者。这可能导致不必要的警报或安全人员的干扰,但不会导致实际的损害。

在这种情况下,错过真正的威胁(FN)比误报(FP)更为严重。

3. 垃圾邮件过滤器:

场景:电子邮件系统中的垃圾邮件过滤器。

  • False Negative (FN):一个垃圾邮件没有被过滤器识别并进入了用户的收件箱。这可能导致用户受到欺诈或恶意软件的威胁。

  • False Positive (FP):一个重要的、合法的邮件被错误地标记为垃圾邮件并被移至垃圾邮件文件夹。用户可能错过重要的信息或机会。

在这种情况下,根据具体情境,FN和FP都可能造成问题,但错过重要邮件(FP)可能对用户有更大的影响。

总结:

在不同的应用场景中,FN和FP可能带来不同的后果。选择优化哪个指标取决于具体的应用和潜在的风险。在某些情境中,减少FN可能比减少FP更为关键。

分类:评估 — 数值类别分数

● 到目前为止的假设: \hat{y} 是类别标签

● 许多模型的输出: \hat{y} 是类别分数

    ■ 例如,一个类的概率 

➜ 阈值化

    ■ 使用阈值将 \hat{y} 转换为二进制变量 0/1 

● 不同的阈值会产生不同的结果

➜ 问题:应该使用哪个阈值? — 答案:全部试一遍!

接收者操作特性(ROC)

● 绘制真正例率(敏感性)与假正例率(1-特异性)的图表

    ■ 为每个有意义的阈值 t 绘制值(有意义 = 对结果有影响)

ROC 曲线是一个二维图,其中横轴表示假阳性率(False Positive Rate,FPR),纵轴表示真阳性率(True Positive Rate,TPR)。ROC 曲线显示了在不同的分类阈值下,模型的 TPR 和 FPR 之间的关系。

真阳性率 (TPR):也称为召回率,是真阳性样本数与所有实际阳性样本数之比。TPR=TP/TP+FN 假阳性率 (FPR):是假阳性样本数与所有实际阴性样本数之比。 FPR=FP/FP+TN

● 使用 AUROC(或 AUC)量化分类器的质量

    ■ 接收者操作特性曲线下的面积

    ■ 随机分类器的 AUROC:0.5

AUC 是 ROC 曲线下的面积。AUC 的值介于 0 和 1 之间,其中 1 表示完美的分类器,0.5 表示随机猜测的分类器。AUC 越高,分类器的性能越好。

ROC / AUROC — 实际例子

● IRIS 数据集

    ■ 3类鸢尾植物

    ■ 每类50个样本

    ■ 4个连续特征 (花萼/花瓣的长度/宽度)

● ROC / AUROC

    ■ 样本越多,阈值越多

    ■ ROC 更加平滑

    ■ 阈值通常被省略

为什么使用ROC和AUC?

  1. 不依赖于特定的决策阈值:与其他指标(如准确率)相比,ROC和AUC不依赖于特定的分类阈值,因此它们为我们提供了一个更全面的模型性能视图。

  2. 不平衡数据:在不平衡类别的情况下,准确率可能会误导。在这种情况下,ROC和AUC是更好的性能指标。

  3. 比较模型:AUC为我们提供了一个简单的数字来比较不同模型的性能。

分类:评估 — 超过2个类别

● 示例:3个类别,每个类别50个样本

多类评估 — 一 vs 其余混淆矩阵

2-vs-Rest:

  • 正类为2,其他类别(1和0)为负类。
  • 正类和正类交互的数量是8。
  • 正类和负类交互的数量是6 + 0 = 6。
  • 负类和正类交互的数量是3 + 4 = 7。
  • 负类和负类交互的数量是12 + 1 + 2 + 14 = 29。

1-vs-Rest:

  • 正类为1,其他类别(2和0)为负类。
  • 正类和正类交互的数量是12。
  • 正类和负类交互的数量是3 + 1 = 4。
  • 负类和正类交互的数量是6 + 2 = 8。
  • 负类和负类交互的数量是8 + 0 + 4 + 14 = 26。

0-vs-Rest:

  • 正类为0,其他类别(2和1)为负类。
  • 正类和正类交互的数量是14。
  • 正类和负类交互的数量是4 + 2 = 6。
  • 负类和正类交互的数量是0 + 1 = 1。
  • 负类和负类交互的数量是8 + 6 + 3 + 12 = 29。

一 vs 其余 — 微平均

一 vs 其余 — 宏平均

一 vs 其余 — 宏平均 vs. 微平均

● 两种方法都使用一对其余混淆矩阵

    ■ 所有介绍的指标都适用(包括 ROC/AUROC)

● 微平均

    ■ 对所有一vs其余混淆矩阵的 TP、FP、FN、TN 值进行平均

    ■ 偏向于较大的类别(因为是对计数进行平均)

● 宏平均

    ■ 对每个一对其余混淆矩阵得出的指标进行平均

    ■ 所有类别都平等对待(因为指标都经过了归一化)

● 示例:IRIS 数据集

    ■ 3类鸢尾植物

    ■ 每类50个样本

    ■ 4个连续特征 (花萼/花瓣的长度/宽度)

KNN--K-最近邻算法

K-最近邻算法(KNN)

● KNN 背后的直觉:需要:相似性/距离的概念

    ■ 未见过的数据点 x 的标签来自于 x 的 k 个最近邻居的标签

    ■ 相似的数据点 ➜ 相似的标签

● 例子

    ■ 未见过的(灰色)数据点的标签/颜色应该是什么?

KNN 用于分类

● “训练”

    ■ 记住训练数据

● 对未见过的点 x_i 的预测

    ■ 计算到所有 训练数据点 xj 的距离 ,

d(p,q)= \sqrt {\sum^d_i(q_i-p_i)^2}例如:欧几里得距离,d = #特征数

    ■ 获取 k 个最近邻居

    ■ x_i 的标签 = 所有 k 个最近邻居中最频繁的标签

k 通常选择为奇数,以最小化出现平局的机会

KNN 用于分类 — 距离度量

● 不同距离度量的例子

    ■ 欧几里得距离

    ■ 曼哈顿距离

    ■ 切比雪夫距离

● 其他度量,例如:

    ■ 余弦相似度

    ■ 杰卡德相似度

    ■ ...

    ■ 用户定义的度量

KNN 用于分类 — 示例

IRIS 数据集

    ■ 3个类别,每个类别50个样本

    ■ 4个连续特征,但只 使用了2个:(花萼的长度和宽度)

● 基本的探索性数据分析

    ■ “红色”类别分离得很好

    ■“绿色”和“蓝色”类别之间有很多重叠

● 常见结果

    ■ 不同的 k 会产生不同的结果

    ■ (非常)小的 k — 结果对噪声和异常值非常敏感

    ■ 大的 k — 没有足够的能力来正确分离类别

    ■ 非常大的 k — 训练数据中最频繁的类别开始占主导地位

1-最近邻:Voronoi镶嵌

● 1-NN的决策边界=来自Voronoi镶嵌

    ■ 将空间分割成单元格

    ■ 单元格:最接近单个数据点的一组点

“红色”和“蓝色”类别之间的决策边界

KNN 用于回归

● “训练”

    ■ 记住训练数据

● 对未见过的点 xi 的预测

    ■ 计算到所有 训练数据点 xj 的距离,

d(p,q)= \sqrt {\sum^d_i(q_i-p_i)^2}例如:欧几里得距离,d = #特征数

    ■ 获取 k 个最近邻居

    ■ x_i 的标签 = 所有 k 个最近邻居的分数的平均值

KNN 用于回归 — 示例

● “年龄与体重”数据集

    ■ 257名男性的年龄和体重

    ■ 200个训练样本,57个测试样本

● 常见结果(再次)

    ■ 不同的 k 会产生不同的分数

    ■ (非常)小的 k — 预测分数对噪声和异常值非常敏感

    ■ 大的 k — 对太多邻居取平均

    ■ 非常大的 k — 预测分数趋向于平均值

k 值的选择 — 总结

● k 太小 -- 过拟合的风险

    ■ 预测对噪声/异常值敏感

    ■ 非常不均匀的决策边界 (或回归线)

● k 太大 -- 欠拟合的风险

    ■ 无法捕捉局部模式

    ■ 非常平滑的决策边界 (或回归线)

优点 & 缺点...及注意事项

优点 & 缺点...及注意事项

● 优点

    ■ 非常简单和直观的算法 — 但性能常常出人意料地好!

    ■ 通用算法 — 只要点之间的距离可以“有意义地”测量,就可以应用

    ■ 可以产生任意形状的决策边界

    ■ 无训练时间

● 缺点

    ■ 在测试时找到邻居可能会很慢 (实践中:数据结构和辅助算法用于加速 k-NN 搜索)

    ■ 需要存储所有训练数据

● 注意事项

    ■ “...只要点之间的距离可以‘有意义地’测量,就可以应用”

注意事项 1:

特征值(范围,大小)

● 欧几里得距离对属性值的范围和大小敏感

数据归一化

● Z-分数归一化,例如: x_i^{weight} = \frac{x_i^{weight} - \mu^{weight} }{\sigma^{weight} }

  • x_i^{weight} :是第i个观测值的“weight”特征的标准化值。
  • \mu^{weight}:是“weight”特征的均值。
  • \sigma^{weight}:是“weight”特征的标准差。标准差 = sqrt(方差)

● 最小-最大归一化,例如:x_i^{weight} = \frac{x_i^{weight} - min(x_i^{weight}) }{max(x_i^{weight})-min(x_i^{weight}) }

数据归一化 —— 直观展示

● 187名女性(红色)和165名男性(蓝色)的(体重,身高)数据点

注意:归一化假设所有特征都同样重要。但这可能并不总是正确的!

注意事项 2:

维数灾难

● 高维度的效应(即,特征众多)

    ■ 数据点往往不会靠得很近

    ■ 点与点之间的平均距离趋于一致

● 直觉

    ■ 假设 N 个数据点均匀分布 在一个具有 d 维度的单位立方体内

    ■ 设 L 为包含数据点的 k-NN 的最小立方体的边长 L^d\approx \frac{k}{N} \Rightarrow L\approx (\frac{k}{N})^{\frac{1}{d}}

立方体与k-NN几乎占据了整个单位立方体!

维度诅咒

● 在不同数量的维度下,1000个随机数据点之间的成对距离分布

注意事项 3:非数值数据

● 实际应用中:特征通常是分类的

    ■ 有序的 —— 教育水平,成绩等。

    ■ 无序的 —— 性别,婚姻状况等。

● 基本方法:将分类特征转换为数值特征

    ■ 允许直接使用常见的距离度量

    ■ 不会自动产生良好的结果

● 二元特征

    ■ 分类数据的特殊情况

    ■ 转换为二进制变量 0/1 以表示不存在/存在

● 有序特征

    ■ 利用特征值的自然顺序

    ■ 在保留其原始顺序的同时,将其转换为数值

● 无序特征(具有n个不同的值)

    ■ 独热编码:将无序特征转换为N个二元特征

    ■ 将每个新的二元特征转换为二进制变量0/1,以表示不存在/存在

    ■ 增加了维度! (特别是当N非常大时)

● 讨论 / 限制

    ■ 独热编码增加了数据的维度

    ■ 有序值之间的距离通常不直观

5(PhD)-4(Masters) ?= 2(College)- 1 (Poly)

    ■ 通常需要数据标准化 (特别是与数值特征结合时)

● 替代方法:自定义距离度量

    ■ 设计适当量化分类值之间距离的度量

    ■ 通常非常特定于给定的数据集和应用上下文。

注意事项 4:语义相似性 vs. 低级相似性

● 非结构化数据 (文本,图像,视频,音频)

    ■ 对象通常不仅仅是 其各部分的总和

● 示例(狗粮广告)

    ■ 像素级相似性大; 易于计算

    ■ 语义相似性小

监督训练/学习 —— 扩展设置

● 回顾基本设置:训练数据 + 测试数据

● 构建一个好的分类器或回归器

    ■ 找到最佳的数据预处理步骤 ➜ 需要迭代评估

    ■ 找到最佳模型(模型选择)➜ 需要迭代评估

    ■ 找到最佳超参数值 ➜ 需要迭代评估

● 重要:不允许为此使用测试数据!

    ■ 测试数据应该包含真正未见过的数据

    ■ 当用于优化/调整模型时,测试数据不再是未见过的 (例如,对于不同的训练-测试分割,结果可能会有所不同)

使用验证数据的训练和评估过程

● 常见的数据分割以确保结果的普遍适用性

    ■ 只在最后使用测试数据来评估最终模型的性能

    ■ 使用验证数据进行模型选择和超参数调整

K-折交叉验证(众多验证技术中的一种)

● k-折交叉验证的核心思想

    ■ 将训练数据分成k个大小相等的块(例如,k=10)

    ■ 使用(k-1)个块进行训练,剩下的块用于评估

    ■ 用不同的排列重复k轮

● K-折交叉验证的优点:

  1. 更可靠的性能评估:由于模型在 K 个不同的训练/验证集上进行了评估,得到的性能指标更为稳定和可靠。

  2. 减少过拟合:通过多次训练和验证,可以减少模型对特定数据子集的过拟合。

  3. 充分利用数据:所有的数据都被用作了训练和验证,这在数据量有限的情况下尤其有价值。结果之间的方差是有用的指标。

● K-折交叉验证的缺点:

  1. 计算成本高:需要训练和验证模型 K 次,这可能需要更多的计算时间和资源。

  2. 不适用于所有数据分布:如果数据集中的某些类别样本很少,简单的K-折交叉验证可能不会在每个折中都反映这些类别。在这种情况下,可以使用分层 K-折交叉验证,确保每个折中都有各个类别的代表样本。

通过标准化的信息泄露

● 重要指南

    ■ 在将数据集分割为训练和测试数据之前,不要进行标准化!

    ■ 对训练和测试数据进行标准化,但只基于训练数据!


总结

● 分类器的评估(对于回归器来说很直接)

    ■ 不同的度量有不同的解释

    ■ 度量的适用性取决于数据和任务

● K-最近邻(KNN)分类器/回归器

    ■ 非常直观的监督学习模型

    ■ 对于(非常)大的数据集适用性有限 (在预测时而不是在训练时进行重计算)

    ■ 超参数k的选择重要,以解决过拟合和欠拟合的风险

● 1. k 值过小:

  • 噪声的影响增大:当 k=1 时,算法完全依赖于训练数据中的单个最近邻居。这可能导致模型对噪声和异常值非常敏感,因为它可能会基于一个噪声点做出决策。

  • 高方差:由于模型过于依赖于训练数据中的局部特征,它可能会有很高的方差和较低的偏差。这意味着模型可能在训练数据上表现得很好,但在新的、未见过的数据上表现得很差。

● 2. k 值过大:

  • 计算成本增加:考虑更多的邻居需要更多的计算。

  • 可能忽略局部模式:当 k 值非常大时,算法可能会考虑许多远离查询点的邻居,这可能导致忽略数据的局部模式。

  • 高偏差:当 k 值增加时,决策边界可能会变得更加平滑。这可能导致模型的偏差增加,因为它可能过于简化问题,不能捕捉到数据中的细微差异。

  • 受到主导类的影响:在不平衡的数据集中,如果 k 值过大,那么模型可能会受到主导类的影响。例如,如果某个类的样本数量远远大于其他类,那么大的 k 值可能会导致这个主导类对预测结果产生过大的影响。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值