K- साधन: प्रारंभिक सेंट्रोइड के कुशल सेट को चुनने के लिए कुछ अच्छे तरीके क्या हैं?


17

जब सेंट्रोइड का एक यादृच्छिक प्रारंभिक उपयोग किया जाता है, तो K- साधनों के विभिन्न रन अलग-अलग कुल SSE का उत्पादन करते हैं। और यह एल्गोरिथम के प्रदर्शन में महत्वपूर्ण है। इस समस्या को हल करने की दिशा में कुछ प्रभावी दृष्टिकोण क्या हैं? हाल के दृष्टिकोणों की सराहना की जाती है।

जवाबों:


12

एक दृष्टिकोण जो अधिक सुसंगत परिणाम देता है वह है K-Mean ++ । यह दृष्टिकोण स्वीकार करता है कि सरल यादृच्छिक असाइनमेंट की तुलना में प्रारंभिक सेंट्रोइड स्थानों का एक बेहतर विकल्प है। विशेष रूप से, K- साधन बेहतर प्रदर्शन करने के लिए जाता है जब सेंट्रोइड्स को इस तरह से बीज दिया जाता है जो उन्हें अंतरिक्ष में एक साथ नहीं टकराते हैं।

संक्षेप में, विधि इस प्रकार है:

  1. प्रारंभिक सेंट्रोइड के रूप में यादृच्छिक पर अपने डेटा बिंदुओं में से एक चुनें।
  2. गणना करें , आपके प्रारंभिक सेंट्रोइड और अन्य सभी डेटा बिंदुओं के बीच की दूरी, एक्सडी(एक्स)एक्स
  3. D ( x ) 2 के लिए आनुपातिकता के साथ शेष डेटापॉइंट से अपना अगला सेंट्रोइड चुनेंडी(एक्स)2
  4. तब तक दोहराएं जब तक सभी सेंट्रोइड्स को असाइन नहीं किया गया हो।

नोट: को अपडेट किया जाना चाहिए क्योंकि अधिक केन्द्रक जोड़े जाते हैं। इसे डेटा बिंदु और निकटतम सेंट्रोइड के बीच की दूरी तय करनी चाहिए।डी(एक्स)

आप इस पेपर को पढ़ने के लिए भी इच्छुक हो सकते हैं जो विधि का प्रस्ताव करता है और इसके समग्र अपेक्षित प्रदर्शन का वर्णन करता है।


5

मैं आपके प्रश्न का गलत अर्थ लगा सकता हूं, लेकिन आमतौर पर के-साधन आपके द्वारा सेट किए गए समूहों की संख्या (यानी के) के आधार पर आपके लिए यादृच्छिक रूप से आपके सेंट्रोइड्स को चुनता है। कश्मीर के लिए संख्या का चयन एक व्यक्तिपरक अभ्यास है। शुरू करने के लिए एक अच्छी जगह एक एल्बो / स्क्री प्लॉट है जो यहां पाया जा सकता है:

http://en.wikipedia.org/wiki/Determining_the_number_of_clusters_in_a_data_set#The_Elbow_Method


मुझे लगता है कि सवाल केन्द्रक आरंभीकरण, जिस पर प्रलेखन पेज { 'k-साधन ++', 'यादृच्छिक' या एक ndarray} हैं के बारे में है scikit-learn.org/stable/modules/generated/...
इताची

4

इस समस्या के बारे में सामान्य दृष्टिकोण कई बार अपने K- साधन एल्गोरिथ्म को फिर से चलाना है, केन्द्रक के विभिन्न यादृच्छिक आरंभीकरण के साथ, और सबसे अच्छा समाधान रखने के लिए। आप अपने प्रशिक्षण डेटा पर या क्रॉस सत्यापन के माध्यम से परिणामों का मूल्यांकन करके ऐसा कर सकते हैं।

सेंट्रोइड्स को शुरू करने के कई अन्य तरीके हैं, लेकिन उनमें से कोई भी हर एक समस्या के लिए सबसे अच्छा प्रदर्शन करने वाला नहीं है। आप अपनी विशिष्ट समस्या के लिए यादृच्छिक आरंभ के साथ इन दृष्टिकोणों का मूल्यांकन कर सकते हैं।


0

मैं एल्बो / स्क्री प्लॉट से सहमत हूं। मुझे यह एक यादृच्छिक बीज की तुलना में अधिक सहज ज्ञान युक्त समझदार लगा। इसे आज़माने के लिए एक उदाहरण कोड है।

Ks=30
mean_acc=np.zeros((Ks-1))
std_acc=np.zeros((Ks-1))
ConfustionMx=[];
for n in range(1,Ks):    
    #Train Model and Predict  
    kNN_model = KNeighborsClassifier(n_neighbors=n).fit(X_train,y_train)
    yhat = kNN_model.predict(X_test)
    mean_acc[n-1]=np.mean(yhat==y_test);
    std_acc[n-1]=np.std(yhat==y_test)/np.sqrt(yhat.shape[0])

plt.plot(range(1,Ks),mean_acc,'g')
plt.fill_between(range(1,Ks),mean_acc - 1 * std_acc,mean_acc + 1 * std_acc, alpha=0.10)
plt.legend(('Accuracy ', '+/- 3xstd'))
plt.ylabel('Accuracy ')
plt.xlabel('Number of Nabors (K)')
plt.tight_layout()
plt.show()

print( "The best accuracy was with", mean_acc.max(), "with k=", mean_acc.argmax()+1)
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.