Makine öğrenmesi modelini değerlendirme

Tamamlandı

Tahmine dayalı bir model eğitmişsiniz. İyi olup olmadığını nereden biliyorsun?

Modeli değerlendirmek için, tuttuğun doğrulama verilerini kullanmanız gerekir. Denetimli makine öğrenmesi modellerinde bu yaklaşım, model tarafından tahmin edilen etiketleri doğrulama veri kümesindeki gerçek etiketlerle karşılaştırmanızı sağlar. Tahminleri gerçek etiket değerleriyle karşılaştırarak, modelin tahmine dayalı performansını ölçmek için bir değerlendirme ölçümleri aralığı hesaplayabilirsiniz.

Regresyon modellerini değerlendirme

Regresyon modelleri sayısal değerleri tahmin eder, bu nedenle modelin tahmine dayalı performansının herhangi bir değerlendirmesi, tahmin edilen değerler ile doğrulama veri kümesindeki gerçek etiket değerleri arasındaki farkları göz önünde bulundurmanızı gerektirir. Doğrulama veri kümesi, bazıları diğerlerinden daha doğru tahminlere sahip olabilecek birden çok durum içerdiğinden, farklılıkları toplamak ve performans için genel bir ölçüm belirlemek için bir yol gerekir. Regresyon modelini değerlendirmek için kullanılan tipik ölçümler şunlardır:

  • Ortalama Kare Hatası (MSE): Bu ölçüm, her tahminle gerçek değer arasındaki farkların karesini alarak ve kare farkları bir araya ekleyerek ve ortalamayı (ortalama) hesaplayarak hesaplanır. Değerlerin karekötesi, farklılıkları mutlak yapar (farkın negatif mi yoksa pozitif mi olduğu yoksayılır) ve daha büyük farklara daha fazla ağırlık verir.
  • Kök Ortalama Kare Hatası (RMSE): MSE ölçümü model tahminlerindeki hata düzeyinin iyi bir göstergesi olsa da, etiketin gerçek ölçü birimiyle ilgili değildir. Örneğin, satışları tahmin eden bir modelde (ABD doları cinsinden), MSE değeri aslında dolar değerlerinin karesi olarak temsil edilir. Tahminlerin dolar cinsinden ne kadar uzak olduğunu değerlendirmek için MSE'nin karekökünü hesaplamanız gerekir.
  • Belirleme Katsayısı (R2): R2 ölçümü, kare özelliği ile tahmin edilen değerler arasındaki bağıntıyı ölçer. Bu, model tarafından açıklanabilecek varyans miktarını ölçen 0 ile 1 arasında bir değerle sonuçlanır. Bu değer 1'e ne kadar yakın olursa model o kadar iyi tahminde bulunur.

Çoğu makine öğrenmesi çerçevesi, bu ölçümleri sizin için hesaplayan sınıflar sağlar. Örneğin, Spark MLlib kitaplığı, bu kod örneğinde gösterildiği gibi kullanabileceğiniz RegressionEvaluator sınıfını sağlar:

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

Sınıflandırma modellerini değerlendirme

Sınıflandırma modelleri, her olası sınıf için bir olasılık değeri hesaplayarak ve en yüksek olasılığa sahip sınıf etiketini seçerek kategorik etiketleri (sınıflar) tahmin eder. Sınıflandırma modelini değerlendirmek için kullanılan ölçümler, doğrulama veri kümesindeki gerçek bilinen etiketlerle karşılaştırıldığında bu sınıf tahminlerinin ne sıklıkta doğru olduğunu yansıtır. Sınıflandırma modelini değerlendirmek için kullanılan tipik ölçümler şunlardır:

  • Doğruluk: Model tarafından yapılan doğru sınıf tahminlerinin oranını gösteren basit bir ölçüm. Bu, sınıflandırma modelinin performansını değerlendirmenin belirgin bir yolu gibi görünse de, bir kişinin araba, otobüs veya tramvayla çalışmaya gidip gelmeyeceğini tahmin etmek için modelin kullanıldığı bir senaryoyu göz önünde bulundurun. Doğrulama kümesindeki vakaların 95% araba kullandığını, 3% otobüse bindiğini ve 2% tramvaya bindiğini düşünelim. Her zaman bir arabanın varlığını tahmin eden bir model, %95% doğruluğa sahip olacaktır. Ancak, üç sınıf arasında ayrım yapabilme yeteneğine sahip değildir.
  • Sınıf başına ölçümler:
    • Duyarlık: Belirtilen sınıfın doğru olan tahminlerinin oranı. Bu, gerçek pozitiflerin sayısı (bu sınıfın doğru tahminleri) olarak ölçülür ve bu sınıfın toplam tahmin sayısına ( hatalı pozitifler dahil) bölünür.
    • Hatırlayın: Doğru tahmin edilen bu sınıfın gerçek örneklerinin oranı (doğru pozitifler , doğrulama veri kümesindeki bu sınıfın örnekleri hatalı negatifler de dahil olmak üzere toplam sayıya bölünürse, modelin farklı bir sınıfı yanlış tahmin ettiği durumlar).
    • F1 puanı: Duyarlık ve geri çağırma için birleşik bir ölçüm (duyarlık ve yakalamanın harmonik ortalaması olarak hesaplanır).
  • Tüm sınıflar için birleşik (ağırlıklı) duyarlık, yakalama ve F1 ölçümleri.

Regresyona gelince, çoğu makine öğrenmesi çerçevesi sınıflandırma ölçümlerini hesaplayan sınıflar içerir. Örneğin, aşağıdaki kod Spark MLlib kitaplığındaki MulticlassClassificationEvaluator'ı kullanır.

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)

Denetimsiz kümeleme modellerini değerlendirme

Denetimsiz kümeleme modellerinin bilinen gerçek etiket değerleri yoktur. Kümeleme modelinin amacı, benzer durumları özelliklerine göre kümeler halinde gruplandırmaktır. Bir kümeyi değerlendirmek için, kümeler arasındaki ayrım düzeyini gösteren bir ölçüme ihtiyacınız vardır. Kümelenmiş durumları çok boyutlu alanda çizilmiş noktalar olarak düşünebilirsiniz. Aynı kümedeki noktalar birbirine yakın ve farklı bir kümedeki noktalardan uzak olmalıdır.

Bu ölçümlerden biri Öklid uzaklığını hesaplayan ve kümeler içinde tutarlılık göstergesi sağlayan Silhouette ölçüsüdür. Siluet değerleri 1 ile -1 arasında olabilir ve bir kümedeki noktaların aynı kümedeki diğer noktalara yakın ve diğer kümelerin noktalarından uzak olduğunu belirten 1'e yakın bir değer olabilir.

Spark MLlib kitaplığı, burada gösterildiği gibi kümeleme modeli tarafından yapılan tahminler için Silhouette'i hesaplayan ClusteringEvaluator sınıfını sağlar:

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)