आप शायद इस समाधान से निराश होंगे कि "के-साधन एल्गोरिदम" (यानी लॉयड का एल्गोरिदम) का कोई भी विशेष भाग आता है। ऐसा इसलिए है क्योंकि लॉयड का एल्गोरिदम अक्सर खराब स्थानीय मिनीमा में फंस जाता है।
सौभाग्य से, लॉयड्स के-साधनों को हल करने का एक ही तरीका है। और एक दृष्टिकोण है जो लगभग हमेशा एक बेहतर स्थानीय मिनीमा पाता है।
चाल एक समय में डेटा बिंदुओं के क्लस्टर असाइनमेंट को अपडेट करना है। आप n
अंकों की संख्या की गणना को प्रत्येक अर्थ के लिए आवंटित करके कुशलता से ऐसा कर सकते हैं। ताकि आप कर सकते हैं फिर से गणना क्लस्टर मतलब m
बिंदु x
हटाने के बाद इस प्रकार है:
m_new = (n * m - x)/(n - 1)
और x
जोड़ने का उपयोग कर मतलब m
क्लस्टर के लिए:
m_new = (n * m + x)/(n + 1)
बेशक
क्योंकि यह नहीं हो सकता vectorized, यह MATLAB में चलाने के लिए थोड़ा दर्दनाक है लेकिन अन्य भाषाओं में बहुत बुरा नहीं है।
यदि आप वास्तव में सर्वोत्तम संभव न्यूनतम मिनीमा प्राप्त करने के लिए उत्सुक हैं, और आपको उदाहरण-आधारित क्लस्टरिंग का उपयोग करने में कोई फर्क नहीं पड़ता है, तो आपको affinity propagation पर ध्यान देना चाहिए। MATLAB कार्यान्वयन Frey lab affinity propagation page पर उपलब्ध हैं।
मुझे लगता है कि आप सही हैं। बेहतर अभिसरण प्राप्त करने के लिए मैंने अलग-अलग प्रारंभिक जन केंद्रों के साथ कई प्रयास करने के लिए अपने एल्गोरिदम को संशोधित किया, और फिर क्लस्टर के भिन्नता को मापकर सबसे अच्छा निर्धारण किया। एक प्रयास में कम मतलब भिन्नता कॉम्पैक्ट क्लस्टर के बराबर होती है। वह कैसा लगता है? – Theodor
@Theodor: यह वास्तव में एक संभावित मानदंड है। –