我已经使用带有以下代码的 sklearn 库实例化了一个 SVC 对象:
clf = svm.SVC(kernel='linear', C=1, cache_size=1000, max_iter = -1, verbose = True)
然后我使用以下方法将数据拟合到它:
模型 = 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, ...
最佳答案
因为您的 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)
关于python - sklearn 库中 .score() 和 .predict 的区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28093516/