Mått
Svep för att visa menyn
Hittills har vi använt noggrannhet som det huvudsakliga måttet för att utvärdera modellens prestanda. Noggrannhet har dock vissa begränsningar. Vi ska nu diskutera dess nackdelar och introducera flera ytterligare mått – baserade på TP, TN, FP och FN – som hjälper till att hantera dessa problem.
Noggrannhet
Noggrannhet representerar andelen korrekta förutsägelser:
accuracy=correct+incorrectcorrect=TP+TN+FP+FNTP+TNNoggrannhet har dock sina nackdelar. Tänk dig till exempel att du försöker förutsäga om en patient har en sällsynt sjukdom. Datamängden innehåller 99,9 % friska patienter och endast 0,1 % med sjukdomen. I detta fall skulle en modell som alltid förutsäger att patienten är frisk ge en noggrannhet på 0,999 – även om en sådan modell är helt värdelös.
Sådana datamängder kallas obalanserade, och i dessa fall är balanserad noggrannhet ett bättre mått att använda.
Balanserad noggrannhet
Balanserad noggrannhet beräknar andelen korrekta positiva förutsägelser och andelen korrekta negativa förutsägelser separat, och medelvärdesbildar sedan dessa. Detta tillvägagångssätt ger lika stor vikt åt varje klass, oavsett hur obalanserad datamängden är.
balanced_accuracyaccuracy=21⋅PTP+21⋅NTN=P+NTP+TNDär
- P=TP+FN – totalt antal positiva instanser (klass 1);
- N=TN+FP – totalt antal negativa instanser (klass 0).
I exemplet med den sällsynta sjukdomen skulle den balanserade noggrannheten för en modell som alltid förutsäger "frisk" vara 0,5 – vilket tydligt belyser problemet. Så detta problem hanteras.
Balanserad noggrannhet skiljer dock fortfarande inte mellan typ 1 och typ 2-fel – precis som vanlig noggrannhet. Det är här precision och återkallelse kommer in.
Precision
Precision-måttet anger hur många av de värden som modellen förutsade som positiva som faktiskt var positiva. Det är andelen sanna positiva förutsägelser av alla positiva förutsägelser som modellen gjort:
precision=TP+FPTPGenom att använda precision-måttet kan vi förstå hur ofta ett typ 1-fel uppstår. Hög precision innebär att typ 1-fel är sällsynta, medan låg precision indikerar att typ 1-fel inträffar ofta.
Recall
Recall-måttet visar andelen av de faktiska positiva fallen som modellen korrekt förutsade:
recall=TP+FNTPRecall-måttet hjälper oss att förstå hur ofta ett typ 2-fel uppstår. Hög recall innebär att typ 2-fel är sällsynta, medan låg recall betyder att de inträffar ofta.
Både precision och recall har dock sina begränsningar. Till exempel kommer en modell som endast förutspår den positiva klassen (1) att uppnå perfekt recall, men dess precision kommer att vara dålig. Å andra sidan kommer en modell som korrekt förutspår endast ett positivt fall och markerar allt annat som negativt att ha perfekt precision, men usel recall.
Detta visar att det är enkelt att bygga en modell med perfekt precision eller perfekt recall, men mycket svårare att skapa en som presterar bra på båda. Därför är det viktigt att ta hänsyn till båda måtten – och lyckligtvis finns det ett mått som kombinerar dem.
F1-värde
F1-värdet är det harmoniska medelvärdet av precision och recall. Det harmoniska medelvärdet föredras framför det vanliga (aritmetiska) medelvärdet eftersom det straffar situationer där ett av värdena (antingen precision eller recall) är lågt, vilket gör det till ett mer balanserat mått på modellens prestanda.
F1=precision1+recall12=precision+recall2⋅precision⋅recallF1-värdet kombinerar både precision och recall till ett enda mått. Det blir endast högt om både precision och recall är relativt höga, vilket gör det till ett användbart mått när du behöver balansera båda typerna av fel.
Att välja rätt mått beror på den specifika uppgiften. Noggrannhet (eller balanserad noggrannhet för obalanserade datamängder) är intuitivt och ger en allmän uppfattning om modellens övergripande prestanda. Om du behöver mer detaljerad insikt i vilka typer av fel modellen gör, hjälper precision att identifiera typ 1-fel, medan återkallning belyser typ 2-fel. F1-poängen visar hur välbalanserad modellen är när det gäller både typ 1- och typ 2-fel.
Ett annat vanligt använt mått är ROC/AUC, som du kan läsa mer om i denna artikel.
Mätvärden i Python
Scikit-learn tillhandahåller implementationer för alla dessa mätvärden i modulen sklearn.metrics:
from sklearn.metrics import accuracy_score, balanced_accuracy_score, precision_score, recall_score, f1_score
accuracy = accuracy_score(y_true, y_pred)
balanced_accuracy = balanced_accuracy_score(y_true, y_pred)
precision = precision_score(y_true, y_pred)
recall = recall_score(y_true, y_pred)
f1 = f1_score(y_true, y_pred)
Om du vill få mätvärden som precision, recall och F1-score på en gång, erbjuder sklearn funktionen classification_report():
12345678910111213import pandas as pd import seaborn as sns from sklearn.metrics import classification_report from sklearn.ensemble import RandomForestClassifier from sklearn.model_selection import train_test_split df = pd.read_csv('https://codefinity-content-media.s3.eu-west-1.amazonaws.com/b71ff7ac-3932-41d2-a4d8-060e24b00129/titanic.csv') X, y = df.drop('Survived', axis=1), df['Survived'] X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=1) random_forest = RandomForestClassifier().fit(X_train, y_train) y_pred = random_forest.predict(X_test) # Display a classification report print(classification_report(y_test, y_pred))
Support avser antalet faktiska förekomster av varje klass i testuppsättningen. Macro avg beräknar medelvärdet för varje mätvärde (precision, recall, F1) över alla klasser lika, utan att ta hänsyn till obalans mellan klasserna. Weighted avg beräknar också medelvärdet för mätvärdena över alla klasser, men ger större vikt åt klasser med fler instanser (baserat på deras support).
Tack för dina kommentarer!
Fråga AI
Fråga AI
Fråga vad du vill eller prova någon av de föreslagna frågorna för att starta vårt samtal