Funktion für Presicion schreiben
Verfasst: Freitag 4. Dezember 2020, 18:37
Guten Tag,
wir sollen für die Uni den Wert von Precision und Recall ermitteln und mit vorgegebenen Doctests testen.
Mein Problem ist, dass der erste Test in der for-Schleife das zweite if-Statement ignoriert und der Wert für Precision deshalb 1 ist. Beim zweiten Test kommt aber das richtige Ergebnis raus.
Der Fehler liegt ja vermutlich in dem zweiten if-statement, aber ich finde ihn einfach nicht.
Vielen Dank im Voraus
wir sollen für die Uni den Wert von Precision und Recall ermitteln und mit vorgegebenen Doctests testen.
Mein Problem ist, dass der erste Test in der for-Schleife das zweite if-Statement ignoriert und der Wert für Precision deshalb 1 ist. Beim zweiten Test kommt aber das richtige Ergebnis raus.
Der Fehler liegt ja vermutlich in dem zweiten if-statement, aber ich finde ihn einfach nicht.
Vielen Dank im Voraus

Code: Alles auswählen
import random
hams = "reminder deadline meet thanks thanks for tip deadline approaching".split(" ")
spams = "hot stock tip meet hot single".split(" ")
list1 = [('ham', 'ham')] * 58 + [('spam', 'ham')] * 21 + [('ham', 'spam')] * 9 + [('spam', 'spam')] * 12
random.shuffle(list1)
def precision(k, classes):
""" Calculate the precision of class `k` for the classifications in `classes`.
Each element in classes is a tuple. The first element in the tuple specifies
the classification of the classifier. The second element specifies the real
class. [2 points]
>>> round(precision('spam', list1), 4)
0.3636
>>> round(precision('ham', list1), 4)
0.8657
>>> round(precision('spam', []), 4)
0.0
"""
tp = 0
fp = 0
p = ""
if (k == "spam "):
p = "ham"
elif (k == "ham"):
p = "spam"
for i in range(len(classes)):
if classes[i] == (k, k):
tp += 1
if classes[i] == (k, p):
fp += 1
if classes == []:
return 0.0
return tp / (tp + fp)