sklearn 库中 .score() 和 .predict 之间的区别?

use*_*556 6 python machine-learning svm scikit-learn

我使用 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, ...

而对于 y_pred(使用 model.predict(X_train) 时),它们是:

  • 2, 3, 3, 2, 2, 3, 2, 3, 3, 3, ...

And*_*ler 6

因为你的y_trainis(301, 1)而不是(301,)numpy 进行广播,所以

(y_train == model.predict(X_train)).shape == (301, 301)
Run Code Online (Sandbox Code Playgroud)

这不是你想要的。您的代码的正确版本是

np.mean(y_train.ravel() == model.predict(X_train))
Run Code Online (Sandbox Code Playgroud)

这将给出相同的结果

model.score(X_train, y_train)
Run Code Online (Sandbox Code Playgroud)