दिलचस्प सवाल। इस पेपर को मेरे ध्यान में लाने के लिए धन्यवाद। PDF link here of the original paper.
सरल शब्दों में, क्लस्टर केन्द्रों शुरू में इनपुट अवलोकन वैक्टर के सेट, जहां वेक्टर x
चुनने की संभावना अधिक है अगर x
किसी भी पहले से चुना केंद्रों के पास नहीं है से यादृच्छिक पर चुना जाता है।
यहां एक आयामी उदाहरण है। हमारे अवलोकन [0, 1, 2, 3, 4] हैं। पहले केंद्र, c1
, 0 हो। संभावना है कि अगला क्लस्टर केंद्र, c2
, x ||c1-x||^2
के आनुपातिक है। तो, पी (सी 2 = 1) = 1 ए, पी (सी 2 = 2) = 4 ए, पी (सी 2 = 3) = 9 ए, पी (सी 2 = 4) = 16 ए, जहां एक = 1/(1 + 4 + 9 + 16)।
मान लीजिए c2 = 4। फिर, पी (सी 3 = 1) = 1 ए, पी (सी 3 = 2) = 4 ए, पी (सी 3 = 3) = 1 ए, जहां एक = 1/(1 + 4 + 1)।
मैंने पायथन में प्रारंभिक प्रक्रिया को कोड किया है; मुझे नहीं पता कि यह आपकी मदद करता है या नहीं। स्पष्टीकरण के साथ
def initialize(X, K):
C = [X[0]]
for k in range(1, K):
D2 = scipy.array([min([scipy.inner(c-x,c-x) for c in C]) for x in X])
probs = D2/D2.sum()
cumprobs = probs.cumsum()
r = scipy.rand()
for j,p in enumerate(cumprobs):
if r < p:
i = j
break
C.append(X[i])
return C
संपादित करें: cumsum
के उत्पादन में हमें सीमाओं अंतराल [0,1] विभाजन देता है। इन विभाजनों में केंद्र के रूप में चुने गए इसी बिंदु की संभावना के बराबर लंबाई होती है। तो फिर, r
के बीच समान रूप से [0,1] के बीच चुना गया है, यह इन अंतराल में से एक में गिर जाएगा (break
की वजह से)। for
पाश चेकों को देखने के लिए जो विभाजन r
में है
उदाहरण:।
probs = [0.1, 0.2, 0.3, 0.4]
cumprobs = [0.1, 0.3, 0.6, 1.0]
if r < cumprobs[0]:
# this event has probability 0.1
i = 0
elif r < cumprobs[1]:
# this event has probability 0.2
i = 1
elif r < cumprobs[2]:
# this event has probability 0.3
i = 2
elif r < cumprobs[3]:
# this event has probability 0.4
i = 3
शायद http://stats.stackexchange.com/ – Chase