Chcę zaimplementować algorytm uczenia maszynowego w scikit Learn, ale nie rozumiem, do czego służy ten parametr random_state
? Dlaczego powinienem go używać?
Nie mogłem też zrozumieć, co to jest liczba pseudolosowa.
źródło
Chcę zaimplementować algorytm uczenia maszynowego w scikit Learn, ale nie rozumiem, do czego służy ten parametr random_state
? Dlaczego powinienem go używać?
Nie mogłem też zrozumieć, co to jest liczba pseudolosowa.
train_test_split
dzieli tablice lub macierze na losowe podzbiory pociągu i testowania. Oznacza to, że za każdym razem, gdy uruchomisz go bez określenia random_state
, otrzymasz inny wynik, jest to oczekiwane zachowanie. Na przykład:
Bieg 1:
>>> a, b = np.arange(10).reshape((5, 2)), range(5)
>>> train_test_split(a, b)
[array([[6, 7],
[8, 9],
[4, 5]]),
array([[2, 3],
[0, 1]]), [3, 4, 2], [1, 0]]
Uruchom 2
>>> train_test_split(a, b)
[array([[8, 9],
[4, 5],
[0, 1]]),
array([[6, 7],
[2, 3]]), [4, 2, 0], [3, 1]]
To się zmienia. Z drugiej strony, jeśli użyjesz random_state=some_number
, możesz zagwarantować, że wynik Run 1 będzie równy wynikowi Run 2 , tj. Twój podział będzie zawsze taki sam. Nie ma znaczenia, jaka jest rzeczywista random_state
liczba 42, 0, 21, ... Ważne jest to, że za każdym razem, gdy użyjesz 42, zawsze otrzymasz ten sam wynik przy pierwszym podziale. Jest to przydatne, jeśli chcesz uzyskać powtarzalne wyniki, na przykład w dokumentacji, aby każdy mógł konsekwentnie widzieć te same liczby podczas uruchamiania przykładów. W praktyce powiedziałbym, że powinieneś ustawić na random_state
jakąś stałą liczbę podczas testowania rzeczy, ale potem usuń to w produkcji, jeśli naprawdę potrzebujesz losowego (a nie stałego) podziału.
Jeśli chodzi o twoje drugie pytanie, generator liczb pseudolosowych to generator liczb, który generuje prawie prawdziwie losowe liczby. Dlaczego nie są one naprawdę przypadkowe, nie wchodzi w zakres tego pytania i prawdopodobnie nie będzie miało znaczenia w twoim przypadku, możesz spojrzeć tutaj, aby uzyskać więcej szczegółów.
Jeśli nie określisz
random_state
w swoim kodzie, to za każdym razem, gdy uruchamiasz (wykonujesz) kod, generowana jest nowa losowa wartość, a zestawy danych pociągu i testowe będą miały różne wartości za każdym razem.Jeśli jednak przypisana jest stała wartość, tak jak
random_state = 42
wtedy, bez względu na to, ile razy wykonasz kod, wynik będzie taki sam .ie, te same wartości w zestawach danych trenowania i testowania.źródło
Jeśli nie wspomnisz o random_state w kodzie, to za każdym razem, gdy wykonujesz kod, generowana jest nowa losowa wartość, a zestawy danych pociągu i testowe będą miały różne wartości za każdym razem.
Jeśli jednak użyjesz określonej wartości dla random_state (random_state = 1 lub dowolna inna wartość) za każdym razem wynik będzie taki sam, tj. Takie same wartości w zestawach danych pociągu i testowych. Zobacz poniższy kod:
Nie ma znaczenia, ile razy uruchomisz kod, wynik będzie wynosił 70.
Spróbuj usunąć random_state i uruchom kod.
Teraz wynik będzie inny za każdym razem, gdy wykonasz kod.
źródło
random_state number dzieli zestawy danych testowych i szkoleniowych w sposób losowy. Oprócz tego, co zostało tutaj wyjaśnione, ważne jest, aby pamiętać, że wartość random_state może mieć znaczący wpływ na jakość modelu (przez jakość rozumiem zasadniczo dokładność przewidywania). Na przykład, jeśli weźmiesz pewien zestaw danych i wytrenujesz z nim model regresji, bez określania wartości random_state, istnieje możliwość, że za każdym razem uzyskasz inny wynik dokładności dla wytrenowanego modelu na danych testowych. Dlatego ważne jest, aby znaleźć najlepszą wartość random_state, aby zapewnić najdokładniejszy model. Następnie ta liczba zostanie wykorzystana do odtworzenia twojego modelu przy innej okazji, takiej jak inny eksperyment badawczy. Aby to zrobić,
źródło
Jeśli nie ma podanego stanu losowego, system użyje stanu losowego wygenerowanego wewnętrznie. Tak więc, gdy uruchamiasz program wiele razy, możesz zobaczyć różne punkty danych pociągu / testu, a zachowanie będzie nieprzewidywalne. W przypadku, gdy masz problem z modelem, nie będziesz w stanie go odtworzyć, ponieważ nie znasz liczby losowej, która została wygenerowana podczas uruchamiania programu.
Jeśli widzisz klasyfikatory drzew - DT lub RF, próbują zbudować próbę, używając optymalnego planu. Chociaż w większości przypadków ten plan może być taki sam, mogą wystąpić przypadki, w których drzewo może być inne, a więc prognozy. Podczas próby debugowania modelu możesz nie być w stanie odtworzyć tej samej instancji, dla której zbudowano drzewo. Tak więc, aby uniknąć tych wszystkich kłopotów, używamy random_state podczas budowania DecisionTreeClassifier lub RandomForestClassifier.
PS: Możesz trochę pogłębić sposób budowy drzewa w DecisionTree, aby lepiej to zrozumieć.
randomstate jest zasadniczo używane do odtwarzania twojego problemu w ten sam sposób za każdym razem, gdy jest uruchamiany. Jeśli nie użyjesz losowego stanu w traintestsplit, za każdym razem, gdy dokonasz podziału, możesz otrzymać inny zestaw punktów danych pociągu i testowych i nie pomoże ci w debugowaniu w przypadku wystąpienia problemu.
Z Doc:
Jeśli int, randomstate jest ziarnem używanym przez generator liczb losowych; Jeśli instancja RandomState, randomstate jest generatorem liczb losowych; Jeśli Brak, generator liczb losowych jest instancją RandomState używaną przez np.random.
źródło
Podziel tablice lub macierze na losowe podzbiory pociągu i testowania
Jeśli int, random_state jest ziarnem używanym przez generator liczb losowych; Jeśli instancja RandomState, random_state jest generatorem liczb losowych; Jeśli Brak, generator liczb losowych jest instancją RandomState używaną przez np.random. źródło: http://scikit-learn.org/stable/modules/generated/sklearn.model_selection.train_test_split.html
'' 'Jeśli chodzi o stan losowy, jest on używany w wielu algorytmach randomizowanych w sklearn do określania losowego ziarna przesyłanego do generatora liczb pseudolosowych. Dlatego nie reguluje żadnego aspektu zachowania algorytmu. W konsekwencji losowe wartości stanu, które wypadły dobrze w zbiorze walidacyjnym, nie odpowiadają tym, które działałyby dobrze w nowym, niewidocznym zestawie testowym. Rzeczywiście, w zależności od algorytmu, możesz zobaczyć zupełnie inne wyniki, zmieniając po prostu kolejność próbek szkoleniowych. '' 'Źródło: /stats/263999/is-random-state-a-parameter -dostroić
źródło