k-หมายถึงการใช้งานกับเมทริกซ์ระยะทางที่กำหนดเองในอินพุต


14

ทุกคนสามารถชี้ให้ฉันเห็นการใช้งาน k- หมายถึง (มันจะดีกว่าถ้าใน MATLAB) ที่สามารถใช้เมทริกซ์ระยะทางในการป้อนข้อมูล? การใช้งานมาตรฐาน MATLAB ต้องใช้เมทริกซ์การสังเกตในอินพุตและไม่สามารถเปลี่ยนการวัดความคล้ายคลึงกันได้


2
คุณสามารถลองสร้างข้อมูลดิบที่สอดคล้องกับเมทริกซ์ของคุณเกี่ยวกับระยะทางแบบยุคลิดและป้อนข้อมูลเหล่านั้นไปยัง K-Means ทางเลือกง่ายๆอาจใช้วิธีวอร์ดในการจัดกลุ่มแบบลำดับชั้นของเมทริกซ์: K-Means และวอร์ดแบ่งปันอุดมการณ์ที่คล้ายคลึงกันของคลัสเตอร์
ttnphns


ไม่ใช่ Matlab แต่หน้าของ python ภายใต้is-it-to-to-ระบุ -in- ของคุณเองระยะทางฟังก์ชั่นการใช้ scikits-learn-k-meanสามารถใช้ตัวชี้วัด 20 คี่ใด ๆ ใน scipy.spatial ระยะทาง
เดนิส

คำตอบ:


13

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

คุณสามารถลองk-medoidsแทน มีการใช้งาน MATLABอยู่บ้าง


1
สวัสดีขอบคุณสำหรับคำตอบ แทนที่จะให้เมทริกซ์ระยะทางโดยตรงจะเป็นไปได้ไหมที่จะป้อนข้อมูลเป็นตัวชี้วัดระยะทางที่กำหนดเอง ประเด็นก็คือฉันต้องเปรียบเทียบวิธีการจัดกลุ่มสองวิธีและเนื่องจากในวิธีที่สองฉันใช้เมทริกซ์ความคล้ายคลึงกันที่กำหนดเองฉันต้องการใช้วิธีเดียวกันกับ kmeans เพื่อให้ได้การเปรียบเทียบที่เป็นธรรม
Eugenio

2
ELKI อนุญาตให้คุณใช้ฟังก์ชันระยะทางตามอำเภอใจด้วยวิธี k โปรดทราบว่าอัลกอริทึมอาจล้มเหลวในการบรรจบกัน K-หมายความว่าถูกออกแบบมาสำหรับระยะทางยูคลิดที่กำลังสอง (ผลรวมของกำลังสอง) ด้วยระยะทางอื่นค่าเฉลี่ยอาจไม่ปรับให้เหมาะสมอีกต่อไปและบูมขั้นตอนวิธีจะไม่มาบรรจบกันในที่สุด พิจารณาการใช้ k-medoids อย่างจริงจัง จริง ๆ แล้วมันถูกเขียนขึ้นเพื่ออนุญาตให้ใช้ความคิด k- หมายถึงด้วยระยะทางอาร์บิเรี
มี QUIT - Anony-Mousse

นอกจากนี้ยังมี pyclustering ไลบรารี python / C ++ ที่ให้คุณจัดหาฟังก์ชันเมตริกที่กำหนดเอง: github.com/annoviko/pyclustering/issues/417
CpILL

8

คุณสามารถเปลี่ยนเมทริกซ์ของระยะทางของคุณให้เป็นข้อมูลดิบและป้อนสิ่งเหล่านี้ไปยังการจัดกลุ่ม K-Means ขั้นตอนจะเป็นดังนี้:

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

2) ดำเนินการ PCA (การวิเคราะห์องค์ประกอบหลัก) บนเมทริกซ์นั้นและรับเมทริกซ์การโหลดส่วนประกอบ NxN คอลัมน์สุดท้ายบางคอลัมน์มีแนวโน้มที่จะเป็น 0 ทั้งหมดดังนั้นให้ตัดออก สิ่งที่คุณอยู่ตอนนี้คือคะแนนองค์ประกอบหลักพิกัดของคะแนน N ของคุณไปยังส่วนประกอบหลักที่ผ่านเป็นแกนผ่านคลาวด์ของคุณ ข้อมูลนี้สามารถใช้เป็นข้อมูลดิบที่เหมาะสมสำหรับอินพุต K-Means

ป.ล. หากระยะทางของคุณไม่ถูกต้องทางเรขาคณิตแบบยูคลิดคู่กำลังสองคุณอาจพบปัญหา: เมทริกซ์ SSCP อาจไม่แน่นอน (กึ่ง) แน่นอน ปัญหานี้สามารถแก้ไขได้หลายวิธี แต่ขาดความแม่นยำ


ขอบคุณสำหรับคำตอบ! ที่จริงฉันไม่มีเมทริกซ์ระยะทางจริง แต่เมทริกซ์ความเหมือนกัน (0 ... 1) ระหว่างวัตถุและความคล้ายคลึงกันไม่ได้คำนวณอย่างแม่นยำโดยใช้ระยะทางยูคลิด แต่มีอัลกอริทึมแบบกำหนดเองที่คำนึงถึงข้อมูลดิบ แต่ไม่ใช่ใน วิธีมาตรฐาน ฉันเดาในกรณีนี้ฉันไม่สามารถใช้ขั้นตอนของคุณได้ใช่ไหม?
Eugenio

คุณยังสามารถทำได้หลังจากแปลงความคล้ายคลึงกันเป็นระยะทาง หลังอาจจะไม่จริงแบบยุคลิด (และ SSCP จะมีค่าลักษณะเชิงลบบางอย่าง); จากนั้นลองเพิ่มค่าคงที่ขนาดเล็กเป็นระยะทางจนกระทั่ง SSCP เสียค่าลบ EIG นอกจากนี้ยังมีวิธีอื่นในการแก้ไขปัญหา และโปรดจำไว้ว่าคุณคูณเมทริกซ์กึ่งกลางของระยะทางกำลังสอง
ttnphns

ป.ล. และโดยวิธีการ ถ้าเมทริกซ์ของคุณมีความเหมือนกันก็จะดีกว่า คุณแค่คิดว่ามันเป็นเมทริกซ์ SSCP ที่ฉันพูดถึงและทำ PCA กับมัน ถึงกระนั้นปัญหาของค่าลักษณะเชิงลบที่เป็นไปได้ยังคงอยู่
ttnphns

@ttnphns ขอโทษฉันหายไปคำอธิบายของคุณสำหรับขั้นตอนที่ 1 เมทริกซ์ระยะทางX(สมมติว่า N * N) เป็นไปได้สมมาตรดังนั้นcolMeans(X) =rowMeans(X) และเมื่อคุณลบแถวหรือคอลัมน์หมายถึง: Y=X-rowMeans(X), mean(Y)เป็น 0
Zhubarb

1
@Zhubarb เมื่อฉันพูด You could turn your matrix of distances into raw data (จุดที่ 1 และ 2) ฉันอ้างถึงโดยทั่วไปแล้วคือการปรับมาตราส่วนหลายมิติของ Torgerson (MDS)ซึ่งการจัดกึ่งกลางสองครั้งเป็นขั้นตอนแรก โปรดค้นหาไซต์นี้ (และ Google เช่นกัน) เกี่ยวกับขั้นตอนนั้น "การจัดกึ่งกลางสองครั้ง" เป็นการแปลงของระยะทาง (กำลังสอง) เป็นเมทริกซ์สเกลาร์ผลิตภัณฑ์ที่สอดคล้องกันซึ่งกำหนดไว้เหนือจุดกำเนิดที่ใส่ลงในเซนทรอยด์ของคลาวด์ของคะแนน
ttnphns

3

โปรดดูบทความนี้เขียนโดยหนึ่งในคนรู้จักของฉัน;)

http://arxiv.org/abs/1304.6899

มันเกี่ยวกับการใช้งาน k-mean ทั่วไปซึ่งใช้เมทริกซ์ระยะทางโดยพลการเป็นอินพุต มันสามารถเป็นเมทริกซ์ nonnegative สมมาตรใด ๆ ที่มีเส้นทแยงมุมเป็นศูนย์ โปรดทราบว่ามันอาจไม่ให้ผลลัพธ์ที่สมเหตุสมผลสำหรับเมทริกซ์ระยะทางแปลก ๆ โปรแกรมถูกเขียนใน C #

สามารถรับรหัสต้นฉบับได้โดยไปที่ลิงค์ด้านบนจากนั้นคลิกรูปแบบอื่นแล้วคลิกดาวน์โหลดแหล่งที่มา จากนั้นคุณจะได้รับ. tar.gz ที่มี Program.cs หรือสามารถคัดลอกซอร์สโค้ดจาก PDF ได้เช่นกัน


3

คุณสามารถใช้ Java Machine Learning Library พวกเขามีการใช้งาน K-Means หนึ่งในผู้สร้างยอมรับข้อโต้แย้งที่สาม

  1. ค่า K
  2. วัตถุที่เป็นตัวอย่างของDistanceMeasure Class
  3. จำนวนการวนซ้ำ

หนึ่งสามารถขยายคลาสทางไกลได้อย่างง่ายดายเพื่อให้ได้ผลลัพธ์ที่ต้องการ แนวคิดคือการส่งคืนค่าจากเมทริกซ์ระยะทางที่กำหนดเองในวิธีการวัด (อินสแตนซ์ x, อินสแตนซ์ y) ของคลาสนี้

K-หมายถึงถูก guarnateed มาบรรจบสมมติคุณสมบัติบางอย่างของการวัดระยะทาง ระยะทางแบบยุคลิดระยะทางแมนฮัตตันหรือตัวชี้วัดมาตรฐานอื่น ๆ เป็นไปตามสมมติฐานเหล่านี้ เนื่องจากเมตริกระยะทางที่กำหนดเองอาจไม่เป็นไปตามสมมติฐานเหล่านี้ผู้สร้างจึงมีพารามิเตอร์ตัวที่สามที่ระบุจำนวนการวนซ้ำเพื่อรันสำหรับการสร้างคลัสเตอร์

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