Koneoppimismallin arvioiminen
Olet siis harjoittanut ennustavan mallin. Mistä tiedät, onko tästä mitään hyötyä?
Jos haluat arvioida mallin, sinun on käytettävä pidättelimiäsi vahvistustietoja. Valvotuissa koneoppimismalleissa tämän lähestymistavan avulla voit verrata mallin ennustamia tunnisteita vahvistustietojoukon todellisiin tunnisteisiin. Vertaamalla ennusteita tosiotsikon arvoihin voit laskea arviointiarvojen alueen ja mitata mallin ennakoivan suorituskyvyn.
Regressiomallien arviointi
Regressiomallit ennustavat numeerisia arvoja, joten mallin ennakoivan suorituskyvyn arvioinnissa on otettava huomioon ennustettujen arvojen ja vahvistustietojoukon todellisten otsikkoarvojen väliset erot. Koska vahvistustietojoukko sisältää useita tapauksia, joista joissakin voi olla tarkempia ennusteita kuin toisissa, sinun täytyy koostaa erot ja määrittää yleinen suorituskykymittari. Regressiomallin arvioimiseen käytettyjä tyypillisiä mittareita ovat seuraavat:
- Mean Squared Error (MSE): Tämä mittausarvo lasketaan siten, että se riivaa kunkin ennusteen ja todellisen arvon väliset erot ja lisää neliömät eroavaisuudet yhteen ja laskee keskiarvon (keskiarvon). Arvojen louhiminen tekee eroista absoluuttisia (ohittaen, onko ero negatiivinen vai positiivinen) ja antaa enemmän painoarvoa suuremmille eroille.
- Root Mean Squared Error (RMSE): Vaikka MSE-mittari on hyvä osoitus mallien ennusteiden virhetasosta, se ei liity selitteen todelliseen mittausyksikköön. Esimerkiksi mallissa, joka ennustaa myyntiä (Yhdysvaltain dollareina), MSE-arvo edustaa neliömäisia dollariarvoja. Jos haluat arvioida, kuinka kaukana ennusteet ovat dollareina, sinun on laskettava MSE: n neliöjuuri.
- Määrityksen kerroin (R2): R2 -mittausarvo mittaa neliömäisen ominaisuuden ja ennustettujen arvojen välistä korrelaatiota. Tämän tuloksena on arvo 0–1, joka mittaa varianssin määrän, joka voidaan selittää mallissa. Mitä lähempänä tämä arvo on 1, sitä paremmin malli ennustaa.
Useimmat koneoppimiskehykset tarjoavat luokkia, jotka laskevat nämä mittarit puolestasi. Esimerkiksi Spark MLlib -kirjasto tarjoaa RegressionEvaluator-luokan , jota voit käyttää tässä koodiesimerkissä esitetyllä tavalla:
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))
Luokitusmallien arviointi
Luokitusmallit ennustavat luokittaisia otsikoita (luokkia) laskemalla todennäköisyysarvon kullekin mahdolliselle luokalle ja valitsemalla luokan otsikon, jolla on suurin todennäköisyys. Luokitusmallin arvioimiseen käytetyt arvot kuvastavat sitä, kuinka usein nämä luokan ennusteet olivat oikein verrattuna vahvistustietojoukon todellisiin tunnettuihin otsikoihin. Luokitusmallin arvioimiseen käytettyjä tyypillisiä mittareita ovat seuraavat:
- Tarkkuus: Yksinkertainen mittausarvo, joka ilmaisee mallin tekemien oikein tehtyjen luokkaennusteiden osuuden. Vaikka tämä voi tuntua ilmeiseltä tavalta arvioida luokitusmallin suorituskykyä, harkitse skenaariota, jossa mallia käytetään ennustamaan, tekeekö henkilö työmatkan työskennelläkseen autolla, bussilla vai raitiovaunulla. Oletetaan, että 95% validointijoukon tapaukset käyttävät autoa, 3% mennä bussilla ja 2% ottaa raitiovaunun. Malli, joka yksinkertaisesti ennustaa aina, että auto on 95% tarkka - vaikka sillä ei itse asiassa ole ennustavaa kykyä syrjiä kolmea luokkaa.
- Luokkakohtaiset mittarit:
- Tarkkuus: Oikeiden määritettyjen luokkien ennusteiden osuus. Tätä mitataan toisten positiivisten määränä (tämän luokan oikeat ennusteet) jaettuna tämän luokan ennusteiden kokonaismäärällä (mukaan lukien false-positiiviset).
- Muista: Tämän luokan todellisten esiintymien osuus, joka ennustettiin oikein (true-positiiviset jaettuna kokonaismäärällä, jos tämän luokan esiintymiä vahvistustietojoukossa on, mukaan lukien false-negatiiviset – tapaukset, joissa malli ennusti virheellisesti eri luokan).
- F1-pisteet: Tarkkuuden ja paikannuksen yhdistetty mittausarvo (laskettuna tarkkuuden ja paikannuksen harmonisena keskiarvona ).
- Yhdistetty (painotettu) tarkkuus, paikannus ja F1-mittarit kaikille luokille.
Mitä regressioon tulee, useimmat koneoppimisen kehykset sisältävät luokkia, jotka voivat laskea luokitusmittareita. Esimerkiksi seuraava koodi käyttää Spark MLlib -kirjaston MulticlassificationEvaluator-kohdetta .
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)
Valvomattomien klusterointimallien arviointi
Valvomattomille klusterointimalleilla ei ole tunnettuja tositunnistearvoja. Klusterointimallin tavoitteena on ryhmitellä samankaltaisia tapauksia klustereiksi niiden ominaisuuksien perusteella. Klusterin arvioimiseksi tarvitset mittarin, joka ilmaisee klustereiden välisen erottelutason. Voit ajatella klusteroituja tapauksia monidimensioisessa tilassa piirretyinä pisteinä. Saman klusterin pisteiden on oltava lähellä toisiaan ja kaukana eri klusterin pisteistä.
Yksi tällainen mittausarvo on Siluetti-mittari , joka laskee neliömäisen euclidean-etäisyyden ja antaa viitteitä klustereiden johdonmukaisuudesta. Siluettiarvot voivat olla välillä 1 ja -1, ja arvo lähellä 1 osoittaa, että klusterin pisteet ovat lähellä muita pisteitä samassa klusterissa ja kaukana muiden klustereiden pisteistä.
Spark MLlib -kirjasto tarjoaa ClusteringEvaluator-luokan , joka laskee siluettikaavion klusterointimallin tekemille ennusteille seuraavasti:
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)