2015-01-22 2 views
0

1과 2의 행렬을가집니다. 나는 무작위로 (교체하지 않고) 지정된 가중치로 2 행을 샘플링하려고합니다. 이것은 내가 여기서 한 짓이다. (내 생각?) :Matlab은 임의로 가중치가있는 행을 샘플링합니다.

x = [1 1 1 2 1; 1 2 1 1 1; 1 1 1 1 1; 1 2 2 1 2; 1 2 2 1 1]; 

w1 = 1; % weight of ones 
w2 = 4; % weight of twos 

sum_wts = sum(w1.*(x==1),2) + sum(w2.*(x==2),2); %normalise weights 
norm_weights = sum_wts./sum(sum_wts); 

row_ind = randsample([1:size(x,1)], 2, true, norm_weights); %take random sample 
new_x = x(row_ind,:); 

2 개에 주어진 가중치를 더하고 싶습니다. 예를 들어, 3 개의 2가 들어간 행은 2 개의 2가 포함 된 행과 비교하여 선택 될 가능성이 큽니다. 내가 여기서 한 짓 이니? 이 작업을 올바르게 수행했는지 확인할 방법이 확실하지 않습니다 ...

답변

1

코드가 올바르게 작동하는 것 같습니다. 이 같은 매트릭스를 생성하여 그것을 테스트 :

[2 1 1 1 1 
2 2 1 1 1 
2 2 2 1 1 
2 2 2 2 1 
2 2 2 2 2] 

과 코드를 만드는 큰 샘플 수, 종종 행 N웠다 방법에 대한 히스토그램을 생성한다. 코드가 작동하면 바가 n이 증가함에 따라 막대가 커야합니다. 즉, 행 5가 행 4보다 가능성이 높습니다. 빨간색 선은 가중치를 기반으로하며 행의 예상 개수입니다. 엔.

x=ones(5)+tril(ones(5)) 
w1 = 1; % weight of ones 
w2 = 4; % weight of twos 

sum_wts = sum(w1*(x==1),2) + sum(w2*(x==2),2); %normalise weights 
norm_weights = sum_wts./sum(sum_wts); 

row_ind = randsample([1:size(x,1)], 2000000, true, norm_weights); %take random sample 
new_x = x(row_ind,:); 
hist(row_ind,1:5) 
hold on 
plot(1:5,2000000*norm_weights,'r','LineWidth',4) 
hold off 

그리고 결과 enter image description here

+0

대 :

여기에 코드입니다! 고마워. – user2861089