Vyhodnocení modelu strojového učení

Dokončeno

Vytrénovali jste prediktivní model. Jak víš, jestli je to nějaké dobré?

K vyhodnocení modelu je potřeba použít ověřovací data, která jste si podrželi. U modelů strojového učení pod dohledem vám tento přístup umožňuje porovnat popisky předpovězené modelem se skutečnými popisky v ověřovací datové sadě. Porovnáním předpovědí s hodnotami skutečného popisku můžete vypočítat rozsah metrik vyhodnocení pro kvantifikaci prediktivního výkonu modelu.

Vyhodnocení regresních modelů

Regresní modely predikují číselné hodnoty, takže jakékoli vyhodnocení prediktivního výkonu modelu vyžaduje, abyste zvážili rozdíly mezi predikovanými hodnotami a skutečnými hodnotami popisků v ověřovací datové sadě. Vzhledem k tomu, že ověřovací datová sada obsahuje více případů, z nichž některé můžou mít přesnější předpovědi než jiné, potřebujete nějaký způsob, jak agregovat rozdíly a určit celkovou metriku výkonu. Mezi typické metriky používané k vyhodnocení regresního modelu patří:

  • Střední kvadratická chyba (MSE):: Tato metrika se počítá rozdělením rozdílů mezi jednotlivými předpověďmi a skutečnou hodnotou a sečtením kvadraických rozdílů dohromady a výpočtem střední hodnoty (průměr). Squaring hodnoty činí rozdíly absolutní (bez ohledu na to, jestli je rozdíl záporný nebo kladný) a dává větší váhu větším rozdílům.
  • Odmocněná střední kvadratická chyba (RMSE):Zatímco metrika MSE je dobrou indikací úrovně chyb v předpovědích modelů, nesouvisí se skutečnou měrnou jednotkou popisku. Například v modelu, který predikuje prodeje (v amerických dolarech), hodnota MSE ve skutečnosti představuje hodnoty dolaru čtvercové. Pokud chcete vyhodnotit, jak daleko jsou předpovědi z hlediska dolarů, musíte vypočítat druhou odmocninu MSE.
  • Koeficient stanovení (R2): Metrika R2 měří korelaci mezi kvadvadlo a predikovanými hodnotami. Výsledkem je hodnota mezi 0 a 1, která měří velikost rozptylu, kterou model vysvětluje. Čím blíže je tato hodnota 1, tím lépe model predikuje.

Většina architektur strojového učení poskytuje třídy, které tyto metriky počítají za vás. Například knihovna Spark MLlib poskytuje regressionEvaluator třídy, kterou můžete použít, jak je znázorněno v tomto příkladu kódu:

from pyspark.ml.evaluation import RegressionEvaluator

# Inference predicted labels from validation data
predictions_df = model.transform(validation_df)

# Assume predictions_df includes a 'prediction' column with the predicted labels
# and a 'label' column with the actual known label values

# Use an evaluator to get metrics
evaluator = RegressionEvaluator()
evaluator.setPredictionCol("prediction")
mse = evaluator.evaluate(predictions_df, {evaluator.metricName: "mse"})
rmse = evaluator.evaluate(predictions_df, {evaluator.metricName: "rmse"})
r2 = evaluator.evaluate(predictions_df, {evaluator.metricName: "r2"})
print("MSE:", str(mse))
print("RMSE:", str(rmse))
print("R2", str(r2))

Vyhodnocení klasifikačních modelů

Klasifikační modely předpovídají kategorické popisky (třídy) výpočtem hodnoty pravděpodobnosti pro každou možnou třídu a výběrem popisku třídy s nejvyšší pravděpodobností. Metriky používané k vyhodnocení klasifikačního modelu odrážejí, jak často byly tyto předpovědi tříd správné ve srovnání se skutečnými známými popisky v ověřovací datové sadě. Mezi typické metriky používané k vyhodnocení klasifikačního modelu patří:

  • Přesnost: Jednoduchá metrika, která označuje poměr predikcí tříd provedených modelem, který byl správný. I když to může vypadat jako zřejmý způsob, jak vyhodnotit výkon klasifikačního modelu, zvažte scénář, ve kterém se model používá k predikci, jestli bude osoba dojíždět do práce autem, autobusem nebo tramvají. Řekněme, že 95 % případů v ověřovací sadě používá auto, 3 % jezdí autobusem a 2 % chytá tramvaj. Model, který jednoduše vždy predikuje auto, bude 95% přesný - i když ve skutečnosti nemá žádnou prediktivní schopnost rozlišovat mezi třemi třídami.
  • Metriky pro jednotlivé třídy:
    • Přesnost: Podíl předpovědí zadané třídy, která byla správná. Měří se jako počet pravdivě pozitivních ( správných predikcí této třídy) vydělený celkovým počtem predikcí této třídy (včetně falešně pozitivních výsledků).
    • Úplnost: Podíl skutečných instancí této třídy, které byly správně předpovězeny (pravdivě pozitivní výsledky vydělené celkovým počtem, pokud instance této třídy v ověřovací datové sadě, včetně falešně negativních výsledků – případy, kdy model nesprávně predikoval jinou třídu).
    • Skóre F1: Kombinovaná metrika pro přesnost a úplnost (vypočítána jako harmonický průměr přesnosti a úplnosti).
  • Kombinované (vážené) metriky přesnosti, úplnosti a F1 pro všechny třídy.

Co se týče regrese, většina architektur strojového učení zahrnuje třídy, které můžou vypočítat metriky klasifikace. Například následující kód používá MulticlassClassificationEvaluator v knihovně Spark MLlib.

from pyspark.ml.evaluation import MulticlassClassificationEvaluator

# Inference predicted labels from validation data
predictions_df = model.transform(validation_df)

# Assume predictions_df includes a 'prediction' column with the predicted labels
# and a 'label' column with the actual known label values

# Use an evaluator to get metrics
accuracy = evaluator.evaluate(predictions_df, {evaluator.metricName:"accuracy"})
print("Accuracy:", accuracy)

labels = [0,1,2]
print("\nIndividual class metrics:")
for label in sorted(labels):
    print ("Class %s" % (label))
    precision = evaluator.evaluate(predictions_df, {evaluator.metricLabel:label,
                                                    evaluator.metricName:"precisionByLabel"})
    print("\tPrecision:", precision)
    recall = evaluator.evaluate(predictions_df, {evaluator.metricLabel:label,
                                                 evaluator.metricName:"recallByLabel"})
    print("\tRecall:", recall)
    f1 = evaluator.evaluate(predictions_df, {evaluator.metricLabel:label,
                                             evaluator.metricName:"fMeasureByLabel"})
    print("\tF1 Score:", f1)
    
overallPrecision = evaluator.evaluate(predictions_df, {evaluator.metricName:"weightedPrecision"})
print("Overall Precision:", overallPrecision)
overallRecall = evaluator.evaluate(predictions_df, {evaluator.metricName:"weightedRecall"})
print("Overall Recall:", overallRecall)
overallF1 = evaluator.evaluate(predictions_df, {evaluator.metricName:"weightedFMeasure"})
print("Overall F1 Score:", overallF1)

Vyhodnocení modelů clusteringu bez supervize

Modely clusteringu bez dohledu nemají známé hodnoty skutečných popisků. Cílem modelu clusteringu je seskupit podobné případy do clusterů na základě jejich funkcí. K vyhodnocení clusteru potřebujete metriku, která označuje úroveň oddělení mezi clustery. Clusterované případy si můžete představit jako vykreslované body v multidimenzionálním prostoru. Body ve stejném clusteru by měly být blízko sebe a daleko od bodů v jiném clusteru.

Jednou z takových metrik je míra Silhouette , která vypočítá čtvercovou euklidovou vzdálenost a poskytuje indikaci konzistence v rámci shluků. Hodnoty siluety mohou být v rozmezí od 1 do -1, přičemž hodnota blížící se 1 značí, že body v clusteru jsou blízko ostatním bodům ve stejném clusteru a daleko od bodů ostatních shluků.

Knihovna Spark MLlib poskytuje třídu ClusteringEvaluator , která vypočítá silhouette pro předpovědi vytvořené modelem clusteringu, jak je znázorněno tady:

from pyspark.ml.evaluation import ClusteringEvaluator
from pyspark.ml.linalg import Vectors

# Inference predicted labels from validation data
predictions_df = model.transform(validation_df)

# Assume predictions_df includes a 'prediction' column with the predicted cluster

# Use an evaluator to get metrics
evaluator = ClusteringEvaluator(predictionCol="prediction")
silhouetteVal  = evaluator.evaluate(predictions_df)
print(silhouetteVal)