《Python数据挖掘入门与实践》学习笔记1

news/2024/11/28 9:46:30/

第八章-用神经网络破解验证码

在8.3.1 反向传播算法一节中出现的一点有问题

在这节中,需要对创建好的神经网络进行训练、预测并评估。

得到预测值后,可以用scikit-learn计算F1值。
from sklearn.metrics import f1_score
print("F-score: {0:.2f}".format(f1_score(predictions,y_test.argmax(axis=1) )))
F1值为0.97,对于相对较小的模型来说,这个结果很了不起。

然而在对进行评估时却发现出现了如下问题:
ValueError: Target is multiclass but average='binary'. Please choose another average setting.

经过查看scikit-learn官网文档后,才知道有两个问题没有弄明白。
一个是y_turey_test参数位置反了,
另一个是这里的预测值实际上有26个类别(字母),也就是说是Multiclass分类
这大概是因为这本书比较老了,没有版本不兼容,实际上书上很多处都是如此,以后学完复习时,会来个总结篇。

而这里的参数average是由多个选项的,如下:
None,则返回每个班级的分数。否则,这将确定对数据执行的平均类型:

binary:仅报告由指定的类的结果pos_label。仅当targets(y_{true,pred})是二进制时才适用。

micro:通过计算总真阳性,假阴性和误报来全球计算指标。

macro:计算每个标签的指标,找出它们的未加权平均值。这不会考虑标签不平衡。

weighted:计算每个标签的指标,并找到它们的平均值,按支持加权(每个标签的真实实例数)。这会改变“宏观”以解决标签不平衡问题; 它可能导致F分数不在精确度和召回之间。

samples:计算每个实例的指标,并找出它们的平均值(仅对于不同的多标记分类有意义 accuracy_score)。

这里结合官网的里说明一下

>>> from sklearn.metrics import f1_score
>>> y_true = [0, 1, 2, 0, 1, 2]
>>> y_pred = [0, 2, 1, 0, 0, 1]
>>> f1_score(y_true, y_pred, average='macro')  # doctest: +ELLIPSIS
0.26...
>>> f1_score(y_true, y_pred, average='micro')  # doctest: +ELLIPSIS
0.33...
>>> f1_score(y_true, y_pred, average='weighted')  # doctest: +ELLIPSIS
0.26...
>>> f1_score(y_true, y_pred, average=None)
array([ 0.8,  0. ,  0. ])

这里的Nonemacro其实有如下关系:

>>> f1_score(y_true, y_pred, average='macro')  == >>> f1_score(y_true, y_pred, average=None).mean()
True

关于这些参数是如何计算的,可以参考模型评估
最后给个F1指标的深入文章链接机器学习-评价分类结果


http://www.ppmy.cn/news/487360.html

相关文章

java 中几种常用数据结构

JAVA中常用的数据结构(java.util. 中) java中有几种常用的数据结构,主要分为Collection和map两个主要接口(接口只提供方法,并不提供实现),而程序中最终使用的数据结构是继承自这些接口的数据结构…

数据结构(顺序队列/链队列//循环队列)

顺序队列 #include<iostream> #include<malloc.h> using namespace std; typedef int ElemType; const int MaxSize200; typedef struct {ElemType data[MaxSize];int rear,front;}SqQueue;void InitQueue(SqQueue *&s) {s(SqQueue *)malloc(sizeof(SqQueue))…

数据结构(单链表,顺序结构)

//顺序表基本运算算法 实现算法的初始化&#xff0c;求是否为空表&#xff0c;返回长度&#xff0c;查询&#xff0c;插入&#xff0c;删除 #include <stdio.h> #include <malloc.h> #define MaxSize 50 typedef int ElemType; typedef struct { ElemType data[…

LLM - 基于 Vicuna-13B 参数计算搭建私有 ChatGPT 在线聊天

欢迎关注我的CSDN&#xff1a;https://spike.blog.csdn.net/ 本文地址&#xff1a;https://blog.csdn.net/caroline_wendy/article/details/131312366 LLaMA 和 Vicuna 都是大语言模型(LLM)&#xff0c;两者的差异如下&#xff1a; LLaMA (Large Language Model Meta AI)&#…

木一githab

git常用命令 本地项目代码上传到远端GitLab仓库&#xff1a; https://blog.csdn.net/weixin_42104592/article/details/106196306 GitLab配置ssh key&#xff1a; https://www.cnblogs.com/hafiz/p/8146324.html 拉取&#xff1a; git clone git192.168.200.109:snail/GitTest…

数据结构(链栈-链表)

方法一&#xff1a;引用 #include<iostream> #include<cstdio> #include<malloc.h> using namespace std; typedef int ElemType; const int MaxSize50; typedef struct LNode {ElemType data;struct LNode *next; } LinkList;void InitList(LinkList *&…

数据结构(双链表/循环链表例题 )

有一个带头结点的双链表L设计一个算法让其所有元素逆置&#xff0c;即第一个元素变成最后元素&#xff0c;第二个元素变成倒数第二个元素 typedef struct DNode {ElemType data;struct DNode *prior;struct DNode *next; } Dlinknode; void conversion(Dlinknode *&L) {Dl…

Python可变数据类型和不可变数据类型及函数参数传递

可变数据类型&#xff1a; 列表、字典、集合 当该数据类型的对应变量的值发生了改变&#xff0c;那么它对应的内存地址不发生改变&#xff0c;对于这种数据类型&#xff0c;就称可变数据类型。 不可变数据类型&#xff1a; 整型&#xff0c;字符串、元组 当该数据类型的对应…