วิธีการ 'เก็บข้อมูลที่เรียงลำดับอย่างชาญฉลาด' อย่างชาญฉลาด


11

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

ว่าฉันมี 12 รายการในคอลเลกชันของฉันและฉันรู้ว่าข้อมูลจะพอดีกับ 3 ถังขยะ:

Index:  1 2 3 4 5 6 7 8 9 10 11 12
Value:  1 1 1 3 3 3 3 3 3 5  5  6

ฉันจะเลือกเบรกพอยต์อย่างชาญฉลาดสำหรับช่องเก็บของอย่างไรผม={1-3},{4-9},{10-12}

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

Index:  1 2 3 4 5 6 7 8 9 10 11 12
Value:  1 1 1 3 3 3 3 3 3 5  5  6

first break evenly: i = 1-4, 5-8, 9-12
mean endpoints:  between 4 and 5: (3+3)/2 = 3
                 between 8 and 9: (3+3)/2 = 3

ตอนนี้อะไรก็ได้ที่ต่ำกว่า 3 พอดีใน bin 1 อะไรที่สูงกว่า 3 แต่ต่ำกว่า 3 พอดีใน bin 2 และอะไรที่สูงกว่า 3 พอดีใน bin 3 คุณสามารถเห็นว่าปัญหาของฉันคืออะไร หากข้อมูลมีช่องเก็บไม่เท่ากันวิธีการของฉันล้มเหลว

เพื่อนพูดถึงอัลกอริทึมเพื่อนบ้านที่ใกล้ที่สุด k- แต่ฉันไม่แน่ใจ


1
คุณช่วยอธิบายความหมายของคำว่า คุณพยายามทำอะไรให้สำเร็จด้วยการคุมขัง? ทำไมคุณถึงเริ่มต้นตั้งแต่แรก
whuber

สำหรับวรรคสองของคุณคุณหมายถึง ,และหรือไม่ ไม่อย่างนั้นมันก็ไม่สมเหตุสมผลสำหรับฉัน <3ผมn13&<4ผมn24ผมn3
gung - Reinstate Monica

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

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

นี่คือสิ่งที่ฉันทำในการตั้งค่าที่แตกต่างกันเล็กน้อย
มาโคร

คำตอบ:


9

ฉันคิดว่าสิ่งที่คุณต้องการทำเรียกว่าการจัดกลุ่ม คุณต้องการจัดกลุ่ม "ค่า" ของคุณเพื่อให้มีการรวบรวมค่าที่คล้ายกันในถังขยะเดียวกันและมีการตั้งค่าจำนวนช่องเก็บรวมไว้ทั้งหมด

คุณสามารถแก้ปัญหานี้ได้โดยใช้อัลกอริทึมการจัดกลุ่ม k-mean ใน MATLAB คุณสามารถทำได้โดย:

bin_ids = kmeans(Values,3); 

การโทรด้านบนจะจัดกลุ่มค่าในValuesสามกลุ่มเพื่อให้ความแปรปรวนภายในกลุ่มมีค่าน้อยที่สุด


1
ฉันก็พบว่าเช่นกัน นี่คือสิ่งที่ฉันนำมาใช้จริงและมันทำงานได้อย่างยอดเยี่ยม ฉันมาที่นี่เพื่อตอบคำถามของฉัน แต่คุณเอาชนะฉันได้! การจัดกลุ่มเป็นสิ่งที่ฉันพยายามทำ
Matthew Kemnetz

8

k-mean เป็นตัวเลือก แต่ไม่สมเหตุสมผลสำหรับข้อมูล 1 มิติ ในข้อมูลมิติเดียวคุณจะได้รับประโยชน์อย่างมหาศาลเพียงหนึ่งเดียวข้อมูลสามารถจัดเรียงได้อย่างสมบูรณ์

ดูที่การเพิ่มประสิทธิภาพตัวแบ่งตามธรรมชาติแทน:
http://en.wikipedia.org/wiki/Jenks_natural_breaks_optimization


มันน่าสนใจมาก คุณช่วยอธิบายรายละเอียดเพิ่มเติมได้ไหมว่าทำไมเรื่องนี้ถึงดีกว่า k หมายถึงอะไร
Matthew Kemnetz

เหตุผลหลักที่ฉันถามคือเพราะฉันกำลังใช้ MATLAB สำหรับอัลกอริทึมของฉันและฉันไม่พบการเพิ่มประสิทธิภาพการหยุดพักตามธรรมชาติของ Jenks ในกล่องเครื่องมือใด ๆ ฯลฯ ดังนั้นฉันจะต้องใช้ตัวเอง ฉันแค่อยากรู้ว่ามันจะดีกว่าหรือเร็วกว่านี้ก่อนที่ฉันจะเปลี่ยนเกียร์และใช้สิ่งนี้
Matthew Kemnetz

1
k-mean ค่อนข้างโง่ มันมีความหมายและมันก็จะแบ่งกลางระหว่างสองวิธีเสมอ เช่นที่ได้รับ 0 1 2 3 4 5 7 7 7, k-
mean
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.