, 그냥 내가 NumPy와 일부 통계에 부트 스트랩 오류 추정을 위해 노력하고 있어요 하단 수평 라인NumPy로 여러 번 큰 배열을 샘플링하는 효율적인 방법은 무엇입니까? 당신은 내가 구현하기 위해 노력하고있어의 세부 사항에 대해 상관하지 않는 경우
과거 건너 뜁니다. 배열이 x
이고 오류 분석에서 일반적인 가우시안 가정이 적용되지 않는 통계량 f(x)
에서 오류를 계산하고자합니다. x
은 매우 큽니다.
numpy.random.choice()
를 사용하여
x
리샘플링,이 작업을 수행하려면이 나에게
x
의 새로운 구현을 제공
resample = np.random.choice(x, size=len(x), replace=True)
. 이 작업은 이제 정확한 오류 예측을하기 위해 ~ 1,000 번 반복해야합니다. 이 성질의 1,000 개의 리사이클을 생성한다면;
resamples = [np.random.choice(x, size=len(x), replace=True) for i in range(1000)]
하고 각 구현에 f(x)
통계치를 계산;
results = [f(arr) for arr in resamples]
는 뭔가 같은
np.std(results)
가우스 오류 분석을 사용하더라도 f(x)
자체 설명 할 수없는 것으로 생각, 배포 될 f(x)
의 오차를 추정 한 f(x)
대책에 임의의 오류가 있습니다 될 수 있습니다.
좋습니다. 부트 스트랩입니다. 이제 내 문제는 라인
resamples = [np.random.choice(x, size=len(x), replace=True) for i in range(1000)]
가 큰 배열에 대한 매우 느린 것입니다. 목록 이해없이 이것을 할 수있는 현명한 방법이 있습니까? 두 번째 목록 이해
results = [f(arr) for arr in resamples]
함수 f(x)
의 세부 사항에 따라, 꽤 느릴 수 있습니다.우리는 반복을 허용하고 있기 때문에
서브 샘플을 작성하지 않으려면 대신 샘플에 해당 데이터가 포함되어 있으면 1이고 그렇지 않은 경우에는 0 인 플래그 배열을 작성하십시오. 그런 다음 하위 샘플을 만드는 것은 플래그를 치환하는 것을 의미합니다. 서브 샘플 배열을 할당하고 채우는 것이 계산 시간의 상당 부분이라면 플래그로 작업하는 것이 승리입니다. –
@ RobertDodier 감사합니다! 이것은 인덱싱보다는 배열 마스킹을 사용하지만 Divakar의 대답과 매우 유사합니다. 나는 그것들 중 어느 것이 더 빨라질 지 확신하지 못한다. – Anonymous
네, 단지 인덱스 목록을 사용하는 것은 동등하고 단순히 데이터를 포함/제외해야하는 경우 더 간단 할 수 있습니다. 1이나 0 이외의 다른 가중치를 원했던 경우가 많습니다. 가중치> 1을 사용하여 일부 샘플을 대체하거나 강조하는 샘플링을 나타낼 수 있습니다 (예 : 데이터의 예제가 적은 클래스). 0가 아닌 가중치가 필요하지 않은 경우 색인 목록 만 사용할 수 있습니다. –