Je voulais tirer parti de cette réponse Comment tracer le rapport de classification de scikit learn ? transformer un rapport de classification sklearn en une carte thermique.
Tout fonctionne avec leur exemple de rapport, mais mon rapport de classification est légèrement différent, ce qui perturbe les fonctions.
Leur rapport (remarquez la moyenne / le total) :
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
Mon rapport avec 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
La question, tirée de la réponse sélectionnée dans le lien de la carte thermique, est ici :
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)
Parce que je reçois l'erreur :
ValueError : Impossible de convertir la chaîne en flottant : 'avg'.
Le problème réside donc dans la façon dont mon rapport de classification est généré. Que puis-je changer ici pour correspondre à l'échantillon ?
EDIT : ce que j'ai essayé :
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'])
Erreur :
Erreur de valeur : Le constructeur de DataFrame n'a pas été appelé correctement !