问题拟合 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()
方法将 运行 没有错误。
我正在关注 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()
方法将 运行 没有错误。