คุณทดสอบการใช้งาน k-mean ได้อย่างไร?


11

คำเตือน: ฉันโพสต์คำถามนี้ใน Stackoverflow แต่ฉันคิดว่านี่อาจจะเหมาะกว่าสำหรับแพลตฟอร์มนี้

คุณทดสอบการใช้งาน k-mean ของคุณสำหรับชุดข้อมูลหลายมิติได้อย่างไร

ฉันคิดว่าจะใช้งานการใช้งานที่มีอยู่แล้ว (เช่น Matlab) กับข้อมูลและเปรียบเทียบผลลัพธ์กับอัลกอริทึมของฉัน แต่สิ่งนี้จะต้องใช้อัลกอริธึมทั้งสองทำงานมากกว่ากันและการทำแผนที่ระหว่างผลลัพธ์ทั้งสองอาจไม่ใช่เค้ก

คุณมีความคิดที่ดีกว่านี้ไหม?

คำตอบ:


10

k หมายถึงรวมถึงองค์ประกอบสุ่มดังนั้นจึงไม่น่าเป็นไปได้มากที่คุณจะได้รับผลลัพธ์เดียวกันเว้นแต่ว่าคุณมีการนำไปใช้งานเหมือนกันทุกประการและใช้การกำหนดค่าเริ่มต้นเดียวกัน อย่างไรก็ตามคุณสามารถดูว่าผลลัพธ์ของคุณสอดคล้องกับการใช้งานที่รู้จักกันดีหรือไม่ (ไม่ทราบเกี่ยวกับ Matlab แต่การใช้อัลกอริทึม k-mean ใน R ได้รับการอธิบายอย่างดีดูHartigan & Wong, 1979 )

สำหรับการเปรียบเทียบผลลัพธ์สองชุดยังคงมีปัญหากับการสลับเลเบลหากต้องรันหลายครั้ง อีกครั้งในแพ็คเกจ e1071 R มีฟังก์ชั่นที่มีประโยชน์มาก (; matchClasses()) ที่อาจถูกใช้เพื่อค้นหาการแมป 'ที่ดีที่สุด' ระหว่างสองประเภทในตารางการจำแนกแบบสองทาง โดยพื้นฐานแล้วแนวคิดคือการจัดเรียงแถวใหม่เพื่อเพิ่มข้อตกลงกับคอลัมน์ให้มากที่สุดหรือใช้วิธีการที่เป็นโลภและเปลี่ยนแถวและคอลัมน์ให้เรียงสับเปลี่ยนกันจนกว่าผลรวมของเส้นทแยงมุม (ข้อตกลงดิบ) จะมากที่สุด ค่าสัมประสิทธิ์ของข้อตกลงเช่นสถิติKappaยังมีให้

ในที่สุดเกี่ยวกับวิธีมาตรฐานการใช้งานของคุณมีข้อมูลจำนวนมากที่มีอยู่อย่างอิสระหรือคุณสามารถจำลองชุดข้อมูลเฉพาะ (เช่นผ่านโมเดลผสมแน่นอน, ดูแพ็คเกจMixSim )


สวัสดีไคขอบคุณสำหรับคำตอบ เมื่อคุณต้องการคุณสามารถตอบคำถามที่เหมือนกันได้ที่ SO และฉันก็ยอมรับมันเช่นกัน => stackoverflow.com/questions/4280371/…
Framester

(+1) ย่อหน้าแรกจะเป็นหัวใจของเรื่องนี้อย่างรวดเร็ว
whuber

6

การแมประหว่างผลลัพธ์สองชุดนั้นง่ายต่อการคำนวณเนื่องจากข้อมูลที่คุณได้รับในการทดสอบสามารถแสดงเป็นชุดของสาม tuples: องค์ประกอบแรกคือจุด (หลายมิติ) ที่สองคือป้ายคลัสเตอร์ (โดยพลการ) จัดทำโดยอัลกอริทึมของคุณและที่สามคือเลเบลคลัสเตอร์ (โดยพลการ) จัดทำโดยอัลกอริทึมอ้างอิง สร้างโดยkkkตารางการจำแนกประเภทสำหรับคู่ของฉลาก: หากผลลัพธ์เห็นด้วยจะเป็นเมทริกซ์การเปลี่ยนรูปหลายเท่า นั่นคือแต่ละแถวและแต่ละคอลัมน์ต้องมีเซลล์ที่ไม่ใช่ศูนย์อย่างแน่นอน นั่นเป็นโปรแกรมตรวจสอบอย่างง่าย นอกจากนี้ยังตรงไปตรงมาเพื่อติดตามการเบี่ยงเบนเล็กน้อยจากอุดมคตินี้กลับไปยังจุดข้อมูลแต่ละจุดเพื่อให้คุณสามารถเห็นได้อย่างแม่นยำว่าคำตอบทั้งสองแตกต่างกันอย่างไรหากพวกเขาต่างกัน ฉันจะไม่คิดคำนวณทางสถิติของข้อตกลง: มีข้อตกลงที่สมบูรณ์แบบ (มากถึงการเปลี่ยนแปลง) หรือไม่มีและในกรณีหลังคุณต้องติดตามทุกประเด็นที่ไม่เห็นด้วยเพื่อทำความเข้าใจว่ามันเกิดขึ้นได้อย่างไร ผลลัพธ์อาจเห็นด้วยหรือไม่ จำนวนของความขัดแย้งใด ๆ แม้เพียงจุดเดียวต้องตรวจสอบ

คุณอาจต้องการใช้ชุดข้อมูลหลายประเภทสำหรับการทดสอบ: (1) ชุดข้อมูลที่เผยแพร่พร้อมผลลัพธ์ k-หมายถึงที่เผยแพร่ (2) ชุดข้อมูลสังเคราะห์ที่มีกลุ่มที่แข็งแกร่งชัดเจน; (3) ชุดข้อมูลสังเคราะห์ที่ไม่มีการจัดกลุ่มที่ชัดเจน (1) เป็นวินัยที่ดีที่จะใช้เมื่อใดก็ตามที่คุณเขียนโปรแกรมคณิตศาสตร์หรือสถิติใด ๆ (2) ทำได้ง่ายในหลาย ๆ ด้านเช่นโดยการสร้างจุดสุ่มบางจุดเพื่อทำหน้าที่เป็นศูนย์กลางของกลุ่มแล้วสร้างจุดเมฆโดยสุ่มสุ่มย้ายศูนย์คลัสเตอร์ในปริมาณที่ค่อนข้างน้อย (3) ให้การตรวจสอบแบบสุ่มบางอย่างที่อาจเปิดเผยพฤติกรรมที่ไม่คาดคิด; อีกครั้งนั่นเป็นวินัยการทดสอบทั่วไปที่ดี

นอกจากนี้ให้พิจารณาการสร้างชุดข้อมูลที่เน้นอัลกอริทึมโดยการวางตัวบนขอบเขตระหว่างวิธีการแก้ปัญหาที่รุนแรง สิ่งนี้จะต้องใช้ความคิดสร้างสรรค์และความเข้าใจในอัลกอริทึมของคุณ (ซึ่งคุณน่าจะมี!) ตัวอย่างหนึ่งที่ฉันต้องการที่จะตรวจสอบในกรณีใด ๆ จะเป็นชุดของเวกเตอร์ของรูปแบบที่โวลต์เป็นเวกเตอร์ที่ไม่มีส่วนประกอบที่เป็นศูนย์และฉันจะใช้เวลาในค่าลำดับหนึ่ง0 , 1 , 2 , ... , n - 1 ฉันต้องการตรวจสอบอัลกอริทึมของเซตเวกเตอร์ที่ประกอบกันเป็นรูปหลายเหลี่ยมด้านเท่ากันหมด ในสถานการณ์อย่างใดอย่างหนึ่งกรณีที่nเป็นไม่ได้ผมโวลต์โวลต์ผม0,1,2,...,n-1nหลายเป็นที่น่าสนใจโดยเฉพาะอย่างยิ่งรวมทั้งที่nคือน้อยกว่าk สิ่งที่พบได้ทั่วไปในสถานการณ์เหล่านี้คือ (a) พวกเขาใช้ทุกมิติของปัญหา แต่ (b) การแก้ปัญหาที่ถูกต้องชัดเจนทางเรขาคณิตและ (c) มีวิธีแก้ไขที่ถูกต้องหลายอย่างknk

(แบบรูปหลายเหลี่ยมด้านเท่ากันหมดสุ่มมิติโดยเริ่มต้นด้วยสองเวกเตอร์ภัณฑ์UและVสุ่มเลือก (วิธีที่ดีคือการปล่อยให้พวกเขา. 2 dส่วนประกอบเป็นอิสระ variates ปกติมาตรฐาน) rescale พวกเขาจะมีหน่วยความยาว. โทรขอให้xและzเหล่านี้ลบองค์ประกอบxออกจากzโดยใช้สูตรd2ยูโวลต์2dxZxZ

W=Z-(Zx)x.

YWxYxYdncos(2πk/n)x+บาป(2πk/n)Yk0n-1


(+1) ความคิดเห็นของคุณเกี่ยวกับวิธีที่เป็นไปได้ในการสร้างข้อมูลสังเคราะห์ที่เกี่ยวข้องยินดีต้อนรับอย่างมาก
chl

2

วิธีการ 'ไร้เดียงสา' ที่ง่ายมากวิธีหนึ่งคือการใช้ข้อมูลสังเคราะห์อย่างง่ายสำหรับการดำเนินการทุกอย่างควรส่งผลให้เกิดกลุ่มเดียวกัน

ตัวอย่างใน Python ด้วยimport numpy as np:

test_data = np.zeros((40000, 4))
test_data[0:10000, :] = 30.0
test_data[10000:20000, :] = 60.0
test_data[20000:30000, :] = 90.0
test_data[30000:, :] = 120.0

เพราะn_clusters = 4มันจะทำให้คุณมีการเปลี่ยนแปลง[30, 60, 90, 120]


0

เนื่องจาก k-หมายความว่ามีการตัดสินใจที่ถูกสุ่มเลือก (ส่วนเริ่มต้นเท่านั้น) ฉันคิดว่าวิธีที่ดีที่สุดในการลองอัลกอริทึมของคุณคือการเลือกจุดเริ่มต้นและปล่อยให้พวกเขาแก้ไขในอัลกอริทึมของคุณก่อนจากนั้นเลือกซอร์สโค้ด แก้ไขคะแนนในลักษณะเดียวกัน จากนั้นคุณสามารถเปรียบเทียบผลลัพธ์ที่แท้จริงได้

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