ValueError:此求解器需要数据中至少 2 个类的样本,但数据仅包含一个类:False

Posted

技术标签:

【中文标题】ValueError:此求解器需要数据中至少 2 个类的样本,但数据仅包含一个类:False【英文标题】:ValueError: This solver needs samples of at least 2 classes in the data, but the data contains only one class: False 【发布时间】:2019-11-03 18:48:44 【问题描述】:

我有一个这样开始的示例字典

'first': 'second': [],
  'third': 1.0,
  'fourth': 'fifth': 'test', 'value': 2.0,
  'sixth': 'seventh': 3.0,
   'eight': 4.0,

我试过了

y_test = np.array([x['first']['sixth'] == 'seventh' for x in test_data])

什么时候

test = LogisticRegression(class_weight='balanced').fit(X_test, y_test)

但不断得到

ValueError:此求解器需要至少 2 个类的样本 数据,但数据只包含一个类:False

注意:来自notebook的单元格4和7

编辑:我把它改成了

y_test = np.array([x['first']['sixth'] == 'seventh' for x in test_data], dtype=float) 现在问题来了

ValueError: Unknown label type: 'continuous'

我使用了标签编码

import numpy as np
from sklearn                        import metrics, svm
from sklearn.linear_model           import LogisticRegression
from sklearn import preprocessing
from sklearn import utils

lab_enc = preprocessing.LabelEncoder()
training_scores_encoded = lab_enc.fit_transform(y_test)

属于多类

或 svc 来保留浮动

from sklearn.svm import SVR
svr = SVR()
sld = svr.fit(x_test, y_test)

但这两个都需要很长时间

在 t4 gpu 上使用 dtype=int 需要 8 分钟 但结果有很多噪音和身份问题

【问题讨论】:

它准确地告诉您错误中的问题是什么,您需要至少 2 个类别的样本,这意味着 y_test 只有 1 个类别的标签。不知道为什么要重新分配 test 以及它与字典有什么关系,因为这里没有添加暗示它甚至是远程使用的代码。 你可以从这里看到单元格,4 和 7 github.com/Puzer/stylegan-encoder/blob/master/… 【参考方案1】:

很简单,错误中明确提到只有一个标签类。

您需要确保y_test 中至少有几个类。您可以检查y_test 数组以确保在拟合模型之前有两个类True and False

# Sample y_test
y_test = array([ True, False,  True,  True])

# Check classes
set(y_test)
False, True

# In your case
set(y_test)
False
# Make sure your data has at least 2 classes

【讨论】:

请看我上面的评论,我给出了简单的例子,请参见此处的单元格 4 和 7。 github.com/Puzer/stylegan-encoder/blob/master/… 是的,我确实检查过了。他们正在使用其他一些数据集,因为它与您使用的 dict 不同。因此,将print(set(y_test)) 添加到您的代码中以检查您是否有多个标签,根据错误情况并非如此。您需要确保正确生成y_test 我目前正在尝试获取 ['faceAttributes']['emotion']['neutral'] 如果我这样做 print(set(y_emotion_test)) 我得到 '0.171', '0.186 ', '0.839', '0.741', ... for dtype=' 注意我这样设置 y_emotion_test = np.array([x['faceAttributes']['emotion']['neutral'] for x in labels_data], dtype=' 在查看 type(labels_data[0]['faceAttributes']['emotion']['neutral']) 我得到浮动,所以 dtype=float?但后来我得到 ValueError: Unknown label type: 'continuous' 错误【参考方案2】:

这是一个快速工作的解决方案,8s 与 t4

from sklearn.linear_model import SGDRegressor
sgds = SGDRegressor()
sld = sgds.fit(x_test, y_test)
results = sld.coef_.reshape((18, 512))

【讨论】:

以上是关于ValueError:此求解器需要数据中至少 2 个类的样本,但数据仅包含一个类:False的主要内容,如果未能解决你的问题,请参考以下文章

ValueError:估计器 LogisticRegression 的参数求解器无效

LightGBM 错误:ValueError:对于提前停止,评估需要至少一个数据集和评估指标

Python 3 - ValueError: 找到包含 0 个样本的数组 (shape=(0, 11)),而 MinMaxScaler 至少需要 1

ValueError:找到的数组带有0个样本(形状=(0,35)),而StandardScaler至少需要1个]]

Python - groupby 多列 - ValueError:分组器和轴必须相同的长度

Sklearn LogisticRegression求解器需要2类数据