机器学习(三)——模型评估方法

3.1 模型评估方法概述

机器学习模型的评估方法主要目的是了解模型在训练数据上的表现,以确定模型是否有过拟合或欠拟合的问题,以及模型在新数据上的泛化能力
机器学习模型的评估方法涉及到多个方面,包括损失函数、训练误差、验证误差、测试误差、交叉验证、模型选择等。通过综合考虑这些因素,可以优化模型的性能,并选择具有较好泛化能力的模型。

3.1.1 特征工程预备知识

3.1.1.1 特征工程

特征工程:将原始数据转换成模型的训练数据的过程,目的是获取更好的数据特征使模型逼近上限,作用是让模型性能上升
特征构建、特征提取、特征选择构成

3.1.1.2 特征构建

从原始数据中人工找出一些有意义的特征,当原有特征不能被直接建模时,构建新特征,常用的数据标准化方法有:
归一化(最大-最小规范化)

x’= x − min ⁡ ( x ) max ⁡ ( x ) − min ⁡ ( x ) \frac {x-\min (x)}{\max (x)-\min (x)} max(x)min(x)xmin(x)

目的是将特征数据伸缩变化使各个特征对目标变量影响一致

Z-Score标准化

x’= x − μ σ \frac{x-\mu }{\sigma } σxμ

处理后均值保证为0,方差为1

3.1.1.3 特征提取

自动构建新特征,将原始数据转换为有物理/统计意义的特征,主要有以下方法:

PCA(Principal Component Analysis)/主成分分析法:
找到数据主成分,并利用其来代表原始数据,从而做到降维
ICA(Independent Component Analysis)/独立成分分析:
获取数据之间相互独立的属性

3.1.1.4 特征选择

从给定特征集合选相关特征子集、目的是去除无关特征简化模型降低计算复杂度,确保不丢失特征。

3.1.2 混淆矩阵预备知识

3.1.2.1 混淆矩阵

混淆矩阵(Confusion Matrix) 是在机器学习中,用于对分类模型的性能进行评估的一种方法。混淆矩阵展示了模型在分类任务中的预测结果与实际标签之间的对应关系。以下是一个混淆矩阵的模板:

真实/预测
TPFN
FPTN

3.1.2.2 混淆矩阵评价指标

3.1.2.2.1 准确率(Accuracy)

分类器对样本的判定能力,将样本预测正为真实正预测负为真实负的能力(值在0-1,越大越好)
A c c u r a c y = T P + T N T P + T N + F P + F N Accuracy=\frac{TP+TN}{TP+TN+FP+FN} Accuracy=TP+TN+FP+FNTP+TN

3.1.2.2.2 召回率(Recall)

预测为正占实际为正的样本的比例(值在0-1,越大越好)
R e c a l l = T P T P + F N Recall=\frac{TP}{TP+FN} Recall=TP+FNTP

3.1.2.2.3 精准率(Precision)

真实为正占预测为正的比例(值在0-1,越大越好)
P r e c i s i o n = T P T P + F P Precision=\frac{TP}{TP+FP} Precision=TP+FPTP

3.1.2.2.4 F1 score

衡量二分类模型精确度的指标,是模型精准率和召回率的调和均值(值在0-1,越大越好)
F 1 = 2 P r e c i s i o n ∗ R e c a l l P r e c i s i o n + R e c a l l F1=\frac{2Precision*Recall}{Precision+Recall} F1=Precision+Recall2PrecisionRecall

3.1.2.2.5 PR曲线

PR曲线中的P代表的是precision(精准率),R代表的是recall(召回率),其代表的是精准率与召回率的关系,一般情况下,将recall设置为横坐标,precision设置为纵坐标。
绘制步骤:

PR曲线的横坐标为召回率R,纵坐标为精确率P
1.将预测结果按照预测为正类概率值排序
2.将阈值由1开始逐渐降低,按此顺序逐个把样本作为正例进行预测,每次可以计算出当前的P,R值
3.以P为纵坐标,R为横坐标绘制图像

在这里插入图片描述

3.1.2.2.6 AUC/ROC曲线

AUC的全拼是Area under the Curve,即曲线下的面积
ROC(Receiver Operating Characteristic)曲线,又称接受者操作特征曲线。ROC 曲线是基于混淆矩阵得出的。AUC值越大,当前的分类算法越有可能将正样本排在负样本前面,即能够更好的分类。
T P R = T P T P + F N TPR=\frac{TP}{TP+FN} TPR=TP+FNTP

F R P = T P F P + T N FRP=\frac{TP}{FP+TN} FRP=FP+TNTP
绘制步骤:

1.假设已经得出一系列样本被划分为正类的概率Score值,按照大小排序。
2.从高到低,依次将“Score”值作为阈值threshold,当测试样本属于正样本的概率大于或等于这个threshold时,我们认为它为正样本,否则为负样本。举例来说,对于某个样本,其“Score”值为0.6,那么“Score”值大于等于0.6的样本都被认为是正样本,而其他样本则都认为是负样本。
3.每次选取一个不同的threshold,得到一组FPR和TPR,以FPR值为横坐标和TPR值为纵坐标,即ROC曲线上的一点。
4.根据3中的每个坐标点,画图。

在这里插入图片描述
评估指标:
AUC = 1,采用这个预测模型时,不管设定什么阈值都能得出完美预测。绝大多数预测的场合,不存在完美分类器。

0.5 < AUC < 1优于随机猜测。这个分类器(模型)妥善设定阈值的话,能有预测价值。

AUC = 0.5跟随机猜测一样,模型没有预测价值。

AUC < 0.5比随机猜测还差;但只要总是反预测而行,就优于随机猜测,因此不存在AUC < 0.5的情况。

3.1.3 欠拟合和过拟合预备知识

3.1.3.1 欠拟合(Underfitting)

指在机器学习和深度学习过程中,模型对训练数据的拟合程度不足,无法很好地捕捉到数据中的规律和特征。

欠拟合通常表现为模型在训练集测试集上的性能均较差,无法达到预期的效果。欠拟合的主要原因是模型复杂度不够,无法有效地学习到数据的内在结构。

欠拟合的解决方法包括:

1.增加模型复杂度:提高模型的学习能力,以便更好地捕捉数据中的特征和规律。例如,增加网络层数、神经元数量等。
2.使用更有效的特征:通过特征提取、特征选择等方法,提高特征的代表性,使模型能够更好地学习数据中的内在结构。
3.优化算法和超参数:调整优化算法(如梯度下降法、Adam 等)和超参数(如学习率、批次大小等),以提高模型的学习效果。
4.数据增强:通过对训练数据进行变换、扩充等操作,增加数据的多样性,提高模型的泛化能力。
5.使用预训练模型:利用在大量数据上预训练好的模型进行迁移学习,可以有效地提高模型在目标任务上的性能。

3.1.3.2 过拟合(Overfitting)

指在机器学习和深度学习过程中,模型对训练数据的拟合程度过高,以至于在面对新的、未曾在训练集中出现的数据时,模型的泛化能力较差的现象。

过拟合通常表现为模型在训练集上的性能很好,但在测试集实际应用中的表现较差。过拟合的主要原因是模型学习能力过强,过于关注训练集中的单个样本特点,将其认为是普遍规律,从而导致模型在面对新数据时泛化能力下降。

过拟合的解决方法包括:

1.增加训练数据量:更多的训练数据可以提高模型的泛化能力,降低过拟合的风险。
2.数据抽样:对训练数据进行抽样,降低数据集的复杂度,从而降低模型的过拟合风险。
3.减小模型复杂度:过于复杂的模型容易过拟合,通过降低模型复杂度(如减少网络层数、减少神经元数量等),可以降低过拟合的风险。
1.正则化方法:在损失函数中加入正则化项,如 L1 正则化、L2 正则化等,可以限制模型的复杂度,降低过拟合的风险。
5.早停法:在训练过程中,采用验证集(交叉验证等方法)监控模型性能,当模型性能不再提升时,提前终止训练,以防止模型在训练集上过拟合。

3.1.3.3 泛化能力

指机器学习模型在面临未曾见过的数据时,能够保持良好性能的能力。换句话说,泛化能力是指模型在学习到数据中的规律和特征后,能够对新的、未曾在训练集中出现的数据做出准确的预测和处理。
泛化能力的重要性在于,它衡量了模型在实际应用中的性能,确保了模型不仅仅是在训练集上表现良好,而是在新的数据上也能有很好的表现。为了提高泛化能力,研究人员通常会采用各种方法,如数据抽样、正则化、交叉验证等。

3.2 模型评估方法代码实战

3.2.1 数据集介绍

使用了Scikit-learn库中的make_classification函数生成了一个二分类数据集,并使用train_test_split函数将其划分为训练集和测试集

import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier
from sklearn.metrics import precision_recall_curve, roc_curve, auc

# 生成数据集
X, y = make_classification(n_samples=1000, n_classes=2, n_features=10, random_state=42)

# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

3.2.2 KNN分类器并训练

定义一个KNN分类器,其中k值为5。使用训练集训练KNN模型。

# 定义KNN分类器
knn = KNeighborsClassifier(n_neighbors=5)

# 训练模型
knn.fit(X_train, y_train)

3.2.3 绘制PR曲线和ROC曲线

使用测试集进行预测,并计算预测结果的PR曲线和ROC曲线。绘制PR曲线和ROC曲线。

# 预测测试集
y_pred = knn.predict(X_test)

# 计算PR曲线和ROC曲线
precision, recall, _ = precision_recall_curve(y_test, y_pred)
fpr, tpr, _ = roc_curve(y_test, y_pred)
roc_auc = auc(fpr, tpr)

# 绘制PR曲线
plt.figure(figsize=(8, 6))
plt.plot(recall, precision, color='blue', lw=2, label='PR Curve (AUC = %0.2f)' % auc(precision, recall))
plt.xlabel('Recall')
plt.ylabel('Precision')
plt.title('PR Curve')
plt.legend(loc='lower right')
plt.show()

# 绘制ROC曲线
plt.figure(figsize=(8, 6))
plt.plot(fpr, tpr, color='red', lw=2, label='ROC Curve (AUC = %0.2f)' % roc_auc)
plt.plot([0, 1], [0, 1], color='navy', lw=2, linestyle='--')
plt.xlabel('False Positive Rate')
plt.ylabel('True Positive Rate')
plt.title('ROC Curve')
plt.legend(loc='lower right')
plt.show()

3.2.4 PR曲线和ROC曲线效果

在这里插入图片描述
在这里插入图片描述

3.3 模型评估方法总结

3.3.1 PR曲线优势

1.反映模型在不同阈值下的性能:通过调整分类阈值,可以观察到模型在不同阈值下的精确率和召回率变化,从而找到最佳阈值。
2.适用于不平衡数据集:PR 曲线能够在类别不平衡的情况下,更好地评估模型的性能。对于多数类别的样本,召回率较低,而對於少数类别的样本,召回率较高。
3.综合评价模型性能:PR 曲线将精确率和召回率结合起来,提供更全面的模型性能评估。在优化模型时,可以关注 PR 曲线,以实现精确率和召回率的平衡。
4.易于理解和解释:PR 曲线直观地展示了模型在不同阈值下的性能,便于研究人员和用户理解和解释模型的性能。

3.3.2 ROC曲线优势

1.适用于不同阈值:ROC 曲线可以反映模型在不同阈值下的性能,有助于找到最佳的分类阈值。
2.强调真正例的重要性:在 ROC 曲线中,TPR 表示真正例被正确分类的比例,因此 ROC 曲线可以用于评估模型对真正例的识别能力。
3.抗干扰性:ROC 曲线不受数据不平衡的影响,因此在类别不平衡的情况下,它仍然可以有效地评估模型的性能。
4.综合评价模型性能:ROC 曲线中的 AUC(Area Under Curve)可以作为评估模型性能的指标,AUC 值越大,模型的性能越好。
5.易于理解和解释:ROC 曲线直观地展示了模型在不同阈值下的性能,便于研究人员和用户理解和解释模型的性能。

3.3.3 实际运用

ROC 曲线主要用于评估二分类模型的性能,特别是当需要关注模型对不同阈值下的性能表现时。在金融、医疗、安全等领域,ROC 曲线可以帮助评估模型在实际应用中的性能,例如在金融欺诈检测、医学诊断和网络安全入侵检测等场景。

PR 曲线则在需要平衡精确率和召回率的场景中更具优势。例如,在垃圾邮件过滤、文本分类和情感分析等任务中,PR 曲线可以帮助评估模型在不同阈值下的精确率和召回率,从而找到最佳阈值并优化模型性能。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值