python多分类画混淆矩阵_二分类算法的评价指标:准确率、精准率、召回率、混淆矩阵、AUC...

本文介绍了在二分类问题中,准确率、精准率、召回率等评价指标的含义,并通过混淆矩阵进行详细阐述。在数据不平衡的情况下,准确率可能无法准确反映算法性能,因此需要结合精准率和召回率进行评估。同时,通过举例说明了在实际应用中如何避免误判带来的问题。

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

评价指标是针对同样的数据,输入不同的算法,或者输入相同的算法但参数不同而给出这个算法或者参数好坏的定量指标。
以下为了方便讲解,都以二分类问题为前提进行介绍,其实多分类问题下这些概念都可以得到推广。准确率
准确率是最好理解的评价指标,它是一个比值:


准确率 = cfrac{算法分类正确的数据个数}{输入算法的数据的个数}


但是使用准确率评价算法有一个问题,就是在数据的类别不均衡,特别是有极偏的数据存在的情况下,准确率这个评价指标是不能客观评价算法的优劣的。例如下面这个例子:
我们检测对 1000 个人是否患有癌症进行检测,其实癌症是一个发病率很低的疾病,我们就假定这 1000 个人里面只有 3 个人真正患病。
此时,我们可以“无脑地”设计一个算法,就预测这 1000 个人全部健康。根据准确率的定义,除了那 3 个真正患病的病人我们预测错了,其余健康的 997 人我们的算法都预测正确了,此时
准确率=算法分类正确的数据输入算法的数据的总数=9971000=99.7%准确率=算法分类正确的数据输入算法的数据的总数=9971000=99.7%
准确率 = cfrac{算法分类正确的数据}{输入算法的数据的总数} = cfrac{997}{1000} = 99.7%
事实上,这样的算法没有任何的预测能力,真的用于医疗是极其不负责的,于是我们就应该考虑是不是评价指标出了问题。这个时候就需要别的评价指标了。

精准率、召回率

要解释清楚精准率和召回率,得先解释混淆矩阵,二分类问题的混淆矩阵由 4 个数构成。首先我们将二分类问题中,我们关心的,少数的那一部分数据,我们称之为正例(positive),就如同预测癌症,癌症患者就定义为正例。那么剩下的就定义为负例(negative)。

于是,我们定义:

TN:算法预测为负例(N),实际上也是负例(N)的个数,即算法预测对了(True);

FP:算法预测为正例(P),实际上是负例(N)的个数,即算法预测错了(False);

FN:算法预测为负例(N),实际上是正例(P)的个数,即算法预测错了(False);

TP:算法预测为正例(P),实际上也是正例(P)的个数,即算法预测对了(True)。

这 4 个定义由两个字母组成,第 1 个字母表示算法预测正确或者错误,第 2 个字母表示算法预测的结果。

混淆矩阵

混淆矩阵定义如下:

预测值 0预测值 1真实值 0TNFP真实值 1FNTP

二分类算法的评价指标:准确率、精准率、召回率、混淆矩阵、AUC - 李威威 - 博客园​www.cnblogs.com
574a31aef97fa001ad27f5d0345b136a.png

好的,下面是一个简单的 Python 代码示例,用来对 CSV 文件中的数据进行分类并计算评价指标。 首先,我们使用 Pandas 库读取 CSV 文件并获取数据集: ``` import pandas as pd # 读取 CSV 文件 data = pd.read_csv('data.csv') # 获取特征和目标 X = data.iloc[:, :-1].values y = data.iloc[:, -1].values ``` 接下来,我们将数据集分为训练集和测试集: ``` from sklearn.model_selection import train_test_split # 将数据集分为训练集和测试集 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0) ``` 然后,我们可以选择使用不同的分类算法来训练模型,这里我们使用决策树算法: ``` from sklearn.tree import DecisionTreeClassifier # 训练决策树模型 classifier = DecisionTreeClassifier() classifier.fit(X_train, y_train) ``` 在训练模型之后,我们可以使用精度、召回率准确率AUC值这些指标来评估模型的性能: ``` from sklearn.metrics import accuracy_score, precision_score, recall_score, roc_auc_score # 在测试集上进行预测 y_pred = classifier.predict(X_test) # 计算评价指标 accuracy = accuracy_score(y_test, y_pred) precision = precision_score(y_test, y_pred) recall = recall_score(y_test, y_pred) auc = roc_auc_score(y_test, y_pred) # 输出评价指标 print("Accuracy:", accuracy) print("Precision:", precision) print("Recall:", recall) print("AUC:", auc) ``` 完整代码示例: ``` import pandas as pd from sklearn.model_selection import train_test_split from sklearn.tree import DecisionTreeClassifier from sklearn.metrics import accuracy_score, precision_score, recall_score, roc_auc_score # 读取 CSV 文件 data = pd.read_csv('data.csv') # 获取特征和目标 X = data.iloc[:, :-1].values y = data.iloc[:, -1].values # 将数据集分为训练集和测试集 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0) # 训练决策树模型 classifier = DecisionTreeClassifier() classifier.fit(X_train, y_train) # 在测试集上进行预测 y_pred = classifier.predict(X_test) # 计算评价指标 accuracy = accuracy_score(y_test, y_pred) precision = precision_score(y_test, y_pred) recall = recall_score(y_test, y_pred) auc = roc_auc_score(y_test, y_pred) # 输出评价指标 print("Accuracy:", accuracy) print("Precision:", precision) print("Recall:", recall) print("AUC:", auc) ``` 注意:这只是一个示例代码,实际情况下你需要根据你的数据集和任务选择合适的分类算法,并进行参数调优等工作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值