sklearn库中.score()和.predict方法的区别?

我使用sklearn库通过以下代码实例化了一个SVC对象:

clf = svm.SVC(kernel='linear', C=1, cache_size=1000, max_iter = -1, verbose = True)

然后我使用以下代码对其进行数据拟合:

model = clf.fit(X_train, y_train)

其中X_train是一个(301,60)的数组,y_train是一个(301,)的ndarray(y_train包含类别标签”1″、”2″和”3″)。

在发现.score()方法之前,为了确定模型在训练集上的准确性,我使用了以下方法:

prediction = np.divide((y_train == model.predict(X_train)).sum(), y_train.size, dtype = float)

这给出的结果大约是62%。

然而,当使用model.score(X_train, y_train)方法时,我得到的结果大约是83%。

因此,我想知道为什么会出现这种情况,因为据我所知,它们应该返回相同的结果?

补充说明:

y_true的前10个值是:

  • 2, 3, 1, 3, 2, 3, 2, 2, 3, 1, …

而使用model.predict(X_train)时,y_pred的前10个值是:

  • 2, 3, 3, 2, 2, 3, 2, 3, 3, 3, …

回答:

因为你的y_train(301, 1)而不是(301,),numpy会进行广播操作,因此

(y_train == model.predict(X_train)).shape == (301, 301)

这并不是你想要的结果。你的代码的正确版本应该是

np.mean(y_train.ravel() == model.predict(X_train))

这将给出与

model.score(X_train, y_train)

相同的结果

Related Posts

Keras Dense层输入未被展平

这是我的测试代码: from keras import…

无法将分类变量输入随机森林

我有10个分类变量和3个数值变量。我在分割后直接将它们…

如何在Keras中对每个输出应用Sigmoid函数?

这是我代码的一部分。 model = Sequenti…

如何选择类概率的最佳阈值?

我的神经网络输出是一个用于多标签分类的预测类概率表: …

在Keras中使用深度学习得到不同的结果

我按照一个教程使用Keras中的深度神经网络进行文本分…

‘MatMul’操作的输入’b’类型为float32,与参数’a’的类型float64不匹配

我写了一个简单的TensorFlow代码,但不断遇到T…

发表回复

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