K- মানে ক্লাস্টারিং হল একটি তত্ত্বাবধানহীন লার্নিং অ্যালগরিদম যা প্রতিটি বিন্দু ইউক্লিডিয়ান দূরত্বের উপর ভিত্তি করে একটি কেন্দ্রীয় বিন্দুতে ডেটা গ্রুপ করে ভরকেন্দ্র. সেন্ট্রোয়েডগুলি একই ক্লাস্টারে থাকা সমস্ত বিন্দুর মাধ্যমে সংজ্ঞায়িত করা হয়। অ্যালগরিদম প্রথমে এলোমেলো পয়েন্টগুলিকে সেন্ট্রোয়েড হিসাবে বেছে নেয় এবং তারপরে পূর্ণ একত্রিত হওয়া পর্যন্ত তাদের সামঞ্জস্য করতে পুনরাবৃত্তি করে।
কে-মান ব্যবহার করার সময় একটি গুরুত্বপূর্ণ বিষয় মনে রাখবেন, ক্লাস্টারের সংখ্যা একটি হাইপারপ্যারামিটার, এটি মডেল চালানোর আগে সংজ্ঞায়িত করা হবে।
মাত্র 3 লাইনের কোড সহ Scikit-Learn ব্যবহার করে K- মানে প্রয়োগ করা যেতে পারে। স্কিট-লার্ন-এ ইতিমধ্যেই একটি সেন্ট্রোয়েড অপ্টিমাইজেশন পদ্ধতি উপলব্ধ রয়েছে, kmeans++, যা মডেলটিকে দ্রুত একত্রিত হতে সাহায্য করে।
K- মানে ক্লাস্টারিং অ্যালগরিদম প্রয়োগ করতে, আসুন লোড করি পামার পেঙ্গুইন ডেটাসেট, ক্লাস্টার করা হবে এমন কলামগুলি বেছে নিন এবং রঙিন কোডেড ক্লাস্টার সহ একটি স্ক্যাটারপ্লট প্লট করতে Seaborn ব্যবহার করুন।
বিঃদ্রঃ: আপনি এখান থেকে ডেটাসেট ডাউনলোড করতে পারেন লিংক.
আসুন লাইব্রেরিগুলি আমদানি করি এবং পেঙ্গুইন ডেটাসেটটি লোড করি, এটিকে নির্বাচিত কলামগুলিতে ছাঁটাই করি এবং অনুপস্থিত ডেটা সহ সারি ড্রপ করি (সেখানে মাত্র 2টি ছিল):
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans
df = pd.read_csv('penguins.csv')
print(df.shape)
df = df[['bill_length_mm', 'flipper_length_mm']]
df = df.dropna(axis=0)
আমাদের ডেটার জন্য ক্লাস্টারগুলির একটি ইঙ্গিত পেতে আমরা কনুই পদ্ধতি ব্যবহার করতে পারি। এটি একটি কনুই আকৃতি সহ একটি লাইন প্লটের ব্যাখ্যায় গঠিত। গুচ্ছ সংখ্যা হল কনুই বাঁক ছিল. প্লটের x অক্ষ হল ক্লাস্টারের সংখ্যা এবং y অক্ষ হল প্রতিটি সংখ্যক ক্লাস্টারের জন্য স্কোয়ারের ক্লাস্টার সমষ্টি (WCSS)।
wcss = []
for i in range(1, 11):
clustering = KMeans(n_clusters=i, init='k-means++', random_state=42)
clustering.fit(df)
wcss.append(clustering.inertia_)
ks = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
sns.lineplot(x = ks, y = wcss);
কনুই পদ্ধতি নির্দেশ করে আমাদের ডেটাতে 2 টি ক্লাস্টার রয়েছে। ক্লাস্টার করার আগে এবং পরে ডেটা প্লট করা যাক:
fig, axes = plt.subplots(nrows=1, ncols=2, figsize=(15,5))
sns.scatterplot(ax=axes[0], data=df, x='bill_length_mm', y='flipper_length_mm').set_title('Without clustering')
sns.scatterplot(ax=axes[1], data=df, x='bill_length_mm', y='flipper_length_mm', hue=clustering.labels_).set_title('Using the elbow method');
এই উদাহরণটি দেখায় কিভাবে কনুই পদ্ধতি শুধুমাত্র একটি রেফারেন্স যখন ক্লাস্টার সংখ্যা নির্বাচন করতে ব্যবহার করা হয়। আমরা ইতিমধ্যেই জানি যে ডেটাসেটে আমাদের 3 ধরনের পেঙ্গুইন আছে, কিন্তু আমরা যদি কনুই পদ্ধতি ব্যবহার করে তাদের সংখ্যা নির্ধারণ করি, তাহলে 2 টি ক্লাস্টার আমাদের ফলাফল হবে।
যেহেতু K- মানে ডেটা বৈচিত্রের জন্য সংবেদনশীল, আসুন আমরা যে কলামগুলিকে ক্লাস্টার করছি তার বর্ণনামূলক পরিসংখ্যান দেখি:
df.describe().T
এর ফলে:
count mean std min 25% 50% 75% max
bill_length_mm 342.0 43.921930 5.459584 32.1 39.225 44.45 48.5 59.6
flipper_length_mm 342.0 200.915205 14.061714 172.0 190.000 197.00 213.0 231.0
লক্ষ্য করুন যে গড়টি আদর্শ বিচ্যুতি (std) থেকে অনেক দূরে, এটি উচ্চ বৈচিত্র্য নির্দেশ করে। স্ট্যান্ডার্ড স্কেলার দিয়ে ডেটা স্কেল করে এটি কমানোর চেষ্টা করা যাক:
from sklearn.preprocessing import StandardScaler
ss = StandardScaler()
scaled = ss.fit_transform(df)
এখন, স্কেল করা ডেটার জন্য কনুই পদ্ধতির প্রক্রিয়াটি পুনরাবৃত্তি করা যাক:
wcss_sc = []
for i in range(1, 11):
clustering_sc = KMeans(n_clusters=i, init='k-means++', random_state=42)
clustering_sc.fit(scaled)
wcss_sc.append(clustering_sc.inertia_)
ks = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
sns.lineplot(x = ks, y = wcss_sc);
সেরা-অভ্যাস, শিল্প-স্বীকৃত মান এবং অন্তর্ভুক্ত চিট শীট সহ গিট শেখার জন্য আমাদের হ্যান্ডস-অন, ব্যবহারিক গাইড দেখুন। গুগলিং গিট কমান্ড এবং আসলে বন্ধ করুন শেখা এটা!
এইবার, ক্লাস্টারের প্রস্তাবিত সংখ্যা হল 3। তুলনা করার জন্য আমরা আবার ক্লাস্টার লেবেল সহ ডেটা প্লট করতে পারি আগের দুটি প্লটের সাথে:
fig, axes = plt.subplots(nrows=1, ncols=3, figsize=(15,5))
sns.scatterplot(ax=axes[0], data=df, x='bill_length_mm', y='flipper_length_mm').set_title('Without cliustering')
sns.scatterplot(ax=axes[1], data=df, x='bill_length_mm', y='flipper_length_mm', hue=clustering.labels_).set_title('With the Elbow method')
sns.scatterplot(ax=axes[2], data=df, x='bill_length_mm', y='flipper_length_mm', hue=clustering_sc.labels_).set_title('With the Elbow method and scaled data');
K- মানে ক্লাস্টারিং ব্যবহার করার সময়, আপনাকে ক্লাস্টারের সংখ্যা পূর্ব-নির্ধারণ করতে হবে। আমরা দেখেছি যখন একটি পদ্ধতি ব্যবহার করে আমাদের নির্বাচন করুন k ক্লাস্টারের সংখ্যা, ফলাফল শুধুমাত্র একটি পরামর্শ এবং ডেটার বৈচিত্র্যের পরিমাণ দ্বারা প্রভাবিত হতে পারে। একটি গভীর বিশ্লেষণ পরিচালনা করা এবং ক্লাস্টার করার সময় বিভিন্ন _k_s সহ একাধিক মডেল তৈরি করা গুরুত্বপূর্ণ।
যদি ডেটাতে কতগুলি ক্লাস্টার রয়েছে তার পূর্বে কোনো ইঙ্গিত না থাকে তবে এটিকে কল্পনা করুন, এটি পরীক্ষা করুন এবং ক্লাস্টারিং ফলাফলগুলি অর্থপূর্ণ কিনা তা দেখতে এটি ব্যাখ্যা করুন। যদি না হয়, আবার ক্লাস্টার. এছাড়াও, আরও একটি মেট্রিক দেখুন এবং বিভিন্ন ক্লাস্টারিং মডেলগুলিকে তাৎক্ষণিক করুন – K-এর জন্য, সিলুয়েট স্কোর দেখুন এবং ফলাফলগুলি একই থাকে কিনা তা দেখতে হয়ত হায়ারার্কিক্যাল ক্লাস্টারিং দেখুন।