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 行,在 print
它,否则 print(labels)
将不会被执行,并且您现在不会看到变量 labels
包含的内容。【参考方案2】:
没错。您的最后一列(标签)只有一种类型(分类)。你应该至少有两个。例如;如果您的标签决定是否必须卸载,则标签列应具有卸载和不卸载或(0 或 1)。
【讨论】:
以上是关于ValueError:类的数量必须大于一(python)的主要内容,如果未能解决你的问题,请参考以下文章
Python:ValueError:类的数量必须大于一;得到 1
ValueError: n_splits=10 不能大于每个类的成员数
TF - ValueError。这两个结构的元素数量不一样。
ValueError:模型的特征数量必须与输入匹配(sklearn)
ValueError:目标和输入必须具有相同数量的元素。目标 nelement (50) != 输入 nelement (100)