scikit learn에서 기계 학습 알고리즘을 구현하고 싶지만이 매개 변수의 기능을 이해하지 못 random_state
합니까? 왜 사용해야합니까?
또한 의사 난수 (Pseudo-random) 숫자가 무엇인지 이해할 수 없었습니다.
scikit learn에서 기계 학습 알고리즘을 구현하고 싶지만이 매개 변수의 기능을 이해하지 못 random_state
합니까? 왜 사용해야합니까?
또한 의사 난수 (Pseudo-random) 숫자가 무엇인지 이해할 수 없었습니다.
답변:
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
하면 Run 1 의 출력이 Run 2 의 출력과 같을 것입니다 . 즉, 스플릿은 항상 동일합니다. 실제 random_state
숫자가 42, 0, 21 등은 중요 하지 않습니다 . 중요한 것은 42를 사용할 때마다 처음 분할 할 때 항상 동일한 출력을 얻는다는 것입니다. 이것은 예를 들어 문서에서 재현 가능한 결과를 원할 때 유용하므로 예제를 실행할 때 모든 사람이 동일한 숫자를 일관되게 볼 수 있습니다. 실제로 나는 말할 것입니다. random_state
물건을 테스트하는 동안 고정 숫자로 설정해야 하지만 실제로 무작위 (고정되지 않은) 스플릿이 필요한 경우 프로덕션에서 제거해야합니다.
두 번째 질문과 관련하여 의사 난수 생성기는 거의 임의의 숫자를 생성하는 숫자 생성기입니다. 그들이 무작위로 무작위가 아닌 이유는이 질문의 범위를 벗어 났으며 아마도 귀하의 경우에는 중요하지 않을 것입니다 . 자세한 내용 은 여기를 살펴보십시오 .
코드에서 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 값을 찾는 것이 중요합니다. 그런 다음이 숫자는 다른 연구 실험과 같은 다른 경우에 모델을 재현하는 데 사용됩니다. 그렇게하려면
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)`
randomstate가 없으면 시스템은 내부적으로 생성 된 randomstate를 사용합니다. 따라서 프로그램을 여러 번 실행하면 다른 기차 / 테스트 데이터 포인트가 표시되고 동작을 예측할 수 없게됩니다. 모델에 문제가있는 경우 프로그램을 실행할 때 생성 된 난수를 모르므로 모델을 다시 작성할 수 없습니다.
DT 또는 RF의 Tree Classifiers가 표시되면 최적의 계획을 사용하여 시험을 작성하려고합니다. 대부분의 경우이 계획은 동일 할 수 있지만 트리가 다를 수있는 예측이있을 수 있습니다. 모델을 디버깅하려고하면 Tree가 작성된 동일한 인스턴스를 다시 만들지 못할 수 있습니다. 따라서이 모든 번거 로움을 피하기 위해 DecisionTreeClassifier 또는 RandomForestClassifier를 빌드하는 동안 random_state를 사용합니다.
추신 : DecisionTree에서 Tree가 어떻게 만들어 졌는지 좀 더 깊이 이해할 수 있습니다.
randomstate는 기본적으로 문제가 실행될 때마다 문제를 재현하는 데 사용됩니다. traintestsplit에서 randomstate를 사용하지 않으면 분할 할 때마다 다른 기차 및 테스트 데이터 포인트 세트를 얻을 수 있으며 문제가 발생할 경우 디버깅에 도움이되지 않습니다.
문서에서 :
int이면 randomstate는 난수 생성기에서 사용하는 시드입니다. RandomState 인스턴스 인 경우 randomstate는 난수 생성기입니다. None이면 난수 생성기는 np.random에서 사용하는 RandomState 인스턴스입니다.
sklearn.model_selection.train_test_split(*arrays, **options)[source]
배열 또는 행렬을 임의의 기차 및 테스트 하위 집합으로 분할
Parameters: ...
random_state : int, RandomState instance or None, optional (default=None)
int이면 random_state는 난수 생성기에서 사용하는 시드입니다. RandomState 인스턴스 인 경우 random_state는 난수 생성기입니다. None 인 경우 난수 생성기는 np.random에서 사용하는 RandomState 인스턴스입니다. 출처 : http://scikit-learn.org/stable/modules/generated/sklearn.model_selection.train_test_split.html
랜덤 상태와 관련하여, 그것은 의사 난수 생성기에 전달 된 랜덤 시드를 결정하기 위해 sklearn의 많은 무작위 알고리즘에서 사용됩니다. 따라서 알고리즘의 동작에 영향을주지 않습니다. 결과적으로, 검증 세트에서 잘 수행 된 임의의 상태 값은 보이지 않는 새로운 테스트 세트에서 잘 수행되는 것과 일치하지 않습니다. . 실제로 알고리즘에 따라, 당신은 단지 훈련 샘플의 순서를 변경하여 완전히 다른 결과를 볼 수있는 '' '소스 : /stats/263999/is-random-state-a-parameter -조율하다