python机器学习:分类问题学习模型的评价方法及代码实现
off999 2024-11-08 12:48 18 浏览 0 评论
一篇文章写清楚一个问题,关注我,自学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的,加油。
(站外链接发不了,请关注后私信回复“数据链接”获取本头条号所有使用数据)
往期内容:
相关推荐
- 阿里旺旺手机客户端(阿里旺旺手机app)
-
手机淘宝的旺旺在打开商品后,会看到左下角有个旺旺的图标,点击就可以联系了。 阿里旺旺是将原先的淘宝旺旺与阿里巴巴贸易通整合在一起的一个新品牌。它是淘宝和阿里巴巴为商人量身定做的免费网上商务沟通软件,...
- 最纯净的pe装机工具(pe工具哪个纯净)
-
U盘装系统步骤:1.制作U盘启动盘。这里推荐大白菜U盘启动盘制作工具,在网上一搜便是。2.U盘启动盘做好了,我们还需要一个GHOST文件,可以从网上下载一个ghost版的XP/WIN7/WIN8系统,...
- 装一个erp系统多少钱(wms仓库管理软件)
-
现在主流有客户端ERP和云端ERP两种客户端通常一次买断,价格在万元左右,但是还有隐性费用,你需要支付服务器、数据管理员,此外如果系统需要更新维护,你还需要支付另外一笔不菲的费用。云端ERP:优势...
- cad2014序列号和密钥永久(autocad2014序列号和密钥)
-
1在cad2014中修改标注样式后,需要将其保存2单击“样式管理器”按钮,在弹出的窗口中选择修改后的标注样式,然后单击“设置为当前”按钮,再单击“保存当前样式”按钮,将其保存为新的样式名称3为了...
- qq修改密保手机号(qq修改密保手机号是什么意思)
-
QQ更改绑定的手机号码操作步骤如下:1、打开手机主界面,找到“QQ”软件点击打开。2、输入正确的QQ账户和密码登录到qq主界面。3、点击左上角的头像“图片”,进入到个人中心界面。4、进入到个人中心界面...
- dell笔记本客服电话(dell笔记本客服电话人工服务)
-
戴尔中国的官方网站http://www.dell.com/zh-cn。通过这个网站购买的都没有问题;有问题也可以进入官网联系售后客服,也可以拔打dell电脑说明书上的售后热线,都可以为你解决的。还是建...
- 联想乐商店app官方下载(联想乐商店在哪下载)
-
您好!很遗憾!若是您的手机联想乐商店和联想游戏中心只能有流量,建议您核实是否乐安全有限制wifi上网,核实您所使用的wifi是否本身有限制。若还是无效,可清除缓存数据;备份资料恢复出厂设置尝试。欢迎您...
- 不用拉网线的路由器是真的吗
-
是真的不插卡不拉线有线就有网,这11个字其实就涵盖了无线路由器的特点,无线路由器免插卡、不用拉网线,完全摆脱了之前家用路由器和网线捆绑的模式,有电就有网,其实说的就是无线路由器的使用操作简单,通电就可...
- u盘检测软件下载(u盘测试软件)
-
1、u盘芯片检测工具(ChipEasy)可以查看USB设备PID、VID、SN、制造商、产品名等;2、查看USB设备主控芯片信息、闪存芯片信息、固件信息、电流控制3、SSD型号...
- 电脑现在什么系统最好(电脑现在用什么系统好)
-
WINXP好用,但过时了。VISTA不好用,没推开就夭折了。WIN8/8.1是针对触模屏设计的,如果你用的不是触摸屏平板电脑是普通电脑,使WIN8/8.1总觉着很蹩扭。新出的WIN10,功能...
- 账号怎么注册(steam账号怎么注册)
-
如果注册是qq账号【qq号码的申请办法】【1】双击qq登陆界面,在qq帐号填写空格的后面你可以看见:[申请帐号];【2】点击[申请帐号]进入,就可以在网上免费申请号码了;【3】进入www.qq.com...
- tmp文件是什么意思(tmp文件有什么用)
-
在系统C:\Windows\Temp文件夹中,我们经常会发现一些后缀名为TMP的文件,在该文件夹中的这些文件其实都是临时文件。它们可能是系统被误关机,或者其他程序没有删除而生的。而且在该文件夹中还有其...
- 怎么给u盘格式化(怎么给u盘格式化成FAT32)
-
u盘插入电脑,等待桌面弹出u盘图标。打开“计算机”。左键选中u盘,单击右键,在弹出的菜单中,点击“格式化”。点击“开始”,点击“确定”即可。格式化u盘详细步骤1、找到U盘盘符,鼠标右键点击,弹出菜单中...
欢迎 你 发表评论:
- 一周热门
-
-
抖音上好看的小姐姐,Python给你都下载了
-
全网最简单易懂!495页Python漫画教程,高清PDF版免费下载
-
Python 3.14 的 UUIDv6/v7/v8 上新,别再用 uuid4 () 啦!
-
python入门到脱坑 输入与输出—str()函数
-
飞牛NAS部署TVGate Docker项目,实现内网一键转发、代理、jx
-
宝塔面板如何添加免费waf防火墙?(宝塔面板开启https)
-
Python三目运算基础与进阶_python三目运算符判断三个变量
-
(新版)Python 分布式爬虫与 JS 逆向进阶实战吾爱分享
-
慕ke 前端工程师2024「完整」
-
失业程序员复习python笔记——条件与循环
-
- 最近发表
- 标签列表
-
- python计时 (73)
- python安装路径 (56)
- python类型转换 (93)
- python进度条 (67)
- python吧 (67)
- python的for循环 (65)
- python格式化字符串 (61)
- python静态方法 (57)
- python列表切片 (59)
- python面向对象编程 (60)
- python 代码加密 (65)
- python串口编程 (77)
- python封装 (57)
- python写入txt (66)
- python读取文件夹下所有文件 (59)
- python操作mysql数据库 (66)
- python获取列表的长度 (64)
- python接口 (63)
- python调用函数 (57)
- python多态 (60)
- python匿名函数 (59)
- python打印九九乘法表 (65)
- python赋值 (62)
- python异常 (69)
- python元祖 (57)
