为什么score()和accuracy_score()的结果不同?

-1 投票
1 回答
26 浏览
提问于 2025-04-13 16:25

我在用支持向量机(SVM)做分类。

然后我运行了以下代码:

df=pd.read_csv('mobile.csv')
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.3, random_state=42)

model = SVC()
model.fit(x_train, y_train)
model.score(x_test, y_test)
accuracy = accuracy_score(y_test, y_pred)
accuracy

模型在测试数据上的得分是0.9533333333333334,准确率也是0.9533333333333334。

接着我尝试通过调整超参数来提高模型的表现。

y_pred = model.predict(x_test)

C_values = [0.001, 0.01, 0.1, 1, 10, 100]

train_scores = []
test_scores = []

for C in C_values:
    model = SVC(C=C)
    model.fit(x_train, y_train)
    train_scores.append(model.score(x_train, y_train))
    test_scores.append(model.score(x_test, y_test))

model.score(x_test, y_test)

结果发现,模型在测试数据上的得分变成了0.9716666666666667。

accuracy

不过,准确率没有变化,依然是0.9533333333333334。

我不确定这是否正常。

你知道为什么会这样吗?

我原以为得分(score())和准确率(accuracy_score())的结果应该是一样的。

但现在并不是这样。

我不确定是不是哪里出错了。

我检查了一下,发现得分变化是在使用超参数之后。所以我觉得可能是超参数处理上出了问题。

1 个回答

0

这个方法 accuracy_score() 需要输入测试数据和预测结果。这里的问题是,你在调整参数的循环之前就计算了预测结果。

另外,model.score() 在循环外面使用也没什么意义,因为它只会用到最后调整好的模型,而这个模型可能并不是最好的。

你可以把它放在循环里面,这样就可以打印每次的结果,同时计算预测结果,并且打印准确率,这个准确率和 model.score() 是一样的。

撰写回答