ValueError:类的数量必须大于一(python)

Posted

技术标签:

【中文标题】ValueError:类的数量必须大于一(python)【英文标题】:ValueError: The number of classes has to be greater than one (python) 【发布时间】:2017-04-08 09:09:36 【问题描述】:

fit 中传递x,y 时,出现以下错误:

Traceback(最近一次调用最后一次):

文件“C:/Classify/classifier.py”,第 95 行,在

train_avg, test_avg, cms = train_model(X, y, "ceps", plot=True) 文件“C:/Classify/classifier.py”,第 47 行,在 train_model 中

clf.fit(X_train, y_train) 文件“C:\Python27\lib\site-packages\sklearn\svm\base.py”,第 676 行,适合 raise ValueError("The number of classes have to be greater than" ValueError: The number of classes have to be greater than one.

下面是我的代码:

def train_model(X, Y, name, plot=False):
"""
    train_model(vector, vector, name[, plot=False])

    Trains and saves model to disk.
"""
labels = np.unique(Y)

cv = ShuffleSplit(n=len(X), n_iter=1, test_size=0.3, indices=True, random_state=0)

train_errors = []
test_errors = []

scores = []
pr_scores = defaultdict(list)
precisions, recalls, thresholds = defaultdict(list), defaultdict(list), defaultdict(list)

roc_scores = defaultdict(list)
tprs = defaultdict(list)
fprs = defaultdict(list)

clfs = []  # for the median

cms = []

for train, test in cv:
    X_train, y_train = X[train], Y[train]
    X_test, y_test = X[test], Y[test]

    clf = LogisticRegression()
    clf.fit(X_train, y_train)
    clfs.append(clf)

【问题讨论】:

scikit learn 0.15.2版 【参考方案1】:

您可能在当前训练集中只有一个唯一的类标签。正如错误消息指出的那样,您需要在数据集中至少有两个唯一的类。例如,您可以运行 np.unique(y) 来查看数据集中的唯一类标签是什么。

【讨论】:

看看你的代码示例中已经有labels = np.unique(Y)。就在print,例如labels = np.unique(Y); print(labels) 它正在打印:文件“C:/Users/vshah/PycharmProjects/Classify/classifier.py”,第 101 行,在 开始分类 train_avg, test_avg, cms = train_model(X, y , "ceps", plot=True) 文件 "C:/Users/vshah/PycharmProjects/Classify/classifier.py",第 54 行,在 train_model 分类运行中 ... clf.fit(X_train, y_train) 文件 "C:\ Python27\lib\site-packages\sklearn\svm\base.py",第 665 行,in fit [] raise ValueError("The number of classes have to be greater than one" 您上面粘贴的不是打印结果,而是您之前发布的错误信息。在遇到错误之前,您需要在一行中 print 它,否则 print(labels) 将不会被执行,并且您现在不会看到变量 labels 包含的内容。【参考方案2】:

没错。您的最后一列(标签)只有一种类型(分类)。你应该至少有两个。例如;如果您的标签决定是否必须卸载,则标签列应具有卸载和不卸载或(0 或 1)。

【讨论】:

以上是关于ValueError:类的数量必须大于一(python)的主要内容,如果未能解决你的问题,请参考以下文章

Python:ValueError:类的数量必须大于一;得到 1

类的数量必须大于一;得了1分

ValueError: n_splits=10 不能大于每个类的成员数

TF - ValueError。这两个结构的元素数量不一样。

ValueError:模型的特征数量必须与输入匹配(sklearn)

ValueError:目标和输入必须具有相同数量的元素。目标 nelement (50) != 输入 nelement (100)