문제

훨씬 더 많은 양의 데이터로 소량의 데이터를 임의의 순서로 어떻게 배포합니까?

예를 들어, 수천 줄의 '실제'데이터가 있으며 '실제'데이터 전체에서 12 개 또는 두 줄의 제어 데이터를 임의 순서로 삽입하고 싶습니다.

이제 나는 임의의 숫자 생성기를 사용하는 방법을 묻지 않고 통계적 질문을하고 있습니다. 나는 임의 숫자를 생성하는 방법을 알고 있지만 내 질문은 데이터가 동시에 파일을 통해 상당히 균등하게 흩어져 있습니다.

임의의 숫자를 생성하는 데 의존한다면 모든 제어 데이터 또는 적어도 덩어리가 상당히 좁은 '실제'데이터 선택에 삽입 될 가능성이 있습니다 (매우 작은 것). 이런 일이 발생하지 않도록하는 가장 좋은 방법은 무엇입니까?

다른 방법으로 말하면, 제 3자가 어떤 행을 제어하고 실제인지 계산할 수있는 방법이 없으면 실제 데이터 전체에 제어 데이터를 삽입하고 싶습니다.


업데이트 : 나는 이것을 '커뮤니티 위키'로 만들었습니다. 누군가 내 질문을 편집하고 싶다면 더 의미가 있습니다.
업데이트 : 예제를 시도해 봅시다 (코딩 질문이 아니기 때문에이 언어 나 플랫폼을 의존하고 싶지는 않지만 통계적 질문입니다).

  • 3000 행의 '실제'데이터가 있습니다 (이 금액은 사용자가 가진 데이터의 양에 따라 실행에서 실행으로 변경됩니다).
  • 20 행의 '제어'데이터가 있습니다 (다시, 이것은 사용자가 사용하려는 컨트롤 행의 수에 따라 변경됩니다.

이제이 20 개의 '제어'행을 삽입하고 싶습니다. 대충 150 행 또는 '실제'데이터가 삽입 된 후 (3000/20 = 150). 그러나 출력 데이터의 위치에 따라 제어 행을 간단하게 식별 할 수 있기를 원하지 않기 때문에 정확한 것이 정확히 원하지 않습니다.

그러므로 나는 신경 쓰지 않는다 약간 '컨트롤'행이 함께 뭉치거나 약간 '제어'행이 거의 없거나 전혀없는 섹션이지만 일반적으로 데이터 전체에 '제어'행이 상당히 균등하게 분산되기를 원합니다.

도움이 되었습니까?

해결책

당신이 정말로 무작위로한다면 그들이 서로 가까워 질 가능성이 항상 있습니다 :)

그러나 내가 할 일은 다음과 같습니다.

  1. 당신은 가지고 있습니다 N 실제 데이터 행 및 x제어 데이터
  2. 행 색인을 얻으려면 삽입해야합니다. i-TH CONTROL ROW, 나는 사용할 것이다 : N/(x+1) * i + r, 어디 r 각 컨트롤 행에 대해 약간의 임의의 숫자입니다. N/x. 결정 방법을 선택하십시오 r, 그것은 둘 중 하나 일 수 있습니다 가우스 또는 평평한 분포. i 제어 행의 색인이므로 1<=i<x
  3. 이렇게하면 한 번에 제어 행을 응축하지 않도록 할 수 있습니다. 또한 서로 정기적으로 떨어지지 않을 것이라고 확신 할 수 있습니다.

다른 팁

여기 내 생각이 있습니다. 기존 행을 반복하고 각 행에 "코인을 뒤집어"하여 임의의 데이터를 삽입할지 여부를 결정하십시오.

for (int i=0; i<numberOfExistingRows; i++)
{    
    int r = random();
    if (r > 0.5)
    {
        InsertRandomData();
    }    
}

이것은 데이터 전체에 걸쳐 좋은 무작위 분포를 제공해야합니다.

다음 예제에 대해 3000 개의 실제 데이터 행과 20 개의 컨트롤 행을 사용합니다 (영어보다 예를 들어 더 좋습니다)

3000 개의 실제 데이터 행 사이에 가능한 한 20 개의 컨트롤 행을 150 번째 실제 데이터 행에 하나씩 삽입해야합니다. 따라서 다음 삽입 인덱스를 위해 그 숫자 150을 선택하십시오.
a) 0과 150 사이의 난수를 생성하고 삽입 인덱스에서 빼냅니다.
b) 컨트롤 행을 거기에 삽입하십시오.
c) 삽입 지수 증가 150
d) 단계 a)에서 반복

물론 이것은 매우 조잡한 알고리즘이며 몇 가지 개선이 필요합니다 :)

실제 데이터가 제어 데이터보다 크거나 크면 제어 데이터에 대한 간격을 생성하십시오.

따라서 임의의 간격을 선택하고 실제 데이터 라인을 복사하고 제어 데이터를 삽입하고 완료 될 때까지 반복하십시오. 그 임의의 간격을 선택하는 방법?

실제 데이터 크기로 평균 설정을 사용하여 가우시안 편차를 사용하여 제어 데이터 크기로 나눈 값을 사용하는 것이 좋습니다. 전자는 측정 또는 가정하지 않고 필요한 경우 추정 될 수 있습니다. 당신이 용납하고자하는 "스프레드"를 기준 으로이 가우시안의 표준 편차를 설정하십시오. 더 작은 stddev는 더 나선형 분포가 균일 한 간격에 대한 더 엄격한 준수를 의미한다는 것을 의미합니다. 더 큰 stdev는 더 많은 플라티 쿠르틱 분포와 균일 한 간격에 대한 느슨한 준수를 의미합니다.

이제 파일의 첫 번째 및 마지막 섹션은 어떻습니까? 즉, 처음 또는 끝에서 제어 데이터를 삽입하는 것은 어떻습니까? 당신이 할 수있는 한 가지는 이에 대한 특수 사례 추정치를 제시하는 것입니다. 그러나 좋은 트릭은 다음과 같습니다. 가우스 평균의 절반에서 실제 데이터로 "색인"을 시작하고 첫 번째 편의를 생성합니다. 실제 데이터에 "색인"이 합법적이 될 때까지 실제 데이터를 출력하지 마십시오. 데이터 끝에있는 대칭 트릭도 잘 작동해야합니다 (간단히 : 간단히 : 가우시안의 절반 이상이 실제 데이터의 끝을 넘어서는 "색인"에 도달 할 때까지 계속 발전합니다. 끝, 마지막에 데이터를 생성합니다.

당신은 단순한 통계 이상의 것을보고 싶어합니다. 그것은 기초적인 대기열 이론을 볼 수있는 이런 종류의 알고리즘을 개발하는 데 도움이됩니다. Wikipedia 또는 Turing Omnibus를 참조하십시오. 제목은 "시뮬레이션"인 주제에 대한 멋진 장이 있습니다.

또한 : 일부 상황에서 비 가우스 분포, 특히 포아송 분포는 이런 종류의 일에 대해 더 나은 자연스러운 결과를 제공합니다. 위의 알고리즘 개요는 여전히 분포의 절반의 절반을 사용하여 적용됩니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top