Ocena modelu uczenia maszynowego

Ukończone

W związku z tym wytrenowaliśmy model predykcyjny. Jak wiesz, czy jest to jakieś dobre?

Aby ocenić model, należy użyć danych weryfikacji, które się wycofały. W przypadku nadzorowanych modeli uczenia maszynowego to podejście umożliwia porównywanie etykiet przewidywanych przez model z rzeczywistymi etykietami w zestawie danych weryfikacji. Porównując przewidywania z rzeczywistymi wartościami etykiet, można obliczyć zakres metryk oceny w celu oszacowania wydajności predykcyjnej modelu.

Ocenianie modeli regresji

Modele regresji przewidują wartości liczbowe, więc każda ocena wydajności predykcyjnej modelu wymaga rozważenia różnic między przewidywanymi wartościami a rzeczywistymi wartościami etykiet w zestawie danych weryfikacji. Ponieważ zestaw danych weryfikacji zawiera wiele przypadków, niektóre z nich mogą mieć dokładniejsze przewidywania niż inne, konieczne jest agregowanie różnic i określenie ogólnej metryki wydajności. Typowe metryki używane do oceny modelu regresji obejmują:

  • Błąd średniokwadratowy (MSE): ta metryka jest obliczana przez kwadrat różnic między poszczególnymi przewidywaniami i wartością rzeczywistą oraz dodawanie różnic kwadratowych razem i obliczanie średniej (średniej). Kwadratowanie wartości sprawia, że różnice bezwzględne (ignorując, czy różnica jest ujemna czy dodatnia) i daje większą wagę większym różnicom.
  • Błąd średniokwadratowy (RMSE): chociaż metryka MSE jest dobrym wskaźnikiem poziomu błędu w przewidywaniach modeli, nie odnosi się do rzeczywistej jednostki miary etykiety. Na przykład w modelu, który przewiduje sprzedaż (w dolarach amerykańskich), wartość MSE faktycznie reprezentuje wartości dolara kwadratowego. Aby ocenić, jak daleko są przewidywania pod względem dolarów, należy obliczyć pierwiastek kwadratowy MSE.
  • Współczynnik determinacji (R2): Metryka R2 mierzy korelację między funkcją kwadratową a przewidywanymi wartościami. Skutkuje to wartością z zakresu od 0 do 1, która mierzy wielkość wariancji, którą można wyjaśnić przez model. Im bliżej ta wartość to 1, tym lepiej przewiduje model.

Większość platform uczenia maszynowego udostępnia klasy, które obliczają te metryki. Na przykład biblioteka MLlib platformy Spark udostępnia klasę RegressionEvaluator , której można użyć, jak pokazano w tym przykładzie kodu:

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))

Ocenianie modeli klasyfikacji

Modele klasyfikacji przewidują etykiety kategorii (klasy), obliczając wartość prawdopodobieństwa dla każdej możliwej klasy i wybierając etykietę klasy z najwyższym prawdopodobieństwem. Metryki używane do oceny modelu klasyfikacji odzwierciedlają, jak często te przewidywania klas były poprawne w porównaniu z rzeczywistymi znanymi etykietami w zestawie danych weryfikacji. Typowe metryki używane do oceny modelu klasyfikacji obejmują:

  • Dokładność: Prosta metryka wskazująca proporcję przewidywań klas wykonanych przez model, który był poprawny. Chociaż może to wydawać się oczywistym sposobem oceny wydajności modelu klasyfikacji, rozważ scenariusz, w którym model jest używany do przewidywania, czy dana osoba będzie dojeżdżać do pracy samochodem, autobusem lub tramwajem. Załóżmy, że 95% przypadków w zestawie walidacji używa samochodu, 3% zabiera autobus, a 2% łapie tramwaj. Model, który po prostu zawsze przewiduje, że samochód będzie 95% dokładny - mimo że rzeczywiście nie ma możliwości predykcyjnej dyskryminowania trzech klas.
  • Metryki poszczególnych klas:
    • Precyzja: proporcja przewidywań określonej klasy, która była poprawna. Jest to mierzone jako liczba wyników prawdziwie dodatnich (poprawne przewidywania tej klasy) podzielona przez łączną liczbę przewidywań tej klasy (w tym wyników fałszywie dodatnich).
    • Przypomnij sobie: Proporcja rzeczywistych wystąpień tej klasy, które zostały prawidłowo przewidywane (prawdziwie dodatnie podzielone przez łączną liczbę, jeśli wystąpienia tej klasy w zestawie danych weryfikacji, w tym fałszywie ujemne — przypadki, w których model niepoprawnie przewidział inną klasę).
    • Wynik F1: połączona metryka dla precyzji i kompletności (obliczona jako średnia harmoniczna precyzji i kompletności).
  • Połączone (ważone) precyzja, kompletność i F1 metryki dla wszystkich klas.

Jeśli chodzi o regresję, większość platform uczenia maszynowego obejmuje klasy, które mogą obliczyć metryki klasyfikacji. Na przykład poniższy kod używa klasy MulticlassClassificationEvaluator w bibliotece MLlib platformy Spark.

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)

Ocenianie nienadzorowanych modeli klastrowania

Nienadzorowane modele klastrowania nie mają znanych rzeczywistych wartości etykiet. Celem modelu klastrowania jest zgrupowanie podobnych przypadków w klastrach na podstawie ich funkcji. Aby ocenić klaster, potrzebna jest metryka wskazująca poziom separacji między klastrami. Przypadki klastrowane można traktować jako punktów wykreślonych w przestrzeni wielowymiarowej. Punkty w tym samym klastrze powinny być blisko siebie i odległe od punktów w innym klastrze.

Jedną z takich metryk jest miara Sylwetka , która oblicza kwadratową odległość euklidesową i wskazuje spójność w klastrach. Wartości sylwetki mogą należeć do zakresu od 1 do -1, z wartością zbliżoną do 1 wskazującą, że punkty w klastrze znajdują się blisko innych punktów w tym samym klastrze i daleko od punktów pozostałych klastrów.

Biblioteka MLlib platformy Spark udostępnia klasę ClusteringEvaluator , która oblicza sylwetkę prognoz wykonanych przez model klastrowania, jak pokazano poniżej:

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)