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='这是一个快速工作的解决方案,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个]]