我正在使用带有scikit_Learn的动手机器学习(O'Reilly)进行自学,目前正在将MNIST数据与不同的分类器一起使用。

第94页的文字说SGDClassifier能够执行多类分类,并且使用OvA算法。当我尝试像这样适合分类器时:

sgd_clf = SGDClassifier()
sgd_clf.fit(x_train, y_train)


我收到一个错误:


  输入形状错误(55000,10)。


这似乎与文本矛盾。



资料资讯

x_train.shape是55000x784,y_train.shape是55000x10,它们都是numpy.ndarray

当我适合KNeighborsClassifier时,它可以完美工作。

SGDClassifier是否解决了多类别分类问题?

谢谢!

最佳答案

the documentation中所述,


  与其他分类器一样,SGD必须配备两个数组:数组X
  大小为[n_samples,n_features]的训练样本,以及
  大小为[n_samples]的数组Y,用于保存目标值(类标签)
  用于训练样本


这意味着y是由类标签组成的一维数组,如以下示例所示(取自上面的链接):

>>> from sklearn.linear_model import SGDClassifier
>>> X = [[0., 0.], [1., 1.]]
>>> y = [0, 1]
>>> clf = SGDClassifier(loss="hinge", penalty="l2")
>>> clf.fit(X, y)
SGDClassifier(alpha=0.0001, average=False, class_weight=None, epsilon=0.1,
       eta0=0.0, fit_intercept=True, l1_ratio=0.15,
       learning_rate='optimal', loss='hinge', n_iter=5, n_jobs=1,
       penalty='l2', power_t=0.5, random_state=None, shuffle=True,
       verbose=0, warm_start=False)


因此,您应该将y转换为包含类标签(在本例中为0-9)的向量。

关于python - SGDClassifier在MNIST上的用法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45284375/

10-12 22:53