k-साधन || उर्फ स्केलेबल के-मीन्स ++


12

बहमन बहमनी एट अल। k- साधन का परिचय दिया, जो k- साधन ++ का एक तेज़ संस्करण है।

के-साधनों का आरंभ ||

यह एल्गोरिथम उनके पेपर , बहमनी, बी।, मोसले, बी।, वातानी, ए।, कुमार, आर।, और वासिल्वित्सकी, एस। (2012) के पेज 4 से लिया गया है । स्केलेबल k- साधन ++। VLDB बंदोबस्ती की कार्यवाही , 5 (7), 622-633।

दुर्भाग्य से मैं उन फैंसी ग्रीक अक्षरों को नहीं समझता, इसलिए मुझे यह समझने में कुछ मदद चाहिए कि यह कैसे काम करता है। जहाँ तक मैं समझता हूँ कि यह एल्गोरिथ्म k-Mean ++ का एक उन्नत संस्करण है, और यह पुनरावृत्ति की संख्या को कम करने के लिए, ओवरसम्पलिंग का उपयोग करता है: k-mean ++ को iterate time है, जहाँ वांछित समूहों की संख्या है।कश्मीरkk

मुझे एक ठोस उदाहरण के माध्यम से बहुत अच्छी व्याख्या मिली कि k-mean ++ कैसे काम करता है, इसलिए मैं फिर से उसी उदाहरण का उपयोग करूंगा।

उदाहरण

मेरे पास निम्नलिखित डेटासेट हैं:

(7,1), (3,4), (1,5), (5,8), (1,3), (7,8), (8,2), (5,9), (8) , 0)

k=3 (वांछित समूहों की संख्या)

=2 (निरीक्षण कारक)

K- साधनों के लिए उदाहरण डेटा सेट ||

मैंने इसकी गणना करना शुरू कर दिया है, लेकिन मुझे यकीन नहीं है कि मुझे यह सही मिला है, और चरण 2, 4, या 5 के बारे में कोई विचार नहीं है।

  • चरण 1: एक बिंदु समान रूप से से यादृच्छिक पर नमूनाएक्सCX

    मान लीजिए कि पहला केन्द्रक है (k- साधन ++ के समान)(8,0)

  • चरण 2:ψϕX(C)

    कोई जानकारी नहीं

  • चरण 3:

    • d2(x,C)=[2,41,74,73,58,65,4,90]

      हम प्रत्येक बिंदु पर निकटतम केंद्र के लिए वर्ग दूरी की गणना करते हैं। इस मामले में हमारे पास अब तक केवल एक केंद्र है, ।(8,0)

    • d2(x,C)=[4,81,148,146,116,130,8,180]

      (क्योंकि इस मामले में )=2

    • cumulative d2(x,C)=[4,85,233,379,495,625,633,813]

      उठाओ अंतराल में यादृच्छिक संख्या । आप और । वे और जो क्रमशः ४ वें और [वें आइटम के अनुरूप हैं।[ 0 , 813 ) 246.90 659.42 [ 379 , 495 ) [ 633 , 813 )=2[0,813)246.90659.42[379,495)[633,813)

    • इसे बार दोहराएं , लेकिन इस मामले में (चरण 2 में परिकलित) क्या है ? ψO(logψ)ψ

  • चरण 4: , को किसी भी अन्य बिंदु की तुलना में करीब में बिंदुओं की संख्या होने के लिए सेट ।डब्ल्यू एक्स एक्स एक्स सीxCwxXxC
  • चरण 5: समूहों में में भारित बिंदुओं को याद करें । केCk

सामान्य रूप से या इस विशेष उदाहरण में कोई मदद बहुत अच्छी होगी।

जवाबों:


10

डेटा बिंदु: (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 ) }C{c1}={(8,0)}X={x1,x2,x3,x4,x5,x6,x7,x8}={(7,1),(3,4),(1,5),(5,8),(1,3),(7,8),(8,2),(5,9)}

चरण 2:

एक्स सी एक्स सी एक्सϕX(C) सेट से सभी बिंदुओं से तक सभी बिंदुओं से सभी छोटी 2-मानक दूरी (यूक्लिडियन दूरी) का योग है । दूसरे शब्दों में, प्रत्येक बिंदु के लिए दूरी को में निकटतम बिंदु तक पाते हैं , अंत में उन सभी न्यूनतम दूरी के योग की गणना करते हैं, जो प्रत्येक बिंदु के लिए है ।XCXCX

D_ साथ की निकटतम बिंदु के रूप में में दूरी । फिर हमारे पास ।एक्समैंसीψ=Σ n मैं = 12 सी (एक्समैं)dC2(xi)xiCψ=i=1ndC2(xi)

चरण 2 पर, में एक एकल तत्व होता है (चरण 1 देखें), और सभी तत्वों का समूह है। इस प्रकार इस चरण में बिंदु के बीच की दूरी और । इस प्रकार । एक्स डी 2CXसीएक्समैंφ=Σ n मैं = 1 | | xi-सी| | 2dC2(xi)Cxiϕ=i=1n||xic||2

एल जी ( ψ ) = एल जी ( 52.128 ) = 3.95 = 4 ( r o u n d e e d)ψ=i=1nd2(xi,c1)=1.41+6.4+8.6+8.54+7.61+8.06+2+9.4=52.128 log(ψ)=log(52.128)=3.95=4(rounded)

ध्यान दें कि चरण 3 में, सामान्य फॉर्मूला लागू किया जाता है क्योंकि एक से अधिक बिंदु होंगे।C

चरण 3:

के लिए पाश के लिए मार डाला है पहले से गणना की।log(ψ)

चित्र आपके समझ में नहीं आ रहे हैं। चित्र स्वतंत्र हैं, जिसका अर्थ है कि आप प्रत्येक बिंदु के लिए एक ड्रॉ निष्पादित करेंगे । तो, में प्रत्येक बिंदु के लिए , रूप में चिह्नित , से एक संभाव्यता की गणना करें । यहाँ आप एक कारक पैरामीटर के रूप में दिया जाता है, निकटतम केंद्र से दूरी है, और चरण 2 में समझाया गया है।एक्स एक्स मैंXXxiएल डी 2 ( एक्स , सी ) φ एक्स ( सी )px=ld2(x,C)/ϕX(C)ld2(x,C)ϕX(C)

एल्गोरिथ्म बस है:

  • सभी को खोजने के लिए में iterateएक्स आईXxi
  • प्रत्येक कंप्यूटp x ixipxi
  • में एक समान संख्या उत्पन्न करें , यदि से छोटी है, तो इसे फॉर्मपी x मैं सी '[0,1]pxiC
  • आप कर के बाद सभी ड्रॉ चयनित अंक से शामिल में सीCC

ध्यान दें कि पुनरावृत्ति में निष्पादित प्रत्येक चरण 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 wC0XxiXjCw[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)/j=1mwj

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(ψ)


क्या आप कृपया मेरे उदाहरण के लिए गणना के साथ अपने उत्तर का विस्तार कर सकते हैं?
14:19 बजे user1930254

मैं एक प्रोग्रामर हूं, मुझे लगता है कि मैं यह लिख सकता हूं कि यहां टाइप करने से तेज कोड में :)। आशा है कि यह एल्गो की व्याख्या करता है।
रैपाइयो

क्या आप कृपया बता सकते हैं कि लॉग (Ksi) संख्या पुनरावृत्तियों के साथ क्या विचार है? मैं इसके नीचे के विचार को नहीं समझता, ऐसा लगता है कि पुनरावृत्तियों की संख्या वस्तुओं के मूल्यों की सीमा पर निर्भर करेगी, जो उचित नहीं लगता है। उदाहरण के लिए, यदि वस्तुओं में लगभग 1000 के मान हैं, तो, उदाहरण के लिए, त्रुटि 1000 के लगभग हो सकती है, जिसका अर्थ है कि 3 पुनरावृत्तियों होंगे। दूसरी ओर, यदि मान 10 की सीमा में हैं, तो यह परिणाम हो सकता है कि त्रुटि लगभग 10 की है जिसके परिणामस्वरूप 1 पुनरावृत्ति होती है। क्या पुनरावृत्तियों की संख्या वस्तुओं की संख्या पर निर्भर नहीं होनी चाहिए?
मार्को

@pera मैंने आपके द्वारा उठाए गए मुद्दे को स्पष्ट करने के लिए उत्तर को अपडेट किया
rapaio

@rapaio आपके उत्तर के लिए धन्यवाद, मैं पहले से ही उस समाधान के लिए जा रहा हूं जो ध्यान की संख्या के आधार पर पुनरावृत्तियों की संख्या निर्धारित करेगा। जहां x को अधिक पुनरावृत्तियों की कीमत पर बेहतर आरंभीकरण प्राप्त करने के लिए बढ़ाया जा सकता है। क्या आप ठीक है कि दूसरे भाग के आधार पर, जो आपने दिया है? एक बार फिर धन्यवाद।
मार्को
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.