为何糖尿病数据集上LogisticRegression两种拟合方式的测试得分相同?
为什么训练集拟合与测试集拟合的LogisticRegression在测试集上得分完全相同?
我用糖尿病数据集做实验:先在训练集上拟合LogisticRegression模型,在测试集上得到的测试得分为0.802083;之后我在测试集上拟合该模型,再在测试集上评估,居然得到了完全相同的测试得分。这是什么原因?
实验代码如下:
import pandas as pd from sklearn.model_selection import train_test_split from sklearn.linear_model import LogisticRegression diab_cols = ['Pregnancies', 'Insulin', 'BMI','Glucose','BloodPressure','DiabetesPedigreeFunction'] X = df[diab_cols]# Features y = df.Outcome # Target variable X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, random_state=0) model = LogisticRegression().fit(X_train,y_train) model_test = LogisticRegression().fit( X_test, y_test) print("test_score",model.score(X_test,y_test)) print("test_score",model_test.score(X_test,y_test))
原因解析
这是小概率统计巧合,并非必然现象,具体可以从这几点理解:
- 预测结果完全重合:训练集拟合的模型,和测试集拟合的模型,对测试集中所有样本的预测结果完全一致。后者虽然是在测试集上“死记硬背”训练,但刚好它学到的决策边界,和前者在训练集上学到的决策边界,在测试集样本上的预测输出完全匹配,最终得分自然相同。
- 测试集样本量偏小:原数据集共768条样本,测试集占25%即192条。小样本量下,不同模型对所有样本预测一致的概率虽然低,但并非不可能发生。
- 验证方法:你可以通过以下代码验证两个模型的预测结果是否完全一致:
import numpy as np print(np.all(model.predict(X_test) == model_test.predict(X_test)))
如果输出True,就直接证明了两个模型对测试集的预测完全相同,这就是得分一致的核心原因。
内容的提问来源于stack exchange,提问作者rafine
相关产品推荐
相关产品推荐

