likes
comments
collection
share

机器学习基础-监督学习-测试数据之准确率和召回率

作者站长头像
站长
· 阅读数 4

准确率

准确率是用于衡量分类模型性能的指标之一,表示模型在所有分类样本中正确分类的比例。准确率越高,模型的性能越好。

准确率的计算公式如下:

Accuracy=TP+TNTP+TN+FP+FNAccuracy = \frac{TP+TN}{TP+TN+FP+FN}Accuracy=TP+TN+FP+FNTP+TN

其中,TPTPTP表示真正例(True Positive),TNTNTN表示真反例(True Negative),FPFPFP表示假正例(False Positive),FNFNFN表示假反例(False Negative)。

以下是一个简单的示例代码,展示如何使用准确率来评估模型的性能:

from sklearn.metrics import accuracy_score
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier

# 加载数据集
iris = load_iris()
X = iris.data
y = iris.target

# 将数据集分成训练集和测试集,比例为8:2
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)

# 训练决策树模型
model = DecisionTreeClassifier()
model.fit(X_train, y_train)

# 预测测试集的标签
y_pred = model.predict(X_test)

# 计算准确率
accuracy = accuracy_score(y_test, y_pred)
print('模型在测试集上的准确率为:', accuracy)

上述代码中,我们使用 accuracy_score 函数来计算模型在测试集上的准确率。首先,我们加载了鸢尾花数据集,将数据集按照 8:2 的比例分成训练集和测试集。然后,我们使用 DecisionTreeClassifier 类训练一个决策树模型,并使用 predict 方法来预测测试集的标签。最后,使用 accuracy_score 函数计算模型在测试集上的准确率。

特点

  1. 简单直观:准确率的计算公式简单,易于理解和解释。

  2. 容易受到样本分布的影响:当样本不平衡时,准确率可能会给出误导性的结果。例如,在一个二分类问题中,如果负样本占总样本数的绝大部分,模型将倾向于将所有的样本都预测为负样本,此时准确率可能会非常高,但模型并没有实际的预测能力。

  3. 不考虑误分类的类型和严重程度:准确率只关注模型预测的结果是否正确,而不关心模型预测错误的类型和严重程度。因此,当误分类的类型和严重程度对应用场景有较高的影响时,准确率可能不是最好的评价指标。

  4. 可以用于比较不同模型的性能:准确率可以用于比较不同模型在同一数据集上的性能,从而帮助选择最佳的模型。

  5. 仅适用于分类问题:准确率只适用于分类问题,不能用于回归问题。

  6. 对数据集的规模不敏感:准确率对数据集的规模不敏感,因此可以用于比较在不同规模的数据集上训练的模型的性能。

需要注意的是,准确率并不是适用于所有的分类问题,特别是在类别不平衡的情况下,准确率可能会存在误导性。在这种情况下,我们需要使用其他的指标来评估模型的性能。

召回率

在机器学习中,召回率(Recall)是衡量分类模型性能的一个重要指标之一。召回率是指所有正样本中被分类器正确识别的比例,即:

Recall=TPTP+FNRecall = \frac{TP}{TP + FN}Recall=TP+FNTP

其中,TP(True Positive)表示被分类器正确地识别为正样本的样本数,FN(False Negative)表示被分类器错误地识别为负样本的正样本数。

以下是一个简单的示例代码,展示如何计算模型的召回率:

import numpy as np
from sklearn.metrics import recall_score
from sklearn.linear_model import LogisticRegression

# 加载数据
data = np.loadtxt('data.csv', delimiter=',')
X = data[:, :-1]  # 特征矩阵
y = data[:, -1]   # 标签

# 训练模型
model = LogisticRegression()
model.fit(X, y)

# 在测试集上进行预测
y_pred = model.predict(X_test)

# 计算召回率
recall = recall_score(y_test, y_pred)
print('模型的召回率为:', recall)

上述代码中,我们使用 recall_score 函数来计算模型在测试集上的召回率。该函数需要输入两个参数:真实标签(y_test)和预测标签(y_pred)。

特点

  1. 召回率衡量的是所有正样本中被分类器正确识别的比例,因此它对于正样本的识别能力非常关键。在某些应用场景下,如医疗诊断、欺诈检测等,召回率的重要性非常高。

  2. 召回率与准确率(Precision)一样,都可以用来评估模型性能,但是它们的侧重点不同。准确率关注的是所有预测为正样本的样本中真正为正样本的比例,而召回率关注的是所有真正为正样本的样本中被正确预测为正样本的比例。

  3. 召回率越高,说明模型对于正样本的识别能力越强。但是,召回率的提高通常会伴随着误判率(False Positive Rate)的增加。因此,在实际应用中,需要根据具体场景综合考虑多个指标,选择合适的模型。

  4. 召回率可以通过不同的方法来改进,如增加训练数据、调整分类器的阈值、使用更复杂的模型等。但是,这些改进方法可能会带来其他问题,如过拟合、运算效率低下等。因此,需要在实际应用中进行综合权衡。

召回率是一个重要的指标,因为它能够反映模型对于正样本的识别能力。在某些应用场景下,如医疗诊断、欺诈检测等,对于正样本的识别能力非常关键。如果模型的召回率过低,可能会导致漏诊、漏检等严重后果。因此,在模型评估和选择时,需要综合考虑多个指标,并根据具体场景选择合适的模型。