डेटा बिंदु: (7,1), (3,4), (1,5), (5,8), (1,3), (7,8), (8,2), (5,9) , (8.0)
l = 2 // ओवरसैंपलिंग फैक्टर
k = 3 // नहीं। वांछित समूहों के
चरण 1:
मान लीजिए कि पहला केन्द्रक is । { c 1 } = { ( 8 , 0 ) }सी{ सी1} = { ( 8 , 0 ) }एक्स= { एक्स1, एक्स2, एक्स3, एक्स4, एक्स5, एक्स6, एक्स7, एक्स8} = { ( 7 , 1 ) , ( 3 , 4 ) , ( 1 , 5 ) , ( 5 , 8 ) , ( 1 , 3 ) , ( 7 , 8 ) ,( 8 , 2 ) , ( 5 , 9 ) }
चरण 2:
एक्स सी एक्स सी एक्सφएक्स( C)) सेट से सभी बिंदुओं से तक सभी बिंदुओं से सभी छोटी 2-मानक दूरी (यूक्लिडियन दूरी) का योग है । दूसरे शब्दों में, प्रत्येक बिंदु के लिए दूरी को में निकटतम बिंदु तक पाते हैं , अंत में उन सभी न्यूनतम दूरी के योग की गणना करते हैं, जो प्रत्येक बिंदु के लिए है ।एक्ससीएक्ससीएक्स
D_ साथ की निकटतम बिंदु के रूप में में दूरी । फिर हमारे पास ।एक्समैंसीψ=Σ n मैं = 1 घ2 सी (एक्समैं)घ2सी( x)मैं)एक्समैंसीψ = Σnमैं = १घ2सी( x)मैं)
चरण 2 पर, में एक एकल तत्व होता है (चरण 1 देखें), और सभी तत्वों का समूह है। इस प्रकार इस चरण में बिंदु के बीच की दूरी और । इस प्रकार । एक्स डी 2सीएक्ससीएक्समैंφ=Σ n मैं = 1 | | xi-सी| | 2घ2सी( x)मैं)सीएक्समैंφ = Σnमैं = १| | एक्समैं- सी | |2
एल ओ जी ( ψ ) = एल ओ जी ( 52.128 ) = 3.95 = 4 ( r o u n d e e d)ψ = Σnमैं = १घ2( x)मैं, सी1) = 1.41 + 6.4 + 8.6 + 8.54 + 7.61 + 8.06 + 2 + 9.4 = 52.128
एल ओ जी( Ψ ) = एल ओ जी( 52.128 ) = 3.95 = 4 ( r o u n d)ई घ)
ध्यान दें कि चरण 3 में, सामान्य फॉर्मूला लागू किया जाता है क्योंकि एक से अधिक बिंदु होंगे।सी
चरण 3:
के लिए पाश के लिए मार डाला है पहले से गणना की।एल ओ जी( ψ )
चित्र आपके समझ में नहीं आ रहे हैं। चित्र स्वतंत्र हैं, जिसका अर्थ है कि आप प्रत्येक बिंदु के लिए एक ड्रॉ निष्पादित करेंगे । तो, में प्रत्येक बिंदु के लिए , रूप में चिह्नित , से एक संभाव्यता की गणना करें । यहाँ आप एक कारक पैरामीटर के रूप में दिया जाता है, निकटतम केंद्र से दूरी है, और चरण 2 में समझाया गया है।एक्स एक्स मैंएक्सएक्सएक्समैंएल डी 2 ( एक्स , सी ) φ एक्स ( सी )पीएक्स= एल डी2( एक्स , सी) / ϕएक्स( C))एलघ2( एक्स , सी)ϕX(C)
एल्गोरिथ्म बस है:
- सभी को खोजने के लिए में iterateएक्स आईXxi
- प्रत्येक कंप्यूटp x ixipxi
- में एक समान संख्या उत्पन्न करें , यदि से छोटी है, तो इसे फॉर्मपी x मैं सी '[0,1]pxiC′
- आप कर के बाद सभी ड्रॉ चयनित अंक से शामिल में सीC′C
ध्यान दें कि पुनरावृत्ति में निष्पादित प्रत्येक चरण 3 (मूल एल्गोरिथ्म की पंक्ति 3) में आप से अंक का चयन करने की उम्मीद करते हैं (यह आसानी से अपेक्षा के लिए सीधे सूत्र लिखना दर्शाया गया है)।एक्सlX
for(int i=0; i<4; i++) {
// compute d2 for each x_i
int[] psi = new int[X.size()];
for(int i=0; i<X.size(); i++) {
double min = Double.POSITIVE_INFINITY;
for(int j=0; j<C.size(); j++) {
if(min>d2(x[i],c[j])) min = norm2(x[i],c[j]);
}
psi[i]=min;
}
// compute psi
double phi_c = 0;
for(int i=0; i<X.size(); i++) phi_c += psi[i];
// do the drawings
for(int i=0; i<X.size(); i++) {
double p_x = l*psi[i]/phi;
if(p_x >= Random.nextDouble()) {
C.add(x[i]);
X.remove(x[i]);
}
}
}
// in the end we have C with all centroid candidates
return C;
चरण 4:
उस के लिए एक सरल एल्गोरिथ्म आकार की एक वेक्टर बनाने के लिए में तत्वों की संख्या के बराबर है , और साथ अपने सभी मूल्यों को इनिशियलाइज़ करता है । अब में iterate (तत्वों को सेंट्रोइड में नहीं चुना गया है), और प्रत्येक के लिए, निकटतम सेंट्रोइड ( से तत्व ) और साथ वेतन वृद्धि का इंडेक्स ढूंढें । अंत में आपके पास वेक्टर गणना ठीक से होगी।w 0 एक्स एक्स मैं ∈ एक्स जे सी डब्ल्यू [ जे ] 1 wC0Xxi∈XjCw[j]1w
double[] w = new double[C.size()]; // by default all are zero
for(int i=0; i<X.size(); i++) {
double min = norm2(X[i], C[0]);
double index = 0;
for(int j=1; j<C.size(); j++) {
if(min>norm2(X[i],C[j])) {
min = norm2(X[i],C[j]);
index = j;
}
}
// we found the minimum index, so we increment corresp. weight
w[index]++;
}
चरण 5:
पिछले चरण में गणना की गई भार ध्यान में रखते हुए , आप सेंटीरो को प्रारंभ करने के लिए केवल अंक का चयन करने के लिए kmeans ++ एल्गोरिथ्म का पालन करते हैं । इस प्रकार, आप लूप्स के लिए निष्पादित करेंगे , प्रत्येक लूप में एक तत्व का चयन करते हुए, प्रत्येक तत्व लिए संभाव्यता के साथ यादृच्छिक रूप से खींचा जाएगा । प्रत्येक चरण में आप एक तत्व का चयन करते हैं, और इसे उम्मीदवारों से हटाते हैं, इसके संबंधित वजन को भी हटाते हैं।wकश्मीर पी ( मैं ) = डब्ल्यू ( मैं ) / Σ मीटर j = 1 डब्ल्यू जेkkp(i)=w(i)/∑mj=1wj
for(int k=0; k<K; k++) {
// select one centroid from candidates, randomly,
// weighted by w
// see kmeans++ and you first idea (which is wrong for step 3)
...
}
सभी पिछले चरण जारी हैं, जैसे कि kmeans ++ के मामले में, क्लस्टरिंग एल्गोरिथ्म के सामान्य प्रवाह के साथ
मुझे उम्मीद है कि अब स्पष्ट है।
[बाद में, बाद में संपादित करें]
मुझे लेखकों द्वारा बनाई गई एक प्रस्तुति भी मिली, जहाँ आप स्पष्ट रूप से यह नहीं कह सकते हैं कि प्रत्येक पुनरावृत्ति में कई बिंदुओं का चयन किया जा सकता है। प्रस्तुति यहां है ।
[बाद में @ pera के मुद्दे को संपादित करें]
यह स्पष्ट है कि डेटा पर निर्भर करता है और आपके द्वारा उठाया गया मुद्दा एक वास्तविक समस्या होगी यदि एल्गोरिथ्म को एकल होस्ट / मशीन / कंप्यूटर पर निष्पादित किया जाएगा। हालाँकि, आपको यह ध्यान रखना होगा कि किमी वेरिएंट का यह संस्करण बड़ी समस्याओं के लिए, और वितरित सिस्टम पर चलने के लिए समर्पित है। इससे भी अधिक, लेखक एल्गोरिथ्म विवरण के ऊपर निम्नलिखित पैराग्राफ में निम्नलिखित बताते हैं:log(ψ)
ध्यान दें कि का आकार इनपुट आकार से काफी छोटा है; इसलिए पुनर्पाठ जल्दी से किया जा सकता है। उदाहरण के लिए, MapReduce में, क्योंकि केंद्रों की संख्या छोटी है, वे सभी एक मशीन को सौंपे जा सकते हैं और किसी भी साबित करने योग्य सन्निकटन एल्गोरिदम (जैसे k- साधन ++) k केंद्रों को प्राप्त करने के लिए बिंदुओं को क्लस्टर करने के लिए उपयोग किया जा सकता है। एल्गोरिथ्म 2 के एक MapReduce कार्यान्वयन की धारा 3.5 में चर्चा की गई है। जबकि हमारा एल्गोरिथ्म बहुत सरल है और खुद को एक प्राकृतिक समानांतर कार्यान्वयन ( राउंड में) के लिए उधार देता है , चुनौतीपूर्ण हिस्सा यह दिखाने के लिए है कि इसकी उचित गारंटी है।एल ओ जी ( ψ )Clog(ψ)
नोट करने के लिए एक और बात एक ही पृष्ठ पर निम्नलिखित नोट है जो बताता है:
व्यवहार में, धारा 5 में हमारे प्रयोगात्मक परिणाम बताते हैं कि केवल कुछ राउंड ही एक अच्छे समाधान तक पहुंचने के लिए पर्याप्त हैं।
जिसका अर्थ है कि आप एल्गोरिथ्म को बार के लिए नहीं, बल्कि दिए गए निरंतर समय के लिए चला सकते हैं।log(ψ)