机器学习中的评估指标、过拟合与数据处理

1. 评估指标概述

在监督式机器学习中,评估模型性能需要使用指标。指标是一个数值,用于衡量模型输出与预期输出的匹配程度。对于分类问题,指标表示模型正确分类的数量占总预测数量的比例;对于回归问题,指标衡量预测值与预期值之间的差异。

1.1 二元分类指标

  • 准确率(Accuracy) :是一个简单且广泛使用的指标,定义为正确预测的数量除以总预测数量。然而,准确率可能具有误导性,因为它没有提供模型在每个类别中的性能信息。例如,在一个垃圾邮件检测模型中,数据集有900封正常邮件和100封垃圾邮件,若模型总是将邮件分类为正常邮件,准确率可达90%,但实际上模型并没有学到任何有用的信息。
  • 精确率(Precision)和召回率(Recall) :为了解决准确率的局限性,引入了精确率和召回率。在二元分类问题中,可能的结果包括真正例(TP)、真负例(TN)、假正例(FP)和假负例(FN)。精确率衡量分类器预测为1时的正确次数,召回率衡量分类器预测为1的次数占实际为1的总数的比例。公式如下:
  • 精确率:$Precision = \frac{TP}{TP + FP}$
  • 召回率:$Recall = \frac{TP}{TP + FN}$
  • F1分数(F1 Score) :如果希望用一个单一指标来描述分类器性能,F1分数是一个不错的选择,它将精确率和召回率结合为一个数值。公式为:$F1 = \frac{2 \times Precision \times Recall}{Precision + Recall}$。高F1分数意味着精确率和召回率都高;低F1分数则需要进一步调查,可能是由于精确率低、召回率低或两者都低。
指标 公式 含义
准确率 $\frac{TP + TN}{TP + TN + FP + FN}$ 正确预测的比例
精确率 $\frac{TP}{TP + FP}$ 预测为正例时的正确率
召回率 $\frac{TP}{TP + FN}$ 实际正例被正确预测的比例
F1分数 $\frac{2 \times Precision \times Recall}{Precision + Recall}$ 综合精确率和召回率

1.2 多分类指标

  • 二元指标扩展 :在多分类问题中,可以对每个类别应用二元指标(准确率、精确率、召回率),采用一对多的二值化方案。
  • 混淆矩阵(Confusion Matrix) :是一个更具信息量的指标,它是一个表格,显示每个类别的正确和错误预测数量。矩阵的对角线单元格表示正确预测的数量,非对角线单元格表示错误。混淆矩阵可以提供模型的整体准确率、每个类别的精确率和召回率以及误分类样本的数量等信息。
graph LR
    classDef startend fill:#F5EBFF,stroke:#BE8FED,stroke-width:2px
    classDef process fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px
    A([开始]):::startend --> B(输入模型预测结果和真实标签):::process
    B --> C(构建混淆矩阵):::process
    C --> D(计算对角线元素之和):::process
    D --> E(计算总样本数):::process
    E --> F(计算整体准确率 = 对角线元素之和 / 总样本数):::process
    C --> G(计算每个类别的精确率和召回率):::process
    C --> H(查看非对角线元素确定误分类情况):::process
    F --> I([结束]):::startend
    G --> I
    H --> I

1.3 回归指标

  • 均方根误差(RMSE) :是误差平方的平均值的平方根。公式为:$RMSE = \sqrt{\frac{1}{N} \sum_{i = 1}^{N} (truth_i - pred_i)^2}$。RMSE对较大的误差和异常值给予更多的权重,并且结果始终为正。取平方根的操作使得不同的RMSE值更容易比较,并且RMSE的单位与输出变量相同。一个好的回归模型具有较低的RMSE。
  • 平均绝对误差(MAE) :是误差绝对值的平均值。公式为:$MAE = \frac{1}{N} \sum_{i = 1}^{N} |truth_i - pred_i|$。与RMSE不同,MAE不会放大误差的大小,其贡献是线性的。一个好的回归模型也具有较低的MAE。
  • 决定系数($R^2$) :是一个介于0(最差情况)和1(最佳情况)之间的数值,表示输入特征对输出的解释程度。如果$R^2$值高(大于0.9),说明特征包含了进行良好预测所需的几乎所有信息;如果值低,可能意味着缺少与输出相关的重要特征。在实际场景中,好的$R^2$值通常在0.8 - 0.95之间。公式为:$R^2 = 1 - \frac{\sum_{i = 1}^{N} (truth_i - pred_i)^2}{\sum_{i = 1}^{N} (truth_i - \overline{truth})^2}$

2. 过拟合和欠拟合

  • 过拟合(Overfitting) :是指模型过于紧密地学习训练数据,开始记忆数据而不是学习如何泛化。可能的原因包括小的和/或有噪声的数据集、包含许多无信息属性的数据集以及模型的描述能力超过数据所需。例如,在预测房价的模型中,加入如墙壁颜色、电视大小和当前房主身高这些无关属性,可能导致模型出现过拟合。解决过拟合的方法包括选择更简单的模型或约束模型、减少数据属性的数量、收集更多数据以及减少数据中的噪声。
  • 欠拟合(Underfitting) :与过拟合相反,当模型无法学习到数据的潜在模式,表现出较差的性能时,就会发生欠拟合。这可能是由于模型过于简单或数据缺少重要特征。例如,使用线性模型来学习二次关系或仅根据房屋的建造年份来预测房价。解决欠拟合的方法包括选择更复杂的模型或释放模型的约束、增加数据属性的数量、收集更多数据以及减少数据中的噪声。
问题 原因 解决方法
过拟合 小的和/或有噪声的数据集、数据集有许多无信息属性、模型描述能力过强 选择更简单的模型或约束模型、减少数据属性数量、收集更多数据、减少数据噪声
欠拟合 模型过于简单、数据缺少重要特征 选择更复杂的模型或释放约束、增加数据属性数量、收集更多数据、减少数据噪声

3. 训练集、验证集和测试集

在开发机器学习项目时,为了避免模型过拟合,通常将数据分为训练集、验证集和测试集。
- 训练集(Training Set) :用于训练模型,通常占样本的50% - 70%。模型从这些数据中学习并调整参数以最小化误差。
- 验证集(Validation Set) :模型不使用验证集进行学习,而是选择在该未见过的数据上产生最高指标(如准确率)的模型参数。验证集通常占数据的10% - 20%,如果不需要调整模型参数,则验证集可以省略。
- 测试集(Test Set) :用于评估模型的实际性能,是模型在训练和验证过程中从未见过的数据。测试集通常占数据的10% - 30%,在测试集上报告的指标是我们期望在现实世界中看到的值。

graph LR
    classDef startend fill:#F5EBFF,stroke:#BE8FED,stroke-width:2px
    classDef process fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px
    A([原始数据]):::startend --> B(划分训练集、验证集、测试集):::process
    B --> C(使用训练集训练模型):::process
    C --> D(使用验证集选择最佳参数):::process
    D --> E(使用测试集评估模型):::process
    E --> F([得到模型最终性能指标]):::startend

使用验证集和测试集的原因包括:
- 防止过拟合:验证集可以显示模型在未见过的数据上的性能,帮助防止模型过于适应训练数据。
- 优化参数:验证集有助于调整模型的参数,选择最佳的设置。
- 消除偏差:测试集提供了对模型性能的无偏评估,因为它没有用于训练或优化模型,能给出模型在现实场景中的真实表现。

4. 特征工程

特征工程是将原始数据转换为更适合机器学习模型的有效输入集的过程。原始数据可能存在噪声、冗余或无用的情况,这些会对模型的学习过程产生负面影响。通过将数据转换为更适合模型的格式,可以显著提高预测的准确性。常见的特征工程步骤包括:
- 将音频信号转换为其频率分量。
- 从时间序列数据中提取统计矩(如均值、方差和标准差)或频谱值(如能量和熵)。
- 将输入数据缩放到固定范围(如[0, 1]或[-1, 1]),以防止某些特征主导模型的预测。

在处理高维数据时,需要注意数据的维度。过多的数据可能会损害学习过程并导致结果不佳,这被称为“维度灾难”。此外,更多的输入数据通常会导致更大、更慢的模型。在TinyML的上下文中,为了在将分类器部署到设备时节省宝贵的资源,希望模型尽可能精简。因此,在处理高维数据的项目中,可以应用降维算法将不同的特征组合成较低的集合,或者进行特征选择,丢弃对分类结果贡献不大的特征。一个特征可能对分类/回归任务无用的原因包括:与另一个特征高度相关,使其冗余;不能区分不同的类别或输出。

5. 数据类型 - 表格数据

表格数据是一种结构化的数据,组织成行和列,类似于电子表格或表格。其特点包括:
- 结构化数据:每行和每列都有特定的含义和格式。
- 行代表样本:每行表示一个单独的样本或观察值,如学生、客户、交易或产品。
- 列代表特征:每列表示一个特征或变量,如考试成绩、年龄、收入、产品类别或购买金额。
- 同质数据:每列的数据类型相同,如数值、分类或文本。
- 固定模式:表格的结构,包括列的数量和数据类型,是固定且明确的。
- 行独立性:每行(样本)与其他行相互独立,可以自由重新排列行的顺序而不影响每行所提供的信息。

在物联网和物理计算中,传感器的读数如果单独考虑,每次只考虑一个,也可以被视为表格数据。例如,使用多气体气味传感器检测不同类型的酒精饮料,传感器每秒输出多种气体的浓度,只考虑读取传感器时的浓度,这就是表格数据。在嵌入式项目中,可能处理的表格数据还有很多其他例子。

6. 特征工程的操作步骤与考量

6.1 特征工程操作流程

特征工程通常遵循以下操作步骤:
1. 数据理解 :深入了解原始数据的来源、结构、含义以及可能存在的问题。例如,对于传感器采集的数据,要清楚传感器的工作原理、采集频率等。
2. 数据清洗 :处理数据中的缺失值、异常值和噪声。可以使用均值、中位数填充缺失值,通过统计方法识别并处理异常值。
3. 特征提取 :从原始数据中提取有价值的特征。如将音频信号转换为频率分量,从时间序列数据中提取统计矩或频谱值。
4. 特征转换 :对提取的特征进行转换,使其更适合模型。常见的转换包括数据缩放、编码分类变量等。
5. 特征选择 :评估每个特征的重要性,选择对模型性能贡献大的特征,去除冗余和无关的特征。

6.2 特征选择的具体方法

特征选择可以采用以下几种常见方法:
- 过滤法 :根据特征的统计特性,如方差、相关性等,选择满足一定条件的特征。例如,计算特征与目标变量的相关性,保留相关性较高的特征。
- 包装法 :将特征选择过程与模型训练相结合,通过尝试不同的特征子集,选择使模型性能最优的子集。
- 嵌入法 :在模型训练过程中自动进行特征选择,如某些机器学习算法在训练时会对特征进行权重分配,根据权重筛选重要特征。

6.3 特征工程的注意事项

在进行特征工程时,需要注意以下几点:
- 避免信息泄露 :在特征提取和转换过程中,要确保不会将测试集的信息泄露到训练集中,否则会导致模型过拟合,无法在实际应用中取得良好效果。
- 保持数据一致性 :在对不同数据集进行特征工程时,要保证处理方法的一致性,避免因处理方式不同导致数据分布差异,影响模型性能。
- 结合业务知识 :充分利用业务领域的知识,选择与业务目标相关的特征。例如,在预测房价时,考虑房屋的地理位置、周边配套设施等因素。

7. 不同数据类型的处理策略

7.1 表格数据处理

表格数据是机器学习中常见的数据类型,处理时可以采用以下策略:
- 数据标准化 :对于数值型特征,进行标准化处理,使不同特征具有相同的尺度,避免某些特征因数值范围过大而主导模型。常见的标准化方法有Z-score标准化和Min - Max标准化。
- 编码分类变量 :对于分类特征,需要将其转换为数值型数据。常用的编码方法有独热编码(One - Hot Encoding)和标签编码(Label Encoding)。
- 处理缺失值 :根据数据的特点和业务需求,选择合适的方法处理缺失值,如删除含缺失值的样本、填充均值或中位数等。

处理方法 适用场景 示例
Z - score标准化 特征服从正态分布 将身高数据进行标准化,使其均值为0,标准差为1
Min - Max标准化 需要将特征缩放到固定范围 将图像像素值缩放到[0, 1]范围
独热编码 分类变量取值无大小顺序 对颜色(红、绿、蓝)进行编码
标签编码 分类变量取值有大小顺序 对学历(小学、中学、大学)进行编码

7.2 其他数据类型的处理思路

除了表格数据,机器学习还会处理其他类型的数据,如文本数据、图像数据和音频数据。处理思路如下:
- 文本数据 :需要进行分词、去除停用词、词向量化等操作。常用的词向量化方法有词袋模型(Bag of Words)和词嵌入(Word Embedding)。
- 图像数据 :通常需要进行图像预处理,如调整大小、归一化、增强等。深度学习模型在图像数据处理中表现出色,常见的模型有卷积神经网络(CNN)。
- 音频数据 :进行音频特征提取,如MFCC(Mel - Frequency Cepstral Coefficients),然后使用合适的模型进行分类或预测。

graph LR
    classDef startend fill:#F5EBFF,stroke:#BE8FED,stroke-width:2px
    classDef process fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px
    A([原始数据]):::startend --> B(数据类型判断):::process
    B --> C{表格数据}:::process
    B --> D{文本数据}:::process
    B --> E{图像数据}:::process
    B --> F{音频数据}:::process
    C --> G(数据标准化、编码分类变量、处理缺失值):::process
    D --> H(分词、去除停用词、词向量化):::process
    E --> I(图像预处理、使用CNN模型):::process
    F --> J(音频特征提取、选择合适模型):::process
    G --> K([处理后的表格数据]):::startend
    H --> L([处理后的文本数据]):::startend
    I --> M([处理后的图像数据]):::startend
    J --> N([处理后的音频数据]):::startend

8. 模型评估与优化的综合应用

8.1 不同类型模型的评估重点

在实际应用中,不同类型的模型评估重点有所不同:
- 分类模型 :重点关注准确率、精确率、召回率和F1分数等指标。对于不平衡数据集,要特别注意精确率和召回率的平衡,避免只追求高准确率而忽略了模型在少数类上的性能。
- 回归模型 :主要评估指标为均方根误差(RMSE)、平均绝对误差(MAE)和决定系数($R^2$)。一个好的回归模型应具有较低的RMSE和MAE,较高的$R^2$值。

8.2 模型优化的一般步骤

模型优化可以按照以下步骤进行:
1. 初步训练 :使用训练集对模型进行初步训练,得到初始的模型参数。
2. 模型评估 :使用验证集对模型进行评估,根据评估指标发现模型存在的问题,如过拟合或欠拟合。
3. 调整参数 :根据评估结果,调整模型的参数。如果模型过拟合,可以尝试减少模型复杂度;如果欠拟合,可以增加模型复杂度或调整特征。
4. 重复评估和调整 :多次重复步骤2和3,直到模型在验证集上的性能达到满意的水平。
5. 最终评估 :使用测试集对优化后的模型进行最终评估,得到模型在实际应用中的性能指标。

8.3 案例分析

以一个简单的房价预测回归模型为例,说明模型评估与优化的过程:
- 数据准备 :收集房屋相关的特征数据,如面积、房间数、房龄等,以及对应的房价作为目标变量。将数据划分为训练集、验证集和测试集。
- 模型训练 :选择合适的回归模型,如线性回归、决策树回归等,使用训练集进行训练。
- 初步评估 :使用验证集对训练好的模型进行评估,计算RMSE、MAE和$R^2$值。如果发现$R^2$值较低,说明模型可能存在欠拟合问题。
- 优化调整 :尝试增加更多的特征,如周边配套设施、交通便利性等,或者选择更复杂的模型,如随机森林回归。
- 最终评估 :使用测试集对优化后的模型进行最终评估,得到模型在实际应用中的性能指标,判断模型是否满足需求。

9. 总结

机器学习是一个复杂而又充满挑战的领域,涉及到数据处理、模型选择、评估和优化等多个环节。在实际应用中,需要根据具体问题选择合适的方法和技术。
- 指标评估 :不同类型的问题(分类、回归)需要使用不同的评估指标,如准确率、精确率、召回率、F1分数、RMSE、MAE和$R^2$等,通过合理使用这些指标可以准确评估模型的性能。
- 过拟合和欠拟合 :要注意避免模型过拟合和欠拟合的问题,通过选择合适的模型复杂度、数据处理方法和特征工程技术,可以有效解决这些问题。
- 数据处理 :特征工程和数据类型处理是机器学习中至关重要的环节,通过合理的特征提取、选择和转换,可以提高模型的性能。
- 模型优化 :模型评估和优化是一个迭代的过程,需要不断调整模型参数和特征,以达到最佳的性能表现。

希望通过本文的介绍,能帮助读者更好地理解机器学习中的关键概念和技术,在实际项目中取得更好的效果。

Logo

码道开发者社区,聚焦华为云码道 CodeArts 代码智能体,沉淀 Agent、Skill、鸿蒙开发实战内容,供开发者查阅资料、交流技术、分享工程实践

更多推荐