StratifiedKFold的混淆矩阵和分类报告
Posted
技术标签:
【中文标题】StratifiedKFold的混淆矩阵和分类报告【英文标题】:confusion matrix and classification report of StratifiedKFold 【发布时间】:2019-07-26 22:34:28 【问题描述】:我正在使用 StratifiedKFold 来检查我的分类器的性能。我有两个班级,我试图建立 Logistic Regression classier。 这是我的代码
skf = StratifiedKFold(n_splits=10, shuffle=True, random_state=0)
for train_index, test_index in skf.split(x, y):
x_train, x_test = x[train_index], x[test_index]
y_train, y_test = y[train_index], y[test_index]
tfidf = TfidfVectorizer()
x_train = tfidf.fit_transform(x_train)
x_test = tfidf.transform(x_test)
clf = LogisticRegression(class_weight='balanced')
clf.fit(x_train, y_train)
y_pred = clf.predict(x_test)
score = accuracy_score(y_test, y_pred)
r.append(score)
print(score)
print(np.mean(r))
我可以只打印性能分数,但我不知道如何打印混淆矩阵和分类报告。如果我只是在循环内添加打印语句,
print(confusion_matrix(y_test, y_pred))
它会打印 10 次,但我想报告分类器最终性能的矩阵。
关于如何计算矩阵和报告的任何帮助。谢谢
【问题讨论】:
欢迎来到 SO;请发布您迄今为止尝试过的内容以及您面临的具体问题 - 事实上,即使是非常基本的内容(例如,有多少个课程?),您也没有提供任何有用的信息(例如,有多少个课程?) 对不起,我会编辑帖子 【参考方案1】:交叉验证用于评估特定模型或超参数在数据集的不同拆分中的性能。最后,您本身并没有最终表现,您拥有每个分段的个人表现和跨分段的汇总表现。您可以潜在地使用 tn、fn、fp、tp 来创建聚合的精度、召回率、灵敏度等......但是您也可以只使用 sklearn 中这些指标的预定义函数并在最后聚合它们。
例如
skf = StratifiedKFold(n_splits=10, shuffle=True, random_state=0)
accs, precs, recs = [], [], []
for train_index, test_index in skf.split(x, y):
x_train, x_test = x[train_index], x[test_index]
y_train, y_test = y[train_index], y[test_index]
tfidf = TfidfVectorizer()
x_train = tfidf.fit_transform(x_train)
x_test = tfidf.transform(x_test)
clf = LogisticRegression(class_weight='balanced')
clf.fit(x_train, y_train)
y_pred = clf.predict(x_test)
acc = accuracy_score(y_test, y_pred)
prec = precision_score(y_test, y_pred)
rec = recall_score(y_test, y_pred)
accs.append(acc)
precs.append(prec)
recs.append(rec)
print(f'Accuracy: acc, Precision: prec, Recall: rec')
print(f'Mean Accuracy: np.mean(accs), Mean Precision: np.mean(precs), Mean Recall: np.mean(recs)')
【讨论】:
以上是关于StratifiedKFold的混淆矩阵和分类报告的主要内容,如果未能解决你的问题,请参考以下文章