gpt4 book ai didi

python - Sklearn - 绘制分类报告给出与基本平均值不同的输出?

转载 作者:行者123 更新时间:2023-12-03 21:14:27 24 4
gpt4 key购买 nike

我想利用这个答案 How to plot scikit learn classification report?将 sklearn 分类报告转换为热图。

这一切都与他们的样本报告一起工作,但是我的分类报告看起来略有不同,因此搞砸了功能。

他们的报告(注意平均值/总数):

sampleClassificationReport =             
precision recall f1-score support

Acacia 0.62 1.00 0.76 66
Blossom 0.93 0.93 0.93 40
Camellia 0.59 0.97 0.73 67
Daisy 0.47 0.92 0.62 272
Echium 1.00 0.16 0.28 413

avg / total 0.77 0.57 0.49 858

我的报告 metrics.classification_report(valid_y, y_pred) :
              precision    recall  f1-score   support

0 1.00 0.18 0.31 11
1 0.00 0.00 0.00 14
2 0.00 0.00 0.00 19
3 0.50 0.77 0.61 66
4 0.39 0.64 0.49 47
5 0.00 0.00 0.00 23

accuracy 0.46 180
macro avg 0.32 0.27 0.23 180
weighted avg 0.35 0.46 0.37 180

来自热图链接中选定答案的问题在这里:
for line in lines[2 : (len(lines) - 2)]:
t = line.strip().split()
if len(t) < 2: continue
classes.append(t[0])
v = [float(x) for x in t[1: len(t) - 1]]
support.append(int(t[-1]))
class_names.append(t[0])
print(v)
plotMat.append(v)

因为我收到错误:

ValueError: could not convert string to float: 'avg'



所以真正的问题是我的分类报告是如何输出的。我可以在这里更改什么以匹配示例?

编辑:我试过的:
df = pd.DataFrame(metrics.classification_report(valid_y, y_pred)).T

df['support'] = df.support.apply(int)

df.style.background_gradient(cmap='viridis',
subset=pd.IndexSlice['0':'9', :'f1-score'])

错误:

ValueError: DataFrame constructor not properly called!

最佳答案

随着output_dict的到来参数在 classification_report ,解析报表没有麻烦。可以直接使用分类报告的输出读取为pd.DataFrame .然后,您可以使用 pd.Style 选项来渲染热图。

例子:

from sklearn.metrics import classification_report
import numpy as np
import pandas as pd

from sklearn.datasets import make_classification
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split, GridSearchCV


X, y = make_classification(n_samples=1000, n_features=30,
n_informative=12,
n_clusters_per_class=1, n_classes=10,
class_sep=2.0, random_state=42)

X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size=0.3, stratify=y)


clf = LogisticRegression(max_iter=1000, random_state=42).fit(X_train, y_train)



df = pd.DataFrame(classification_report(clf.predict(X_test),
y_test, digits=2,
output_dict=True)).T

df['support'] = df.support.apply(int)

df.style.background_gradient(cmap='viridis',
subset=pd.IndexSlice['0':'9', :'f1-score'])

关于python - Sklearn - 绘制分类报告给出与基本平均值不同的输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61705257/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com