মিন-শিফট অ্যালগরিদমের পরিচিতি
মেশিন লার্নিং-এ বিভিন্ন ধরনের ক্লাস্টারিং অ্যালগরিদম রয়েছে। এই অ্যালগরিদমগুলো পাইথনে বাস্তবায়ন করা যায়। এই আর্টিকেলে আমরা 'মিন-শিফট' অ্যালগরিদম নিয়ে আলোচনা করব এবং পাইথনে তা বাস্তবায়ন করব। এটি একটি ক্লাস্টারিং অ্যালগরিদম যা অব্যাচিত শিক্ষণ (unsupervised learning) পদ্ধতিতে ব্যবহৃত হয়।
মিন-শিফট অ্যালগরিদমের বৈশিষ্ট্য
এই অ্যালগরিদমে কোনো অনুমান করা হয় না। এর মানে এটি একটি নন-প্যারামেট্রিক অ্যালগরিদম। এই অ্যালগরিদম পুনরাবৃত্তিমূলকভাবে ডেটা পয়েন্টগুলোকে নির্দিষ্ট ক্লাস্টারে বিন্যস্ত করে, যা ডেটা পয়েন্টগুলোকে সর্বোচ্চ ঘনত্বের দিকে স্থানান্তর করে করা হয়।
ডেটা পয়েন্টের এই উচ্চ ঘনত্বকে ক্লাস্টারের সেন্ট্রয়েড (centroid) বলা হয়। মিন-শিফট এবং K-মিনস ক্লাস্টারিং-এর মধ্যে পার্থক্য হলো: K-মিনসে ক্লাস্টার সংখ্যা আগেই নির্দিষ্ট করতে হয়, কিন্তু মিন-শিফটে ক্লাস্টার সংখ্যা ডেটার ওপর ভিত্তি করে স্বয়ংক্রিয়ভাবে নির্ধারিত হয়।
মিন-শিফট অ্যালগরিদমের ধাপসমূহ
- প্রতিটি ডেটা পয়েন্টকে তার নিজস্ব ক্লাস্টারে বিন্যস্ত করা হয়।
- তবে, এই ক্লাস্টারগুলোয় সেন্ট্রয়েড নির্ধারণ করা হয়।
- এই সেন্ট্রয়েডগুলোর অবস্থান পুনরাবৃত্তিমূলকভাবে আপডেট করা হয়।
- প্রক্রিয়াটি উচ্চতর ঘনত্বের অঞ্চলে চলে যায়।
- যখন সেন্ট্রয়েডগুলো এমন অবস্থানে পৌঁছায় যেখানে তারা আর আগে যেতে পারে না, তখন প্রক্রিয়াটি বন্ধ হয়।
পাইথনে বাস্তবায়ন (scikit-learn ব্যবহার করে)
import numpy as np
from sklearn.cluster import MeanShift
import matplotlib.pyplot as plt
from matplotlib import style
from sklearn.datasets import make_blobs
style.use("ggplot")
centers = [[3,3,1], [4,5,5], [11,10,10]]
X, _ = make_blobs(n_samples=950, centers=centers, cluster_std=0.89)
plt.title("মিন-শিফট অ্যালগরিদমের বাস্তবায়ন")
plt.xlabel("X-অক্ষ")
plt.ylabel("Y-অক্ষ")
plt.scatter(X[:,0], X[:,1])
plt.show()
ms = MeanShift()
ms.fit(X)
labels = ms.labels_
clusterCent = ms.cluster_centers_
print(clusterCent)
numCluster = len(np.unique(labels))
print("আনুমানিক ক্লাস্টার:", numCluster)
colors = 10*['r.', 'g.', 'b.', 'c.', 'k.', 'y.', 'm.']
for i in range(len(X)):
plt.plot(X[i][0], X[i][1], colors[labels[i]], markersize=3)
plt.scatter(clusterCent[:,0], clusterCent[:,1],
marker=".", color='k', s=20, linewidths=5, zorder=10)
plt.show()
আউটপুট

[[ 3.05250924 3.03734994 1.06159541] [ 3.92913017 4.99956874 4.86668482] [10.99127523 10.02361122 10.00084718]] আনুমানিক ক্লাস্টার: 3

কোড ব্যাখ্যা
- প্রয়োজনীয় প্যাকেজগুলো ইম্পোর্ট করা হয়েছে এবং সুবিধার জন্য অ্যালিয়াস সংজ্ঞায়িত করা হয়েছে।
- 'ggplot' স্টাইল 'style' ক্লাসের 'use' ফাংশনে নির্দিষ্ট করা হয়েছে।
- 'make_blobs' ফাংশন ডেটার ক্লাস্টার তৈরি করতে ব্যবহৃত হয়েছে।
- X-অক্ষ, Y-অক্ষ এবং শিরোনামের জন্য লেবেল দেওয়া হয়েছে।
- 'MeanShift' ফাংশন কল করা হয়েছে এবং একটি ভেরিয়েবলে সংরক্ষণ করা হয়েছে।
- ডেটা মডেলে ফিট করা হয়েছে।
- লেবেল এবং ক্লাস্টার সংখ্যা নির্ধারণ করা হয়েছে।
- ডেটা প্লট করা হয়েছে এবং মডেলে ফিট করা ডেটার স্ক্যাটার প্লট প্রদর্শন করা হয়েছে।
- 'show' ফাংশন দিয়ে কনসোলে ফলাফল দেখানো হয়েছে।