Scikit 학습의 랜덤 상태(의사 난수)
learn에 이 parameter scikit learn이 random_state
그래요? 제가 왜 그것을 사용해야 합니까?
저는 또한 의사 난수가 무엇인지 이해할 수 없었습니다.
train_test_split
배열 또는 행렬을 랜덤 트레인 및 검정 하위 집합으로 나눕니다.즉, 지정하지 않고 실행할 때마다random_state
다른 결과를 얻을 수 있습니다. 이것은 예상되는 동작입니다.예:
실행 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]]
실행 2
>>> train_test_split(a, b)
[array([[8, 9],
[4, 5],
[0, 1]]),
array([[6, 7],
[2, 3]]), [4, 2, 0], [3, 1]]
변합니다.반면에 만약 당신이 사용한다면.random_state=some_number
그러면 실행 1의 출력이 실행 2의 출력과 같음을 보장할 수 있습니다. 즉, 분할은 항상 동일합니다.실제가 무엇인지는 중요하지 않습니다.random_state
번호는 42, 0, 21, ....중요한 것은 할 때마다 입니다.중요한 것은 42를 사용할 때마다 처음 분할할 때 항상 동일한 출력을 얻을 수 있다는 것입니다.이 기능은 모든 사용자가 예제를 실행할 때 동일한 번호를 일관되게 볼 수 있도록 문서에서 등과 같이 재현 가능한 결과를 원하는 경우에 유용합니다.실제로, 당신은 다음과 같이 설정해야 합니다.random_state
제품을 테스트하는 동안 고정된 숫자로 변경할 수 있습니다. 하지만 실제로는 고정되지 않은 임의 분할이 필요한 경우 해당 항목을 제거할 수 있습니다.
두 번째 질문과 관련하여 의사 난수 생성기는 거의 실제 난수를 생성하는 숫자 생성기입니다.이 질문들이 실제로 무작위적이지 않은 이유는 이 질문의 범위에서 벗어나 있으며 귀하의 경우에는 문제가 되지 않을 것입니다. 자세한 내용은 여기에서 확인할 수 있습니다.
을 random_state
코드에서 코드를 실행(실행)할 때마다 새로운 랜덤 값이 생성되고, 매번 트레인 및 테스트 데이터 세트의 값이 달라집니다.
, 그나다같음처럼 random_state = 42
코드를 아무리 실행해도 결과는 동일합니다. 즉, 열차 및 테스트 데이터 세트의 동일한 값이 됩니다.
음, "랜덤 상태"가 무엇이고 왜 그것이 사용되는지에 대한 질문은 위의 사람들에 의해 좋게 대답되었습니다.저는 "왜 우리는 기계 학습 모델을 훈련하는 동안 무작위 상태를 42로 매우 자주 선택하는가?"라는 질문에 답하려고 합니다. "왜 우리는 12, 32, 5를 선택하지 않습니까?" "과학적인 설명이 있습니까?
많은 학생들과 실무자들이 이 숫자(42)를 무작위 상태로 사용하는데, 그 이유는 온라인 강의에서 많은 강사들이 사용하기 때문입니다.그들은 종종 무작위 상태 또는 numpy seed를 42번으로 설정하고 학습자들은 그것을 별로 생각하지 않고 같은 연습을 따릅니다.
구체적으로 말하면, 42는 AI나 ML과 관련이 없습니다.실제로 일반적인 숫자입니다. 머신 러닝에서는 실제 임의의 숫자가 얼마인지는 중요하지 않습니다. scikit API 문서에서 언급한 것처럼 어떤 정수로도 당면한 작업에 충분합니다.
42는 히치하이커 가이드에서 나온 은하수 책에 대한 참조입니다.삶의 우주와 모든 것에 대한 답은 농담으로 의미됩니다.그것은 다른 의미가 없습니다.
참조:
- 위키피디아: 은하수로 가는 히치하이커들의 안내서
- 스택 교환:무작위를 나타낼 때 숫자 42가 선호되는 이유
- 왜 42번일까요?
- 쿼라: 무작위를 나타낼 때 숫자 42가 선호되는 이유
- 유튜브:열차 시험 분할에서 무작위 상태의 사용을 설명하는 Nice Simple 비디오
코드에서 random_state를 언급하지 않으면 코드를 실행할 때마다 새로운 랜덤 값이 생성되고 트레인 및 테스트 데이터 세트의 값이 매번 다릅니다.
그러나 매번 random_state에 특정 값(random_state = 1 또는 다른 값)을 사용하면 결과가 동일하게 됩니다. 즉, 열차 및 테스트 데이터 세트에서 동일한 값이 됩니다.아래 코드 참조:
import pandas as pd
from sklearn.model_selection import train_test_split
test_series = pd.Series(range(100))
size30split = train_test_split(test_series,random_state = 1,test_size = .3)
size25split = train_test_split(test_series,random_state = 1,test_size = .25)
common = [element for element in size25split[0] if element in size30split[0]]
print(len(common))
코드를 몇 번 실행하든 상관없이 출력은 70입니다.
70
random_state를 제거하고 코드를 실행해 보십시오.
import pandas as pd
from sklearn.model_selection import train_test_split
test_series = pd.Series(range(100))
size30split = train_test_split(test_series,test_size = .3)
size25split = train_test_split(test_series,test_size = .25)
common = [element for element in size25split[0] if element in size30split[0]]
print(len(common))
이제 코드를 실행할 때마다 출력이 달라집니다.
random_state number는 테스트 및 훈련 데이터 세트를 무작위 방식으로 분할합니다.여기서 설명하는 내용 외에도 random_state 값이 모형의 품질에 상당한 영향을 미칠 수 있다는 것을 기억하는 것이 중요합니다(품질이란 기본적으로 예측 정확도를 의미합니다).예를 들어, random_state 값을 지정하지 않고 특정 데이터 세트를 사용하여 회귀 모델을 학습하면 매번 테스트 데이터에서 학습된 모델에 대해 다른 정확도 결과를 얻을 수 있습니다.따라서 가장 정확한 모형을 제공하기 위해 최적의 random_state 값을 찾는 것이 중요합니다.그런 다음 이 숫자는 다른 연구 실험과 같은 다른 경우에 모델을 복제하는 데 사용됩니다.이를 위해, 랜덤 번호를 random_state 매개변수에 할당함으로써 for-loop에서 모델을 분할하고 훈련시킬 수 있습니다.
for j in range(1000):
X_train, X_test, y_train, y_test = train_test_split(X, y , random_state =j, test_size=0.35)
lr = LarsCV().fit(X_train, y_train)
tr_score.append(lr.score(X_train, y_train))
ts_score.append(lr.score(X_test, y_test))
J = ts_score.index(np.max(ts_score))
X_train, X_test, y_train, y_test = train_test_split(X, y , random_state =J, test_size=0.35)
M = LarsCV().fit(X_train, y_train)
y_pred = M.predict(X_test)`
제공된 임의 상태가 없는 경우 시스템은 내부적으로 생성된 임의 상태를 사용합니다.따라서 프로그램을 여러 번 실행하면 다른 교육/테스트 데이터 지점이 표시될 수 있으며 동작을 예측할 수 없습니다.모델에 문제가 있는 경우 프로그램을 실행할 때 생성된 난수를 모르기 때문에 모델을 재생성할 수 없습니다.
트리 분류자(DT 또는 RF)가 표시되면 최적의 계획을 사용하여 시도를 구성하려고 합니다.대부분의 경우 이 계획은 동일할 수 있지만 트리가 다를 수 있으므로 예측이 다를 수 있습니다.모델을 디버그할 때 트리가 작성된 동일한 인스턴스를 다시 만들지 못할 수 있습니다.따라서 이러한 번거로움을 피하기 위해 의사결정을 작성하는 동안 random_state를 사용합니다.트리 분류기 또는 임의 포리스트 분류기입니다.
PS: 트리가 어떻게 구축되는지에 대해 조금 더 자세히 설명할 수 있습니다.이것을 더 잘 이해할 수 있는 나무.
랜덤 상태는 기본적으로 실행될 때마다 동일하게 문제를 재현하는 데 사용됩니다.열차 테스트 분할에서 임의 상태를 사용하지 않으면 분할할 때마다 다른 열차 및 테스트 데이터 포인트 집합이 나타날 수 있으며 문제가 발생할 경우 디버깅에 도움이 되지 않습니다.
문서에서:
int인 경우 랜덤 상태는 난수 생성기에서 사용되는 시드이고, 랜덤 상태 인스턴스인 경우 랜덤 상태는 난수 생성기이며, None인 경우 난수 생성기는 np.랜덤에서 사용되는 랜덤 상태 인스턴스입니다.
1에서 10 사이의 숫자로 구성된 데이터 세트가 있고 이를 교육 데이터 세트와 테스트 데이터 세트로 나누고 테스트 데이터 세트의 크기가 전체 데이터 세트의 20%인 시나리오를 생각해 보십시오.
교육 데이터 세트에는 8개의 데이터 샘플이 있고 테스트 데이터 세트에는 2개의 데이터 샘플이 있습니다.우리는 코드를 재현할 수 있도록 무작위 프로세스가 매번 동일한 결과를 출력하도록 보장합니다.데이터 세트를 섞지 않으면 매번 다른 데이터 세트가 생성되고, 매번 다른 데이터로 모델을 훈련시키는 것은 좋지 않습니다.
모든 랜덤 데이터 세트에 대해 각 데이터 세트에는random_state
가치. 이것은 그것을 의미합니다.random_state
value에는 고정된 데이터 세트가 있으므로 코드를 실행할 때마다random_state
값 1: 동일한 분할 데이터 세트를 생성합니다.
아래 이미지는 모든 것을 보여줍니다.random_state
수행:
참고 항목:random_state란 무엇입니까?
sklearn.model_selection.train_test_split(*arrays, **options)[source]
배열 또는 행렬을 랜덤 트레인 및 검정 하위 집합으로 분할
Parameters: ...
random_state : int, RandomState instance or None, optional (default=None)
int인 경우 random_state는 난수 생성기에서 사용되는 시드이고, random_state 인스턴스인 경우 random_state는 난수 생성기이며, None인 경우 random은 np.random에서 사용되는 난수 생성기입니다.출처: http://scikit-learn.org/stable/modules/generated/sklearn.model_selection.train_test_split.html
'난수 상태와 관련하여, sklearn의 많은 랜덤화 알고리즘에서 의사 난수 생성기로 전달되는 랜덤 시드를 결정하기 위해 사용됩니다.따라서 알고리즘 동작의 어떤 측면도 통제하지 않습니다.결과적으로, 검증 세트에서 잘 수행된 랜덤 상태 값은 보이지 않는 새로운 테스트 세트에서 잘 수행되는 값과 일치하지 않습니다.실제로, 알고리즘에 따라 훈련 샘플의 순서를 변경하는 것만으로도 완전히 다른 결과를 볼 수 있습니다.' 자료: https://stats.stackexchange.com/questions/263999/is-random-state-a-parameter-to-tune
언급URL : https://stackoverflow.com/questions/28064634/random-state-pseudo-random-number-in-scikit-learn
'programing' 카테고리의 다른 글
재할당이 이전 내용을 덮어쓰나요? (0) | 2023.06.15 |
---|---|
화이트리스트에 있는 링크에 대해 Firebase에서 "도메인이 화이트리스트에 없음"으로 표시됨 (0) | 2023.06.10 |
모듈을 찾을 수 없음: 오류:'C:\dev\jszip-test\node_modules\jszip\lib'에서 '스트림'을(를) 확인할 수 없습니다. (0) | 2023.06.10 |
상수 대 정적 상수 (0) | 2023.06.10 |
매개 변수로 사용되는 SQL 쿼리의 python 목록 (0) | 2023.06.10 |