我使用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&# 34。)
现在,在我偶然发现.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个值是:
而对于y_pred(使用model.predict(X_train)时),它们是:
答案 0 :(得分: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)