网站首页 > 博客文章 正文
一篇文章写清楚一个问题,关注我,自学python!
解决一个机器学习问题都是从问题建模开始,我们首先要收集问题资料,深入理解问题后将其抽象成机器可预测的问题。那么我们的学习模型表现究竟怎么样,该如何进行评估呢?今天就给大家写一写分类问题的评估方法。
评价指标介绍:
介绍指标之前先给大家介绍一下混淆矩阵confusion matrix
对于一个二分类问题,我们可以得到如图所示的的混淆矩阵
1.准确率(accuracy)
准确率表示模型在测试集中预测正确的样本(TP和TN)在所有测试样本(all data)中占的比例。
注意:在数据集不平衡时,准确率将不能很好地表示模型的性能。可能会存在准确率很高,而少数类样本全分错的情况,此时应选择其它模型评价指标。
2、精确率(查准率)和召回率(查全率)
positive class的精确率(precision)计算公式如下:
positive class的召回率(recall)计算公式如下:
positive class的召回率只和真实为positive的样本相关,与真实为negative的样本无关;而精确率则受到两类样本的影响。请大家仔细理解这句话,理解好这句话才能真正理解为什么我们需要F1score。
3、F1score
F1 Score是precision和recall整合在一起的判定标准。
F1 Score的一般式子为
β是使用者自行定义的参数,由一般式可见F-score能同时考虑precision和recall这两种数值。分子为precision和recall相乘,根据这个式子,只要precision或recall趋近于0,F-score就会趋近于0,代表着这个算法的精确度非常低。一个好的算法,最好能够平衡recall和precision,且尽量让两种指标都很高。
当precision和recall的权重一样时有
F-score最理想的数值是趋近于1,做法是让precision和recall都有很高的值。若两者皆为1,则F-score也为1,代表该算法有着最佳的精确度。
4、ROC曲线
ROC曲线是受试者工作特征曲线 (receiver operating characteristic curve,简称ROC曲线)
ROC曲线纵轴表示真正例率TPR,横轴表示假正例率FPR。
- 纵轴:真实为正样本中预测是正样本的比例
- 横轴:真实为负样本中预测是正样本的比例
ROC曲线的绘制过程是:给定数量正样本和负样本,按照预测为正样本的可能性排序,我们先假定阈值为最大,让所有的样本都预测为负样本,这样就可以使得TPR和FPR都为0,于是我们就得到点(0,0);然后让阈值依次取样本的预测值,若为真正例,则上移 ,若为假正例,则右移 ,这样得到的是一个类似阶梯的形状,连成平滑曲线即为ROC曲线。
ROC曲线的作用有2个:
- 当需要用ROC曲线来评判两个模型的好坏时,一般比较曲线下的面积AUC,AUC较大的表示性能较好。
- 对于同一个模型,ROC曲线可以帮助我们决定模型最佳阈值。
评价指标python实操
现在进行实操,首先,导入数据,训练模型:
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
col = ["num_preg", "plasma_glucose_conc", "D_blood_pressure", "skin_fold_thickness", "serum_insulin", "body_mass_index", "pedigree_func", "age", "diabetes"]
diabetes_data = pd.read_csv("dataset/diabetes.txt", names = col)
X = diabetes_data.drop('diabetes', axis = 1)
y = diabetes_data.diabetes
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=3)
from sklearn.neural_network import MLPClassifier
mlp = MLPClassifier(max_iter=1000)
mlp.fit(x_train, y_train)
解释一下上面的代码,首先读入了一个糖尿病数据库(请关注私信获取),然后对数据列进行命名,划分训练集和测试集后训练了一个多层感知机模型来预测一个病人是否患糖尿病,模型不作为本文重点,重点看模型评价方法。
准确率accuracy
在本例中就是正确预测的(所有将患糖尿病和不患糖尿病都正确预测的)测试样本数除以所有测试样本。
代码实现
from sklearn.metrics import accuracy_score
acc = accuracy_score(y_test, y_pred)
accRecall (Sensitivity)
精确率precision
在本例中就是在所有预测为患有糖尿病的测试样本中究竟有多少真的得病。
代码实现:
from sklearn.metrics import precision_score
precision_score(y_test, y_pred)
召回率Recall (Sensitivity)
在本例就是在所有真的有糖尿病的测试样本中模型预测出了多少为真。
代码实现:
from sklearn.metrics import recall_score
recall_score(y_test, y_pred)
特异度Specificity
在本例就是在所有真的没病的患者中模型能预测出有多少真正没病。
代码实现:
print("Specificity with recall pos label=0: ",recall_score(y_test, y_pred, pos_label=0))
特异度有点特殊,其实特异度就是预测为阴性时的召回率,所以可以用pos_label参数修改为阴性参数0就好。
F1 score
代码实现:
from sklearn.metrics import f1_score
print("F1 Score: ",f1_score(y_test, y_pred))
ROC曲线
代码如下:
from sklearn.metrics import plot_roc_curve
plot_roc_curve(mlp, x_test, y_test)
plt.show()
小结
今天给大家介绍了准确率、精确率(查准率)、召回率(查全率)、F1值、ROC曲线的意义和代码实现方法。感谢大家耐心看完。发表这些东西的主要目的就是督促自己,希望大家关注评论指出不足,一起进步。内容我都会写的很细,用到的数据集也会在原文中给出链接,你只要按照文章中的代码自己也可以做出一样的结果,一个目的就是零基础也能懂,因为自己就是什么基础没有从零学Python的,加油。
(站外链接发不了,请关注后私信回复“数据链接”获取本头条号所有使用数据)
往期内容:
猜你喜欢
- 2024-10-29 模型评估(一)(你应该知道的模型评估的五个方法)
- 2024-10-29 精度是远远不够的:如何最好地评估一个分类器?
- 2024-10-29 Python机器学习理论与实战 第二章 Logistic回归模型(下)
- 2024-10-29 R数据分析:ROC曲线与模型评价实例
- 2024-10-29 模型评估与模型监控——AUC 计算示例
- 2024-10-29 为机器学习模型选择正确的度量评估(第二部分)
- 2024-10-29 从另外一个角度解释AUC(从另一个角度去看问题)
- 2024-10-29 机器学习算法评估方法+Spring学习笔记
- 2024-10-29 你真的了解模型评估与选择嘛(模型评价的术语)
- 2024-10-29 机器学习中的评价指标(机器学习模型的评价指标有哪些)
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- powershellfor (55)
- messagesource (56)
- aspose.pdf破解版 (56)
- promise.race (63)
- 2019cad序列号和密钥激活码 (62)
- window.performance (66)
- qt删除文件夹 (72)
- mysqlcaching_sha2_password (64)
- ubuntu升级gcc (58)
- nacos启动失败 (64)
- ssh-add (70)
- jwt漏洞 (58)
- macos14下载 (58)
- yarnnode (62)
- abstractqueuedsynchronizer (64)
- source~/.bashrc没有那个文件或目录 (65)
- springboot整合activiti工作流 (70)
- jmeter插件下载 (61)
- 抓包分析 (60)
- idea创建mavenweb项目 (65)
- vue回到顶部 (57)
- qcombobox样式表 (68)
- vue数组concat (56)
- tomcatundertow (58)
- pastemac (61)
本文暂时没有评论,来添加一个吧(●'◡'●)