文本数据的多标签核外学习:部分拟合的 ValueError

2024-03-12

我正在尝试构建一个多标签外核文本分类器。如上所述here http://scikit-learn.org/stable/auto_examples/applications/plot_out_of_core_classification.html,其想法是批量读取(大规模)文本数据集并将其部分拟合到分类器。此外,当您具有如上所述的多标签实例时here http://scikit-learn.org/stable/modules/multiclass.html,其想法是以一对多的方式构建与数据集中的类数量一样多的二元分类器。

当将 sklearn 的 MultiLabelBinarizer 和 OneVsRestClassifier 类与部分拟合相结合时,出现以下错误:

ValueError:具有多个元素的数组的真值不明确。使用 a.any() 或 a.all()

代码如下:

from sklearn.naive_bayes import MultinomialNB
from sklearn.feature_extraction.text import HashingVectorizer
from sklearn.preprocessing import MultiLabelBinarizer
from sklearn.multiclass import OneVsRestClassifier

categories = ['a', 'b', 'c']
X = ["This is a test", "This is another attempt", "And this is a test too!"]
Y = [['a', 'b'],['b'],['a','b']]

mlb = MultiLabelBinarizer(classes=categories)
vectorizer = HashingVectorizer(decode_error='ignore', n_features=2 ** 18,         non_negative=True)
clf = OneVsRestClassifier(MultinomialNB(alpha=0.01))

X_train = vectorizer.fit_transform(X)
Y_train = mlb.fit_transform(Y)
clf.partial_fit(X_train, Y_train, classes=categories)

您可以想象最后三行应用于每个小批量,为了简单起见,我删除了其中的代码。

如果删除 OneVsRestClassifier 并仅使用 MultinomialNB,则代码运行良好。


您正在传递 y_train 转换自MultiLabelBinarizer其形式为 [[1, 1, 0], [0, 1, 0], [1, 1, 0]],但将类别传递为['a','b','c']然后通过这行代码 https://github.com/scikit-learn/scikit-learn/blob/master/sklearn/multiclass.py#L260:-

if np.setdiff1d(y, self.classes_):
raise ValueError(("Mini-batch contains {0} while classes " +
                 "must be subset of {1}").format(np.unique(y),
                                              self.classes_))

这会产生一个布尔值数组,例如 [False, True, ..]。if无法将此类数组作为单个真值处理,因此会出现错误。

首先,您应该以与以下内容相同的数字格式传递类:Y_train。 现在即使你这样做了,那么内部的label_binarizer_OneVsRestClassifier 的 http://scikit-learn.org/stable/modules/generated/sklearn.multiclass.OneVsRestClassifier.html#sklearn.multiclass.OneVsRestClassifier将决定它是“多类”类型而不是multilabel然后将拒绝正确地转换类。我认为这是 OneVsRestClassifer 和/或 LabelBinarizer 中的一个错误。

请向 scikit-learn github 提交问题partial_fit看看会发生什么。

Update显然,从目标向量 (y) 决定“多标签”或“多类”是 scikit-learn 上当前持续存在的问题,因为它存在很多复杂性。

  • https://github.com/scikit-learn/scikit-learn/issues/7665 https://github.com/scikit-learn/scikit-learn/issues/7665
  • https://github.com/scikit-learn/scikit-learn/issues/5959 https://github.com/scikit-learn/scikit-learn/issues/5959
  • https://github.com/scikit-learn/scikit-learn/issues/7931 https://github.com/scikit-learn/scikit-learn/issues/7931
  • https://github.com/scikit-learn/scikit-learn/issues/8098 https://github.com/scikit-learn/scikit-learn/issues/8098
  • https://github.com/scikit-learn/scikit-learn/issues/7628 https://github.com/scikit-learn/scikit-learn/issues/7628
  • https://github.com/scikit-learn/scikit-learn/pull/2626 https://github.com/scikit-learn/scikit-learn/pull/2626
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

文本数据的多标签核外学习:部分拟合的 ValueError 的相关文章

  • Celery计划任务中的打印语句不会出现在终端中

    当我跑步时celery A tasks2 celery worker B我想看到每秒打印 芹菜任务 目前没有打印任何内容 为什么这不起作用 from app import app from celery import Celery from
  • Pyenv 无法在 Cygwin 上安装 python: ModuleNotFoundError: No module named '_ctypes'

    我正在尝试设置 Cygwin 环境以使用 pyenv 来管理 python 版本 我没有管理员权限 所以我使用以下命令运行设置 no admin flag 我使用 Cygwin 包管理器应用程序解决了一些依赖关系 但我被困在了这一点上 Mo
  • 带括号的上下文管理器

    我试图了解新的新内容带括号的上下文管理器Python 3 10 中的功能 新功能中的顶部项目here https docs python org 3 10 whatsnew 3 10 html 我的测试示例是尝试编写 with open f
  • 帮助需要在可选条件下编写正则表达式[关闭]

    我有一个日志文件包含如下内容 log Using data from yyyy mm dd 2011 8 3 0 files queued for scanning Warning E test H ndler pdf File not F
  • 如何在 Django 管理中以表格格式显示添加模型?

    我刚刚开始使用 Django 编写我的第一个应用程序 为我的家庭设计的家务图表管理器 在本教程中 它向您展示了如何添加相关对象 http docs djangoproject com en dev intro tutorial02 cust
  • Django 如何从 ManyToManyField 序列化并列出全部

    我正在使用 Django 1 9 1 开发移动应用程序后端 我实现了关注者模型 现在我想列出用户的所有关注者 但目前我不得不这样做 我还使用 Django Rest 框架 这是我的 UserProfile 模型 class UserProf
  • 将 matplotlib png 转换为 base64 以在 html 模板中查看

    背景 你好 我正在尝试制作一个简单的网络应用程序 按照教程计算阻尼振动方程 并将结果的 png 返回到 html 页面 然后将其转换为 Base64 字符串 Problem 该应用程序运行正常 只是在计算结果时返回损坏的图像图标 可能是因为
  • 使用opencv计算深度视差图

    我无法使用 opencv 从视差图计算深度 我知道两个立体图像中的距离是用以下公式计算的z baseline focal disparity p 但我不知道如何使用地图计算视差 我使用的代码如下 为我提供了两个图像的视差图 import n
  • 理解@property装饰器和继承[重复]

    这个问题在这里已经有答案了 这里是 Python 3 以防万一它很重要 我试图正确理解如何实现继承 property使用 我已经搜索了 StackOverflow 并阅读了大约 20 个类似的问题 但无济于事 因为他们试图解决的问题略有不同
  • 当 DetailView 遇到时更新模型字段。 [姜戈]

    我有一个类似的 DetailViewviews py views py class CustomView DetailView context object name content model models AppModel templa
  • 向 Python 2.6 添加 SSL 支持

    我尝试使用sslPython 2 6 中的模块 但我被告知它不可用 安装OpenSSL后 我重新编译2 6 但问题仍然存在 有什么建议么 您安装了 OpenSSL 开发库吗 我必须安装openssl devel例如 在 CentOS 上 在
  • 如何使用 python 操作系统更改驱动器?

    我正在尝试更改当前目录C to Y 我试过 import os os chdir Y 但我不断收到错误消息 提示无法找到驱动器 本质上我正在寻找相当于 cd d cmd 中的命令 你确定吗Y 确实是有效的驱动器号吗 Try os chdir
  • 在 MATLAB 中创建共享库

    一位研究人员在 MATLAB 中创建了一个小型仿真 我们希望其他人也能使用它 我的计划是进行模拟 清理一些东西并将其变成一组函数 然后我打算将其编译成C库并使用SWIG https en wikipedia org wiki SWIG创建一
  • 使用python中的mysql连接器正确从mysql数据库获取blob

    当执行以下代码时 import mysql connector connection mysql connector connect connection params here cursor connection cursor curso
  • 在Python中计算结构体的CRC

    我有以下结构 来自 C 中的 NRPE 守护程序代码 typedef struct packet struct int16 t packet version int16 t packet type uint32 t crc32 value
  • 从 csv 中读取 pandas 数据帧,以非固定标头开始

    我有许多数据文件是由我的实验室中使用的一些相当黑客的脚本生成的 该脚本非常有趣 因为它在标头之前附加的行数因文件而异 尽管它们具有相同的格式并具有相同的标头 我正在编写一个批处理来将所有这些文件处理为数据帧 如果我不知道位置 如何让 pan
  • psutil:测量特定进程的CPU使用率

    我正在尝试测量进程树的 cpu 使用率 目前获取进程 没有子进程 的 cpu usage 就可以了 但我得到了奇怪的结果 import psutil p psutil Process PID p cpu percent 还给我float g
  • django 组合对两个不同基本模型的查询

    我有两个不同的查询集 我想将两个查询集合并 q1 tbl nt 123 objects values list id value geometry filter restriction height exclude condition id
  • 如何让你的精灵在pygame中跳跃

    目前我已经制作了一个平台游戏 可以左右移动我的角色 他从地上开始 关于如何让他跳的任何想法 因为我不明白 目前 如果我按住向上键 我的玩家精灵将连续向上移动 或者如果我按下它 我的玩家精灵将向上移动并保持向上 我想找个办法远离他 让我重新跌
  • Selenium Python 使用代理运行浏览器[重复]

    这个问题在这里已经有答案了 我正在尝试编写一个非常简单的脚本 该脚本从 txt 文件获取代理 不需要身份验证 并用它打开浏览器 然后沿着代理列表循环此操作一定次数 我确实知道如何打开 txt 文件并使用它 我的主要问题是让代理正常工作 我见

随机推荐