为什么score()和accuracy_score()的结果不同?
我在用支持向量机(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()
是一样的。