Điều này sẽ giới thiệu thiên vị vào những gì nên là số ngẫu nhiên?


11

Giả sử một tệp dữ liệu có hơn 80 triệu và số không, được tạo ngẫu nhiên.

Từ tệp này, chúng tôi muốn tạo một danh sách các số nguyên thập phân ngẫu nhiên.

Đây là kế hoạch để thực hiện chuyển đổi này.

  1. Chia 80 triệu chữ số thành các nhóm gồm 4 chữ số nhị phân.
  2. Chuyển đổi mỗi nhị phân 4 chữ số thành số thập phân.
  3. Hủy tất cả các giá trị thập phân lớn hơn 9.

Điều này sẽ dẫn đến một chuỗi các số nguyên ngẫu nhiên từ 0-9

Đây là mối quan tâm. 24 chữ số nhị phân bao gồm 6 nhóm gồm 4 chữ số nhị phân tương ứng với các giá trị 10 đến 15 chứa 17 số và chỉ có 7 số không. Sự mất cân bằng này sẽ ảnh hưởng đến việc phân phối số nguyên chẵn so với số nguyên lẻ hay thỏa hiệp tính ngẫu nhiên của chuỗi số thập phân cuối cùng theo bất kỳ cách nào?

Cập nhật: Từ các câu trả lời được đăng, có vẻ như phương pháp được liệt kê ở trên là âm thanh. Tôi đồng ý với kết luận đó. Tuy nhiên, tôi vẫn không hiểu tại sao việc loại bỏ nhiều hơn hai lần số 0 khỏi chuỗi nhị phân không làm sai lệch kết quả đối với các số lẻ ít hơn. Tôi tìm kiếm lời giải thích.


9
Có nhiều phương pháp hiệu quả hơn. Chẳng hạn, bạn có thể phân vùng chuỗi bit thành các nhóm 10, chuyển đổi chúng thành biểu diễn ba chữ số cơ sở 10 của chúng và loại bỏ bất kỳ có giá trị 1000 hoặc lớn hơn. Điều này sẽ sử dụng 97,6% số bit thay vì chỉ 62,5% trong số đó. Bạn không thể làm tốt hơn thế. (Bạn có thể sử dụng các nhóm 681 và chuyển đổi chúng thành chuỗi cơ sở 10 chữ số 205, do đó sử dụng gần 99,7% số bit.)
whuber

Câu trả lời:


18

Hãy đếm và xem. Bằng cách xây dựng tệp, tất cả các chuỗi 4 bit đều có khả năng như nhau. Có 16 chuỗi như vậy. Họ đây rồi:

 0. 0000
 1. 0001
 2. 0010
 3. 0011
 4. 0100
 5. 0101
 6. 0110
 7. 0111
 8. 1000
 9. 1001
10. 1010
11. 1011
12. 1100
13. 1101
14. 1110
15. 1111

Quy trình của bạn đưa ra các chuỗi từ 10 đến 15. Vì vậy, trong các trường hợp bạn thực sự sử dụng, bạn sẽ chọn 0 đến 9, mỗi chuỗi có khả năng như nhau, như mong muốn. Và chúng ta biết các chữ số thập phân được tạo ra độc lập với nhau vì mỗi chữ số sử dụng một chuỗi 4 bit riêng biệt và tất cả các bit là độc lập. Thủ tục của bạn tạo thành một loại lấy mẫu từ chối đơn giản .


5
Tôi thấy logic đó rõ ràng. Tuy nhiên, tôi lo ngại rằng tôi loại bỏ nhiều nhị phân 1 hơn 0. Tại sao sự mất cân bằng đó không có tác động?
Joel W.

5
@JoelW Tôi đoán tôi không thấy lập luận của bạn. Phân phối cuối cùng liên quan đến các chữ số thập phân, không phải bit, do đó việc phân phối bit là không liên quan.
Chuyên gia Kodi

7
Điều này là chính xác, nhưng nó chỉ giải quyết một phần câu hỏi. Để giải quyết phần "ngẫu nhiên thỏa hiệp ... theo bất kỳ cách nào" của câu hỏi, người ta cũng phải xác định rằng các chữ số thập phân kết quả là, với một xấp xỉ xuất sắc, độc lập . Để hoàn thiện, thật đáng để dành một câu giải thích cho kết quả (rõ ràng) đó.
whuber

7
Joel, tôi thấy bạn đến từ đâu. Có thể có một sự hiểu lầm ở đây: bạn không thể đảo ngược quá trình. Nếu bạn muốn xây dựng lại một luồng bit từ luồng các chữ số thập phân, bạn sẽ phải làm một cái gì đó như xóa tất cả 8 và 9 và chuyển đổi các chữ số còn lại thành bộ ba nhị phân. Điều đó sẽ khôi phục lại sự cân bằng. Trên thực tế, thật dễ dàng để thấy rằng "chuyến đi khứ hồi" này có thể phá vỡ luồng ban đầu của bạn thành các nybble bốn bit và loại bỏ các bit quan trọng nhất của chúng, để lại một chuỗi 60 triệu bit được phân phối đồng đều.
whuber

1
@whuber Đủ công bằng; thêm.
Kodiologist

4

Không có sai lệch vì bạn chỉ mô phỏng một số giá trị bị loại bỏ và tất cả các giá trị bao gồm cả các giá trị được giữ đều được tạo với cùng một xác suất: nhập mô tả hình ảnh ở đây

Mã R cho biểu đồ trên là

generza=matrix(sample(0:1,4*1e6,rep=TRUE),ncol=4)
uniz=generza[,1]+2*generza[,2]+4*generza[,3]+8*generza[,4]
barplot(hist(uniz[uniz<10],breaks=seq(-0.5,9.5,le=11))$counts,col="steelblue")
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.