Trening i testowanie w uczeniu maszynowym
- Poprzednia strona Skalowanie
- Następna strona Drzewo decyzji
Ocena modelu
W uczeniu maszynowym tworzymy modele, aby przewidywać wyniki pewnych wydarzeń, podobnie jak w poprzednim rozdziale, gdy poznawaliśmy wagę i pojemność silnika, przewidywaliśmy emisję CO2 pojazdów.
Aby ocenić, czy model jest wystarczająco dobry, możemy użyć metody nazywanej treningiem/testowaniem.
Co to jest trening/testowanie
Trening/testowanie to metoda pomiaru dokładności modelu.
Nazywamy to treningiem/testowaniem, ponieważ dzielimy zestaw danych na dwie grupy: zestaw treningowy i zestaw testowy.
80% na trening, 20% na testowanie.
Możesz użyć zestawu treningowego do trenowania modelu.
Możesz użyć zestawu testowego do testowania modelu.
Trenowanie modelu oznacza tworzenie modelu.
Testowanie modelu oznacza testowanie dokładności modelu.
Zacznijmy od danych.
Zacznijmy od danych do testowania.
Nasza kolekcja danych pokazuje 100 klientów sklepowych oraz ich nawyki zakupowe.
Przykład
import numpy import matplotlib.pyplot as plt numpy.random.seed(2) x = numpy.random.normal(3, 1, 100) y = numpy.random.normal(150, 40, 100) / x plt.scatter(x, y) plt.show()
Wynik:
Oś X reprezentuje liczbę minut przed zakupem.
Oś Y reprezentuje kwotę wydaną na zakup.

Podział na trening i test
Zbiór treningowy powinien stanowić losową selekcję 80% oryginalnych danych.
Zbiór testowy powinien stanowić 20% reszty.
train_x = x[:80] train_y = y[:80] test_x = x[80:] test_y = y[80:]
Pokazanie zbioru treningowego
Pokazanie wykresu punktowego identycznego z zbiorem treningowym:
Przykład
plt.scatter(train_x, train_y) plt.show()
Wynik:
Zbiór testowy wygląda podobnie do oryginalnego zbioru danych, więc wydaje się to rozsądnym wyborem:

Pokazanie zbioru testowego
Aby upewnić się, że zbiór testowy nie jest zupełnie inny, zobaczymy również zbiór testowy.
Przykład
plt.scatter(test_x, test_y) plt.show()
Wynik:
Zbiór testowy wygląda podobnie do oryginalnego zbioru danych:

Dopasowanie danych
Jakie są dane? Sądzę, że najbardziej odpowiednim dopasowaniem jest regresja wielomianowa, więc narysujmy linię regresji wielomianowej.
Aby narysować linię przez punkty danych, używamy modułu matplotlib plott()
Metoda:
Przykład
Narysuj linię regresji wielomianowej przechodzącą przez punkty danych:
import numpy import matplotlib.pyplot as plt numpy.random.seed(2) x = numpy.random.normal(3, 1, 100) y = numpy.random.normal(150, 40, 100) / x train_x = x[:80] train_y = y[:80] test_x = x[80:] test_y = y[80:] mymodel = numpy.poly1d(numpy.polyfit(train_x, train_y, 4)) myline = numpy.linspace(0, 6, 100) plt.scatter(train_x, train_y) plt.plot(myline, mymodel(myline)) plt.show()
Wynik:

Ten wynik może wspierać naszą sugestię dotyczącą dopasowania zbioru danych do regresji wielomianowej, nawet jeśli próba przewidywania wartości poza zbiorem danych może przynieść nam niektóre dziwne wyniki. Na przykład: ten wiersz wskazuje, że klient spędził 6 minut na zakupach w sklepie, a następnie dokonał zakupu o wartości 200. To może być znak przeciążenia.
Ale co z R-squared score? R-squared score dobrze wskazuje na stopień dopasowania mojego zbioru danych do modelu.
R2
Pamiętasz R2, również zwaną R-kwadrat (R-squared)?
Mierzy on związek między osiami x i y, z wartością w zakresie od 0 do 1, gdzie 0 oznacza brak związku, a 1 - pełny związek.
Moduł sklearn ma nazwę rs_score()
Metoda, która pomoże nam znaleźć ten związek.
Tutaj mierzymy czas, który klienci spędzają w sklepie, w stosunku do tego, ile pieniędzy wydają.
Przykład
Jakie jest dopasowanie naszych danych treningowych w przypadku regresji wielomianowej?
import numpy from sklearn.metrics import r2_score numpy.random.seed(2) x = numpy.random.normal(3, 1, 100) y = numpy.random.normal(150, 40, 100) / x train_x = x[:80] train_y = y[:80] test_x = x[80:] test_y = y[80:] mymodel = numpy.poly1d(numpy.polyfit(train_x, train_y, 4)) r2 = r2_score(train_y, mymodel(train_x)) print(r2)
Komentarz:Wynik 0.799 wskazuje na dobry związek.
Wprowadzenie zbioru testowego
Teraz, przynajmniej w przypadku danych treningowych, mamy już dobry model.
Później użyjemy danych testowych do testowania modelu, aby sprawdzić, czy daje on takie same wyniki.
Przykład
Pozwólmy sobie określić współczynnik R2, gdy używamy danych testowych:
import numpy from sklearn.metrics import r2_score numpy.random.seed(2) x = numpy.random.normal(3, 1, 100) y = numpy.random.normal(150, 40, 100) / x train_x = x[:80] train_y = y[:80] test_x = x[80:] test_y = y[80:] mymodel = numpy.poly1d(numpy.polyfit(train_x, train_y, 4)) r2 = r2_score(test_y, mymodel(test_x)) print(r2)
Komentarz:Wynik 0,809 wskazuje, że model jest również odpowiedni dla zbioru testowego, jesteśmy pewni, że możemy użyć tego modelu do przewidywania przyszłych wartości.
Wartości przewidywane
Teraz, gdy już potwierdziliśmy, że nasz model jest dobry, możemy zacząć przewidywać nowe wartości.
Przykład
Ile pieniędzy klient, który kupi, wyda, jeśli spędzi 5 minut w sklepie?
print(mymodel(5))
Przykładowa prognoza wydatków klienta wynosi 22,88 USD, co wydaje się odpowiadać wykresowi:

- Poprzednia strona Skalowanie
- Następna strona Drzewo decyzji