Tôi nghĩ bạn hiểu nhầm đối số đầu tiên, y
, trong số entropy()
đại diện. Như đã đề cập trong ?entropy
, nó cung cấp một vectơ đếm. Những con số này cùng nhau đưa ra các tần số tương đối của từng biểu tượng mà từ đó các thông điệp về "nguồn thông tin rời rạc" này được tạo thành.
Để xem cách phát ra, hãy xem ví dụ đơn giản hơn về nguồn thông tin nhị phân chỉ với hai biểu tượng (1/0, bật/tắt, A/B, bạn có gì). Trong trường hợp này, tất cả những điều sau đây sẽ cung cấp cho các entropy cho một nguồn trong đó tần số tương đối của hai biểu tượng đều giống nhau (tức là một nửa những biểu tượng là A
s và một nửa là B
s):
entropy(c(0.5, 0.5))
# [1] 0.6931472
entropy(c(1,1))
# [1] 0.6931472
entropy(c(1000,1000))
# [1] 0.6931472
entropy(c(0.0004, 0.0004))
# [1] 0.6931472
entropy(rep(1,2))
# [1] 0.6931472
Vì tất cả đều đề cập đến cùng một phân bố cơ bản, trong đó xác suất được lan truyền tối đa trong số các ký hiệu có sẵn, chúng cho mỗi entropy cao nhất có thể cho một nguồn thông tin hai trạng thái (log(2) = 0.6931472)
).
Khi bạn thay thế entropy(runif(2))
, bạn đang cung cấp xác suất tương đối cho hai biểu tượng được chọn ngẫu nhiên từ phân phối đồng đều. Trừ khi hai số được chọn ngẫu nhiên đó giống hệt nhau, bạn đang nói entropy()
rằng bạn đã có nguồn thông tin với hai biểu tượng được sử dụng với các tần số khác nhau. Kết quả là, bạn sẽ luôn nhận được một entropy tính toán thấp hơn log(2)
. Dưới đây là một ví dụ nhanh để minh họa cho những gì tôi có nghĩa là:
set.seed(4)
(x <- runif(2))
# [1] 0.585800305 0.008945796
freqs.empirical(x) ## Helper function called by `entropy()` via `entropy.empirical()`
# [1] 0.98495863 0.01504137
## Low entropy, as you should expect
entropy(x)
# [1] 0.07805556
## Essentially the same thing; you can interpret this as the expected entropy
## of a source from which a message with 984 '0's and 15 '1's has been observed
entropy(c(984, 15))
Nói tóm lại, bằng cách thông qua các y=
luận một chuỗi dài của 1
s, như trong entropy(rep(1, 1024))
, bạn đang mô tả một nguồn thông tin đó là một rời rạc tương tự của phân bố đồng đều. Về lâu dài hoặc trong một tin nhắn rất dài, mỗi 1024 chữ cái của nó được dự kiến sẽ xảy ra với tần số bằng nhau, và bạn không thể có được bất kỳ thống nhất hơn thế!
Tôi nghĩ có thể là do triển khai. Nếu phương thức "MM" được sử dụng, hành vi như mong đợi ngoại trừ entropy của các giá trị lặp lại phụ thuộc vào các giá trị đó, nó không nên. Phương thức "ML" xử lý chính xác điều này. Chỉnh sửa: Cross xác thực có thể là một nơi tốt hơn. Tôi không biết nếu nó cho đến khi bạn đề nghị nó. –
Nếu đó là việc thực hiện, sau đó thử nhìn vào 'getAnywhere (" entropy.empirical ")', 'getAnywhere (" entropy.MillerMadow ")' và 'getAnywhere (" entropy.plugin ")'. – Laterow
Cảm ơn. Tôi đã nhìn vào mã nguồn nhưng tôi không chắc chắn tại sao nó hoạt động như nó. Tóm lại, nó lấy dữ liệu, thùng nó với hàm freqs, và sau đó áp dụng hàm log cho nó. –