উত্তর:
আরও বেশি ধারাবাহিক ফলাফল পাওয়া এমন একটি পদ্ধতির হ'ল কে-মানে ++ । এই পদ্ধতির স্বীকৃতি দেয় যে সম্ভবত প্রাথমিক রেনডম অ্যাসাইনমেন্টের চেয়ে প্রাথমিক সেন্ট্রয়েড লোকেশনগুলির চেয়ে ভাল পছন্দ রয়েছে। বিশেষত, সেন্ট-অ্যারোডগুলি এমনভাবে বীজতলে স্থানগুলিতে একসাথে না ছড়িয়ে পড়লে কে-মানে আরও ভাল সম্পাদন করতে থাকে।
সংক্ষেপে, পদ্ধতিটি নিম্নরূপ:
দ্রষ্টব্য: আরও সেন্ট্রয়েড যুক্ত হওয়ার সাথে সাথে আপডেট করা উচিত। এটি একটি ডেটা পয়েন্ট এবং নিকটতম সেন্ট্রয়েডের মধ্যে দূরত্ব নির্ধারণ করা উচিত।
আপনি এই কাগজটি পড়তে আগ্রহী হতে পারেন যা পদ্ধতিটির প্রস্তাব দেয় এবং এর সামগ্রিক প্রত্যাশিত কার্যকারিতা বর্ণনা করে।
আমি আপনার প্রশ্নটির ভুল বোঝাবুঝি করছি, তবে সাধারণত কে-ই মানে আপনি সেট করা ক্লাস্টারের সংখ্যার (যেমন কে) এর উপর নির্ভর করে এলোমেলোভাবে আপনার সেন্ট্রয়েডগুলি বেছে নেন ses কে এর জন্য সংখ্যা নির্বাচন করা একটি বিষয়গত অনুশীলন হতে থাকে। শুরু করার জন্য একটি ভাল জায়গা হ'ল একটি কনুই / স্ক্রি প্লট যা এখানে পাওয়া যাবে:
http://en.wikipedia.org/wiki/Determining_the_number_of_clusters_in_a_data_set#The_Elbow_Method
এই সমস্যার স্বাভাবিক দৃষ্টিভঙ্গি হ'ল সেন্ট্রয়েডের বিভিন্ন এলোমেলো সূচনা সহ আপনার কে-মানে অ্যালগরিদমকে কয়েকবার পুনরায় চালানো এবং সর্বোত্তম সমাধানটি রাখা। আপনি আপনার প্রশিক্ষণ ডেটা বা ক্রস বৈধকরণের মাধ্যমে ফলাফলগুলি মূল্যায়নের মাধ্যমে এটি করতে পারেন।
সেন্ট্রয়েডগুলি আরম্ভ করার জন্য আরও অনেকগুলি উপায় রয়েছে তবে এগুলির কোনওটিই প্রতিটি একক সমস্যার জন্য সেরা সঞ্চালন করতে চলেছে না। আপনি আপনার নির্দিষ্ট সমস্যার জন্য এলোমেলোভাবে আরম্ভের সাথে এই পদ্ধতির মূল্যায়ন করতে পারেন।
আমি কনুই / স্ক্রি প্লটের সাথে একমত আমি এটি এলোমেলো বীজের চেয়ে স্বজ্ঞাতভাবে সংবেদনশীল পেয়েছি। এটি চেষ্টা করার জন্য একটি উদাহরণ কোড এখানে।
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)