当前位置: 首页 > 知识库问答 >
问题:

具有 class_weight=自动的 SGD 分类器在学习 0.15 而不是 0.14 上失败

郜振国
2023-03-14

当我训练一个scikit学习v0.15SGDClassifier时,使用以下选项:SGDClasssifier(loss='log',class_weight=None,pension='l2')。然而,当我在scikit-learn v0.15上使用class_weight='auto'训练分类器时,我得到了以下错误:

  return self.model.fit(X, y)
  File "/home/rose/.local/lib/python2.7/site-packages/scikit_learn-0.15.0b1-py2.7-linux-x86_64.egg/sklearn/linear_model/stochastic_gradient.py", line 485, in fit
    sample_weight=sample_weight)
  File "/home/rose/.local/lib/python2.7/site-packages/scikit_learn-0.15.0b1-py2.7-linux-x86_64.egg/sklearn/linear_model/stochastic_gradient.py", line 389, in _fit
    classes, sample_weight, coef_init, intercept_init)
  File "/home/rose/.local/lib/python2.7/site-packages/scikit_learn-0.15.0b1-py2.7-linux-x86_64.egg/sklearn/linear_model/stochastic_gradient.py", line 336, in _partial_fit
    y_ind)
  File "/home/rose/.local/lib/python2.7/site-packages/scikit_learn-0.15.0b1-py2.7-linux-x86_64.egg/sklearn/utils/class_weight.py", line 43, in compute_class_weight
    raise ValueError("classes should have valid labels that are in y")
ValueError: classes should have valid labels that are in y

是什么引起的?

以下是有关class_weight的文档,以供参考:

为class_weight fit参数预设。与类别相关的权重。如果没有给定,所有类的权重都应该是1。“自动”模式使用y值来自动调整与类别频率成反比的权重。


共有2个答案

黄逸清
2023-03-14

我正在修复此PR:

https://github.com/scikit-learn/scikit-learn/pull/3515

如果它为您解决了问题,请随时测试和报告。

柯瀚玥
2023-03-14

我认为这可能是scikit-Learning中的一个错误。作为解决方法,请尝试以下操作:

from sklearn.preprocessing import LabelEncoder
le = LabelEncoder()
y_encoded = le.fit_transform(y)
self.model.fit(X, y_encoded)
pred = le.inverse_transform(self.model.predict(X))
 类似资料:
  • 每次将一个类别作为正类,其余类别作为负类。此时共有(N个分类器)。在测试的时候若仅有一个分类器预测为正类,则对应的类别标记为最终的分类结果。 【例】当有4个类别的时候,每次把其中一个类别作为正类别,其余作为负类别,共有4种组合,对于这4中组合进行分类器的训练,我们可以得到4个分类器。对于测试样本,放进4个分类器进行预测,仅有一个分类器预测为正类,于是取这个分类器的结果作为预测结果,分类器2预测的结果是类别2,于是这个样本便属于类别

  • 准备工作 1. 准备一张mysql数据库表,至少包含这些列:id、title(文章标题)、content(文章内容)、segment(中文切词)、isTec(技术类)、isSoup(鸡汤类)、isMR(机器学习类)、isMath(数学类)、isNews(新闻类) 2. 根据你关注的微信公众号,把更新的文章的title和content自动写入数据库中,具体方法见《教你成为全栈工程师(Full Sta

  • 监督学习使用标记数据对 (x,y) 学习函数:X\rightarrow Y 。但是,如果我们没有标签呢?这类没有标签的学习方式被称为无监督学习。 无监督学习:如果训练样本全部无标签,则是无监督学习。例如聚类算法,就是根据样本间的相似性对样本集进行聚类试图使类内差距最小化,类间差距最大化。 主要用途: 自动组织数据。 理解某些数据中的隐藏结构。 在低维空间中表示高维数据。

  • 问题内容: 我的文凭项目有一个大问题,如果你们能帮助我,我将非常高兴!我做了一个Maven多模块项目,有3个“核心项目” :(父母) :包含所有的实体和接口域模型是由需要 和对 :将GUI和Hessian关联起来 :这里是我的仓库,我到数据库连接和接口的实现 和具有在Maven作为依赖。 现在,每次尝试在Tomcat上启动服务器时,都会出现以下错误: 模型库: 卡萨: MeinRemoteDien

  • 我有一个很大的问题在我的文凭项目,将非常高兴,如果你们能帮助我!我做了一个Maven多模块项目,有3个“核心项目” :(父级) :包含具有所有实体的域模型和和的所需的接口 :连接到的GUI和Hessian连接 :以下是我的存储库、我与DB的连接以及接口&的实现,在Maven中有作为依赖项。 模型库: 卡萨: MeinRemotedIenst: infrastructures.xml: servle

  • 我正在建立一个分类神经网络,以便对两个不同的类进行分类。 所以这是一个二元分类问题,我正尝试用一个前馈神经网络来解决这个任务。 但是网络是不能学习的,事实上,在训练过程中,网络的精度是不变的。 具体而言,数据集由以下人员组成: 65673行22列。 其中一列是具有值(0,1)的目标类,而其他21列是预测器。数据集是这样平衡的: null 可以看到也有NaN值,但我不能删除它,因为在其他列中有值0是