จำนวนของช่องเก็บเมื่อคำนวณข้อมูลร่วมกัน


10

ฉันต้องการหาปริมาณความสัมพันธ์ระหว่างตัวแปรสองตัวคือ A และ B โดยใช้ข้อมูลร่วมกัน วิธีการคำนวณก็คือการทำข้อสังเกต (ดูตัวอย่างโค้ดไพ ธ อนด้านล่าง) อย่างไรก็ตามสิ่งที่ปัจจัยกำหนดจำนวนถังขยะที่เหมาะสม? ฉันต้องการการคำนวณที่รวดเร็วดังนั้นฉันจึงไม่สามารถใช้ถังขยะจำนวนมากเพื่อความปลอดภัย

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

คำตอบ:


15

ไม่มีจำนวนถังขยะที่ดีที่สุดในการประมาณข้อมูลร่วมกัน (MI) ด้วยฮิสโตแกรม วิธีที่ดีที่สุดคือการเลือกผ่านการตรวจสอบข้ามหากคุณสามารถหรือใช้กฎง่ายๆ นี่คือเหตุผลที่มีการเสนอตัวประมาณอื่น ๆ ของ MI ซึ่งไม่ได้อยู่บนฮิสโตแกรม

จำนวนถังขยะจะขึ้นอยู่กับจำนวนของจุดข้อมูลnคุณควรพยายามหลีกเลี่ยงถังขยะมากเกินไปเพื่อหลีกเลี่ยงข้อผิดพลาดในการประมาณค่าสำหรับการแจกแจงร่วมระหว่างตัวแปรทั้งสอง คุณควรหลีกเลี่ยงถังขยะน้อยเกินไปที่จะสามารถจับความสัมพันธ์ระหว่างตัวแปรทั้งสองได้ กำหนดว่าสร้างฮิสโตแกรม 2 มิติที่มีความกว้างเท่ากันสำหรับทั้งคู่และฉันจะเลือกเอง: ในกรณีนี้โดยเฉลี่ยสำหรับตัวแปรสุ่มที่กระจายกันสองชุดคุณจะมีอย่างน้อยคะแนนสำหรับ แต่ละเซลล์ของฮิสโตแกรม: nnp.histogram2d(x, y, D)Dxy

D=n/5
5
nDXDY5nD25D2n/5D=n/5
นี่คือทางเลือกที่เป็นไปได้หนึ่งที่เลียนแบบวิธีการแบ่งพาร์ทิชันการปรับตัวที่นำเสนอใน(Cellucci 2005) แนวทางหลังมักจะถูกใช้ในการประเมินเพื่อสรุป MI เครือข่ายทางพันธุกรรม: เช่นในMider

หากคุณมีจำนวนของจุดข้อมูลและไม่มีค่าที่ขาดหายไปคุณไม่ควรกังวลมากเกินไปเกี่ยวกับการหาจำนวนที่ดีที่สุดของถังขยะ; เช่นถ้า100,000 หากไม่ใช่กรณีนี้คุณอาจพิจารณาแก้ไข MI สำหรับตัวอย่าง จำกัด (Steuer et al., 2002)กล่าวถึงการแก้ไขบางอย่างสำหรับ MI สำหรับงานของการอนุมานเครือข่ายทางพันธุกรรมnn=100,000


การประมาณจำนวนช่องเก็บของฮิสโตแกรมเป็นปัญหาเก่า คุณอาจสนใจพูดคุยนี้โดย Lauritz Dieckman เกี่ยวกับการประเมินจำนวนถังขยะสำหรับ MI การพูดคุยนี้อ้างอิงจากบทในหนังสือของ Mike X Cohen เกี่ยวกับอนุกรมเวลาของระบบประสาท

คุณอาจเลือกและอย่างอิสระและใช้กฎของหัวแม่มือที่ใช้สำหรับการประเมินจำนวนของถังขยะใน 1D ฮิสโทแกรมDXDY

กฎของฟรีดดิเนียส (ไม่มีข้อสันนิษฐานเกี่ยวกับการแจกแจง): โดยที่คือความแตกต่างระหว่าง 75-quantile และ 25-quantile ดูคำถามที่เกี่ยวข้องในทางทิศตะวันออก

DX=สูงสุดX-นาทีX2IQRn-1/3
IQR

กฎของสกอตต์ (สมมุติฐาน ): โดยที่เป็นค่าเบี่ยงเบนมาตรฐาน สำหรับX

DX=สูงสุดX-นาทีX3.5sXn-1/3
sXX

กฎของ Sturges (อาจประมาทจำนวนของถังขยะ แต่ดีสำหรับใหญ่): n

DX=1+เข้าสู่ระบบ2n

เป็นการยากที่จะประมาณค่า MI ด้วยฮิสโทแกรม จากนั้นคุณอาจเลือกตัวประมาณอื่น:

  • ตัวประมาณ NN ของ Kraskov ซึ่งค่อนข้างอ่อนไหวต่อการเลือกพารามิเตอร์:หรือเพื่อนบ้านที่ใกล้เคียงที่สุดมักจะถูกใช้เป็นค่าเริ่มต้น กระดาษ: (Kraskov, 2003)kk=4k=6
  • การประมาณค่า MI กับเมล็ด(ดวงจันทร์, 1995)

มีแพคเกจมากมายสำหรับการประเมิน MI:

  • กล่องเครื่องมือการประมาณค่าเอนโทรปีแบบไม่มีพารามิเตอร์สำหรับ Python สถาน
  • ชุดเครื่องมือการเปลี่ยนแปลงสารสนเทศใน Java แต่ยังมีให้สำหรับ Python สถาน
  • กล่องเครื่องมือ ITE ใน Matlab สถาน

1

ฉันชอบminepyรับและประเมินข้อมูลร่วมกันเป็นไพ ธ อน

ท่านสามารถดูรายละเอียดการดำเนินการของแพคเกจที่นี่และรหัสตัวอย่างที่นี่ เพื่อประโยชน์ในการอ้างอิงได้ง่ายขึ้นฉันคัดลอกวางตัวอย่างและเอาท์พุทที่นี่:

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)

ซึ่งให้สิ่งนี้เป็นผลลัพธ์:

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

ประสบการณ์ของฉันคือผลลัพธ์มีความอ่อนไหวalphaและค่าเริ่มต้น.6เป็นสิ่งที่สมเหตุสมผล อย่างไรก็ตามเมื่อวันที่ข้อมูลจริงของฉันคือเร็วขึ้นมากและประเมินข้อมูลร่วมกันมีความสัมพันธ์สูงมากกับกรณีที่alpha=.3 alpha=.6ดังนั้นในกรณีที่คุณใช้ MI เพื่อเลือกค่าที่มี MI สูงคุณสามารถใช้ค่าที่น้อยกว่าalphaและใช้ค่าสูงสุดแทนค่าที่มีความแม่นยำดี


ขอบคุณ! คุณเปรียบเทียบทุ่นระเบิดกับ sklearn เพื่อการประมาณ MI หรือไม่?
pir

ไม่ฉันยังไม่ได้ ฉันไม่แน่ใจว่าทำไมถึงไม่ได้!
adrin

ฉันเพิ่งทำการเปรียบเทียบ sklearn และ minepy (ทั้ง alpha = 0.3 และ alpha = 0.6) ผลลัพธ์ที่ได้แตกต่างกันมาก! เพราะมันง่ายมากที่คุณควรอาจจะยังตรวจสอบผลของคุณโดยใช้ทั้งห้องสมุด :)
pir

2
MIC ไม่เท่ากับข้อมูลร่วมกัน (MI) พวกเขาเป็นสองสิ่งที่แตกต่างอย่างสิ้นเชิง
Simone

1
แน่นอน. ในกระดาษ MIC ต้นฉบับมีการเปรียบเทียบจำนวนมากระหว่าง MI และ MIC: uvm.edu/~cdanfort/csc-reading-group/… MIC แสดงให้เห็นว่าสามารถใช้เป็นพร็อกซีของปริมาณเสียงรบกวนสำหรับความสัมพันธ์ในการทำงาน - คุณสมบัติที่เรียกว่า 'ความเท่าเทียม' ในเอกสารต้นฉบับ อย่างไรก็ตาม MI ยังคงเป็นตัวชี้วัดที่ดีสำหรับการทำงานหลายอย่างเช่นการเลือกคุณสมบัติหรือการอนุมานเครือข่ายทางพันธุกรรม นอกจากนี้ยังเร็วกว่าการประมาณค่า MIC
Simone
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.