Số lượng thùng khi tính toán thông tin lẫn nhau


10

Tôi muốn định lượng mối quan hệ giữa hai biến A và B bằng cách sử dụng thông tin lẫn nhau. Cách tính toán bằng cách tạo các quan sát (xem ví dụ mã Python bên dưới). Tuy nhiên, yếu tố nào quyết định số lượng thùng là hợp lý? Tôi cần tính toán nhanh chóng vì vậy tôi không thể đơn giản sử dụng nhiều thùng để ở bên an toàn.

from sklearn.metrics import mutual_info_score

def calc_MI(x, y, bins):
    c_xy = np.histogram2d(x, y, bins)[0]
    mi = mutual_info_score(None, None, contingency=c_xy)
    return mi

Câu trả lời:


15

Không có số lượng thùng tốt nhất để ước tính thông tin lẫn nhau (MI) với biểu đồ. Cách tốt nhất là chọn nó thông qua xác nhận chéo nếu bạn có thể, hoặc dựa vào quy tắc ngón tay cái. Đây là lý do tại sao nhiều công cụ ước tính khác của MI không dựa trên biểu đồ đã được đề xuất.

Số lượng thùng sẽ phụ thuộc vào tổng số điểm dữ liệu . Bạn nên cố gắng tránh quá nhiều thùng để tránh lỗi ước tính cho phân phối chung giữa hai biến. Bạn cũng nên tránh quá ít thùng để có thể nắm bắt mối quan hệ giữa hai biến. Cho rằng tạo ra một biểu đồ 2D với thùng chiều rộng bình đẳng cho cả hai và cá nhân tôi sẽ chọn: D = nnp.histogram2d(x, y, D)Dxy Trong trường hợp này trung bình cho hai biến ngẫu nhiên phân bố đều, bạn sẽ có ít nhất5điểm cho mỗi tế bào của biểu đồ: n

D= =n/5
5 Đây là một lựa chọn khả thi mô phỏng phương pháp phân vùng thích ứng được đề xuất trong(Cellucci, 2005). Cách tiếp cận thứ hai thường được sử dụng để ước tính MI để suy ra các mạng di truyền: ví dụ như trongMIDER.
nDXDY5nD25D2n/5D= =n/5

Nếu bạn có nhiều điểm dữ liệu và không có giá trị thiếu, bạn không nên lo lắng quá nhiều về việc tìm số thùng tốt nhất; ví dụ: nếu n = 100 , 000 . Nếu đây không phải là trường hợp, bạn có thể xem xét để sửa MI cho các mẫu hữu hạn. (Steuer et al., 2002) thảo luận về một số hiệu chỉnh cho MI cho nhiệm vụ suy luận mạng di truyền.nn= =100,000


Ước tính số lượng thùng cho biểu đồ là một vấn đề cũ. Bạn có thể quan tâm đến bài nói chuyện này của Lauritz Dieckman về việc ước tính số lượng thùng cho MI. Bài nói chuyện này dựa trên một chương trong cuốn sách của Mike X Cohen về chuỗi thời gian thần kinh.

DXDY

IQR

DX= =tối đaX-tối thiểuX2IQRn-1/3
IQR

Quy tắc của Scott (giả định quy tắc ): trong đó là độ lệch chuẩn cho .sXX

DX= =tối đaX-tối thiểuX3,5SXn-1/3
SXX

Quy tắc của Sturges (có thể đánh giá thấp số lượng thùng nhưng tốt cho lớn ): D X = 1 + log 2 nn

DX= =1+đăng nhập2n

Rất khó để ước tính chính xác MI với biểu đồ. Sau đó, bạn có thể chọn một công cụ ước tính khác nhau:

  • Công cụ ước tính NN của Kraskov , ít nhạy cảm hơn với lựa chọn tham số: hoặc hàng xóm gần nhất thường được sử dụng làm mặc định. Báo cáo: (Kraskov, 2003)k = 4 k = 6kk= =4k= =6
  • Ước tính MI với Kernels (Moon, 1995) .

Có rất nhiều gói để ước tính MI:

  • Hộp công cụ ước tính Entropy không tham số cho Python. trang web .
  • Bộ công cụ động lực thông tin trong Java nhưng cũng có sẵn cho Python. trang web .
  • Hộp công cụ ITE trong Matlab. trang web .

1

Tôi thích minepycó được và ước tính thông tin lẫn nhau trong python.

Bạn có thể xem chi tiết triển khai gói ở đây và mã ví dụ ở đây . Để dễ tham khảo hơn, tôi sao chép dán ví dụ và nó xuất ra ở đây:

import numpy as np
from minepy import MINE

def print_stats(mine):
    print "MIC", mine.mic()
    print "MAS", mine.mas()
    print "MEV", mine.mev()
    print "MCN (eps=0)", mine.mcn(0)
    print "MCN (eps=1-MIC)", mine.mcn_general()

x = np.linspace(0, 1, 1000)
y = np.sin(10 * np.pi * x) + x
mine = MINE(alpha=0.6, c=15)
mine.compute_score(x, y)

print "Without noise:"
print_stats(mine)
print

np.random.seed(0)
y +=np.random.uniform(-1, 1, x.shape[0]) # add some noise
mine.compute_score(x, y)

print "With noise:"
print_stats(mine)

Cung cấp điều này như là đầu ra:

Without noise:
MIC 1.0
MAS 0.726071574374
MEV 1.0
MCN (eps=0) 4.58496250072
MCN (eps=1-MIC) 4.58496250072

With noise:
MIC 0.505716693417
MAS 0.365399904262
MEV 0.505716693417
MCN (eps=0) 5.95419631039
MCN (eps=1-MIC) 3.80735492206

Kinh nghiệm của tôi là kết quả rất nhạy cảm alphavà giá trị mặc định .6là hợp lý. Tuy nhiên, trên dữ liệu thực của tôi alpha=.3nhanh hơn nhiều và các thông tin lẫn nhau ước tính có mối tương quan thực sự cao với trường hợp đó alpha=.6. Vì vậy, trong trường hợp bạn đang sử dụng MI để chọn những cái có MI cao, bạn chỉ cần sử dụng một alphagiá trị nhỏ hơn và sử dụng các giá trị cao nhất để thay thế với độ chính xác tốt.


Cảm ơn! Bạn đã so sánh minepy với sklearn để ước tính MI chưa?
cướp biển

Không, tôi không có. Tôi không chắc tại sao không!
adrin

Tôi vừa mới thực hiện một so sánh về sklearn và minepy (cả alpha = 0,3 và alpha = 0,6). Kết quả rất khác nhau! Vì nó quá dễ nên có lẽ bạn cũng nên kiểm tra kết quả của mình bằng cả hai thư viện :)
pir

2
MIC không bằng thông tin lẫn nhau (MI). Chúng là hai thứ hoàn toàn khác nhau.
Simone

1
Có chắc chắn. Trong bài viết gốc của MIC có rất nhiều so sánh giữa MI và MIC: uvm.edu/~cdanfort/csc-reading-group/NH MIC cho thấy nó có thể được sử dụng như một đại diện cho lượng nhiễu cho mối quan hệ chức năng - tài sản được gọi là "công bằng" trong bài báo gốc. Tuy nhiên, MI vẫn là một biện pháp phụ thuộc rất tốt cho nhiều nhiệm vụ: ví dụ: lựa chọn tính năng hoặc suy luận mạng di truyền. Nó cũng nhanh hơn để ước tính hơn MIC.
Simone
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.