问题拟合 SGD 分类器

Issue fitting a SGD Classifier

我正在关注 Aurelien Geron 的 Hands-on Machine Learning 一书,更具体地说,它从哪里开始进入分类器。我正在按照书中的代码进行操作,但我得到的错误是:

ValueError: The number of classes has to be greater than one; got 1 class

我的代码:

from sklearn.model_selection import train_test_split
from sklearn.linear_model import SGDClassifier
X_train, X_test, y_train, y_test = train_test_split(X,y, test_size = .20, random_state = 42)

y_train_5 = (y_train == 5)
y_test_5 = (y_test == 5)

sgd_clf = SGDClassifier(random_state=42)
sgd_clf.fit(X_train, y_train_5)

当我在线查找错误时,可能的解决方法是使用 np.unique(y_train_5),但这也不起作用。

问题是您传递 y_train_5 时每个值都相同,如果您这样做

print(set(y_train_5))

您只会看到一个值。考虑进行 stratified 训练测试拆分,这确保每个 class 最终都在训练和测试中。或者,您的 y_train 根本不包含“5”,并且 y_train_5 和 y_test_5 中的所有值都是“False”。

您的目标向量正在将标签与整数 5 进行比较,但标签在字符串中。因此,y_train_5 的所有值都计算为 False.fit() returns “一个 class” 错误。

将两个向量定义更改为:

y_train_5 = (y_train == '5')
y_test_5 = (y_test == '5')

和 classifier .fit() 方法将 运行 没有错误。