কে-নেয়ারেস্ট নেইবর (K-Nearest Neighbors, সংক্ষেপে KNN) হলো একটি সুপারভাইজ্ড লার্নিং অ্যালগরিদম যা ব্যবহার হয় ক্লাসিফিকেশন এবং রিগ্রেশন জন্য। এই অ্যালগরিদমের প্রধান ধারণা হলো প্রেডিক্ট করার জন্য একটি নতুন ডেটা পয়েন্ট, সেই ডেটা পয়েন্টের কাছাকাছি কতগুলো পূর্ববর্তী ডেটা পয়েন্ট আছে তাদের ক্লাস বা মান দেখে প্রেডিক্ট করা।
কার্যপ্রণালী:
- ট্রেনিং স্টেজ:
- প্রথমে ট্রেনিং সেট দেওয়া হয়, যা এমন ডেটা সেট যা একটি লেবেল বা সংখ্যার সাথে সম্পর্কিত।
- কে-নেয়ারেস্ট নেইবর অ্যালগরিদম কোন প্রকার মডেল ট্রেন না করে, শুধুমাত্র ট্রেনিং সেটের ডেটা স্টোর করে রাখে।
- প্রেডিকশন স্টেজ:
- একটি নতুন ডেটা পয়েন্ট দেওয়া হয়।
- কে-নেয়ারেস্ট নেইবর এল্গরিদম তাদের মধ্যে সর্বনিকট্ট কয়েকটি পূর্ববর্তী ডেটা পয়েন্ট নিয়ে আসে (যেমন, K সংখ্যার নিকটতম পয়েন্ট)।
- এই পূর্ববর্তী ডেটা পয়েন্টগুলির ক্লাস বা মান দেখে নতুন ডেটা পয়েন্টের ক্লাসিফিকেশন বা মান প্রেডিক্ট করে।
কার্যকারিতা:
- কে-নেয়ারেস্ট নেইবর অ্যালগরিদমের পারফর্ম্যান্স বেশি কাছাকাছি ডেটা পয়েন্টগুলির উপর নির্ভর করে।
- কে-নেয়ারেস্ট নেইবর ক্লাসিফিকেশনের জন্য একটি প্রধান মেট্রিক হলো “ইউক্লিডিয়ান ডিস্ট্যান্স”। এই ডিস্ট্যান্স দ্বারা নির্ধারিত হয় কোন দুটি পয়েন্ট মধ্যে দূরত্ব।
হাইপারপ্যারামিটার:
- কে-নেয়ারেস্ট নেইবরের প্রধান হাইপারপ্যারামিটার হলো K, যা নির্দেশ করে কতগুলো নিকটতম পূর্ববর্তী পয়েন্ট ব্যবহার করা হবে প্রেডিক্ট করার সময়। সাধারণত, K এর মান অদলবদল করে মডেলের পারফর্ম্যান্সের উপর।
কে-নেয়ারেস্ট নেইবর এল্গরিদম সহজ এবং প্রভাবশালী যেহেতু সম্পর্কিত ডেটা পয়েন্টগুলির মধ্যে নিকটতম পূর্ববর্তী ডেটা পয়েন্ট ব্যবহার করে প্রেডিক্ট করে।
import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import make_classification
from sklearn.neighbors import KNeighborsClassifier
# কে - নেয়ারেস্ট নেইবর
X, y = make_classification(n_samples=100, n_features=2, n_informative=2, n_redundant=0, random_state=42)
model = KNeighborsClassifier(n_neighbors=3)
model.fit(X, y)
# প্লট ডিসিশন
x_min, x_max = X[:, 0].min() - 1, X[:, 0].max() + 1
y_min, y_max = X[:, 1].min() - 1, X[:, 1].max() + 1
xx, yy = np.meshgrid(np.arange(x_min, x_max, 0.1), np.arange(y_min, y_max, 0.1))
Z = model.predict(np.c_[xx.ravel(), yy.ravel()])
Z = Z.reshape(xx.shape)
plt.contourf(xx, yy, Z, alpha=0.4)
plt.scatter(X[:, 0], X[:, 1], c=y, s=20, edgecolor='k')
plt.xlabel('মান 1')
plt.ylabel('মান 2')
plt.title('কে-নেয়ারেস্ট নেইবর')
plt.grid(True)
plt.show()
এই প্রোগ্রামটি ব্যবহার করে আমরা একটি ক্লাসিফিকেশন ডেটা সেট তৈরি করেছি এবং সেটাকে কে-নেয়ারেস্ট নেইবর (K-Nearest Neighbors) অ্যালগরিদম দিয়ে ক্লাসিফাই করেছি। এখানে কে-নেয়ারেস্ট নেইবর হচ্ছে একটি সুপারভাইজ্ড লার্নিং অ্যালগরিদম, যা ক্লাসিফিকেশন এবং রিগ্রেশনে ব্যবহৃত হয়।
ডেটা তৈরি করা:
আমরা make_classification ব্যবহার করে ২ ডাইমেনশনাল ডেটা সেট তৈরি করেছি। এটি দুটি ফীচারের ডেটা হচ্ছে, যা সম্পর্কিত (n_informative=2) এবং অপরটি অতিরিক্ত (n_redundant=0)। এটি র্যান্ডমলি তৈরি করা হয়েছে এবং ডেটা সেটের সম্পর্কিত এবং অসম্পর্কিত ফীচারের সংখ্যার মধ্যে পার্থক্য তৈরি করতে হয়েছে (random_state=42)।
মডেল তৈরি:
আমরা KNeighborsClassifier ব্যবহার করে একটি কে-নেয়ারেস্ট নেইবর মডেল তৈরি করেছি। এখানে n_neighbors=3 হলো কে-নেয়ারেস্ট নেইবর মডেলের একটি হাইপারপ্যারামিটার, যা নিকটতম সন্নিকট নেইবরের সংখ্যা নির্দেশ করে।
ডিসিশন বাউন্ডারি প্লট:
ডিসিশন বাউন্ডারি প্লট তৈরি করতে আমরা রেঞ্জ নির্দিষ্ট করছি মান 1 এবং মান 2 এর জন্য এবং একটি গ্রিড তৈরি করছি একটি মানের জন্য প্রেডিকশন করার জন্য (meshgrid এর মাধ্যমে)। প্রতিটি পয়েন্টের জন্য আমরা মডেলের মাধ্যমে ক্লাসিফিকেশন প্রেডিক্ট করি এবং এটি রিশেপ করি এভাবে যে প্রেডিকশন ফর্ম্যাট টেবিলে প্রদর্শিত হয়।
প্লটিং:
প্লটিং করার জন্য contourf ব্যবহার করে ডিসিশন বাউন্ডারি প্লট তৈরি করেছি এবং scatter ব্যবহার করে সংকেত বিন্যাস প্লট করেছি। এখানে প্লটের স্ক্যাটার পয়েন্টগুলি দেখাচ্ছে আমাদের ডেটাসেটের প্রতিটি পয়েন্ট এবং তাদের ক্লাসিফিকেশন প্রদর্শিত হয়েছে রঙের সাহায্যে।
প্রেডিকশন পূর্বাভাস:
শেষে, একটি গ্রিড তৈরি করে আমরা প্লট দেখাতে পারি এবং এটি প্রদর্শিত করতে পারি প্লট এবং প্রদর্শন করতে পারি মডেলের পার্থক্য প্রেডিকশন এবং প্রেডিকশন ফর্ম্যাট ব্যবহার করা হয়েছে।

Leave a comment