我目前正在一个简单的二元分类任务上测试一些模型,但是,我发现 SK Learn 的两个准确度得分指标之间存在奇怪的差异:sk_learn.metrics.accuracy_score和 LogisticRegression 类的.score() 方法。
他们都应该衡量“准确性”,但在将两者并列之后,我找不到它们之间的任何明显差异。有人可以帮我解释为什么这两种方法得到不同的结果吗?也许提供使用建议?下面是我调用的函数,它使用我的数据集中的随机样本对模型进行 100 次试验。
我还分享了所得分数分布的屏幕截图。
def lr_runner(data, ratio, kpi, dropper, d_var, sensitivity=.01):
scores =[]
accs =[]
AUCs = []
tprs = []
mean_fpr = np.linspace(0, 1, 100)
for i in tqdm_notebook(range(100)):
train, test = randomizer(data, .66, kpi, sensitivity=sensitivity)
train = pd.get_dummies(train, columns=['categorical_variable1', 'categorical_variable2'])
test = pd.get_dummies(test, columns=['categorical_variable1', 'categorical_variable2'])
X_train = train.drop(dropper, axis=1)
X_train = sm.add_constant(X_train)
X_test = test.drop(dropper, axis=1)
X_test = sm.add_constant(X_test)
y_train = train[d_var]
y_test = test[d_var]
results = LogisticRegression().fit(X_train, y_train)
scores.append(results.score(X_train, y_train))
accs.append(accuracy_score(y_test, results.predict(X_test)))
probas_ = results.predict_proba(X_test)
fpr, tpr, thresholds = roc_curve(y_test, probas_[:, 1])
tprs.append(interp(mean_fpr, fpr, tpr))
tprs[-1][0] = 0.0
roc_auc = auc(fpr, tpr)
AUCs.append(roc_auc)
print("mean score: {}\nmean acc: {}\nmean AUC: {}".format(np.mean(scores),
np.mean(accs),
np.mean(AUCs)))
fig, subplots = plt.subplots(1,3, figsize=(12, 4))
sns.distplot(scores, kde=False, ax=subplots[0])
subplots[0].set_title("Scores")
sns.distplot(accs, kde=False, ax=subplots[1])
subplots[1].set_title("accuracies")
sns.distplot(AUCs, kde=False, ax=subplots[2])
subplots[2].set_title("AUC's")
plt.show()
fig.show()
return scores, accs, AUCs, results