Udacity: 作业3:ValueError:错误的输入形状 (1000, 10)

我正在完成作业3:正则化。在查看了Github上的内容后,我尝试自己解决这个作业,但遇到了运行时错误。请注意,我选择的数据集大小比链接中提到的要小。

这是当前的情况:

print('Training set', train_dataset.shape, train_labels.shape)print('Validation set', valid_dataset.shape, valid_labels.shape)print('Test set', test_dataset.shape, test_labels.shape)#Training set (20000, 784) (20000, 10)#Validation set (1000, 784) (1000, 10)#Test set (1000, 784) (1000, 10)

问题出在这里:

from sklearn.linear_model import LogisticRegressionoriginal_train_labels = train_labelslogit_clf = LogisticRegression(penalty='l2')logit_clf.fit(train_dataset[:1000,:], original_train_labels[:1000])

运行后会得到以下错误:

---------------------------------------------------------------------------ValueError                                Traceback (most recent call last)<ipython-input-12-4888dc0bbc75> in <module>()      4       5 logit_clf = LogisticRegression(penalty='l2')----> 6 logit_clf.fit(train_dataset[:1000,:], original_train_labels[:1000])      7 predicted = logit_clf.predict(test_dataset)      8 print('accuracy', accuracy((np.arange(num_labels) == predicted[:,None]).astype(np.float32), test_labels), '%')/usr/local/lib/python2.7/dist-packages/sklearn/linear_model/logistic.pyc in fit(self, X, y, sample_weight)   1140    1141         X, y = check_X_y(X, y, accept_sparse='csr', dtype=np.float64, -> 1142                          order="C")   1143         check_classification_targets(y)   1144         self.classes_ = np.unique(y)/usr/local/lib/python2.7/dist-packages/sklearn/utils/validation.pyc in check_X_y(X, y, accept_sparse, dtype, order, copy, force_all_finite, ensure_2d, allow_nd, multi_output, ensure_min_samples, ensure_min_features, y_numeric, warn_on_dtype, estimator)    513                         dtype=None)    514     else:--> 515         y = column_or_1d(y, warn=True)    516         _assert_all_finite(y)    517     if y_numeric and y.dtype.kind == 'O':/usr/local/lib/python2.7/dist-packages/sklearn/utils/validation.pyc in column_or_1d(y, warn)    549         return np.ravel(y)    550 --> 551     raise ValueError("bad input shape {0}".format(shape))    552     553 ValueError: bad input shape (1000, 10)

有什么解决方法吗?


回答:

你对train_labels使用了独热编码。这意味着它的形状是[1000, 10],有1000个样本,每个样本有10个’列’,其中1表示我们正在讨论的类别。这对于神经网络是必需的,但sklearn的Logistic Regression 要求它的形状是[1000, 1],也就是说,它应该是一个有1000行的向量,每行应该有一个整数来指示目标类别。使用argmax函数将独热编码转换为整数,你的问题就解决了。

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注