Arefin Anwar
K- নিয়ারেস্ট নেইবার্স (KNN) মডেলটি একটি সহজ এবং শক্তিশালী মেশিন লার্নিং অ্যালগরিদম। এটি মূলত সুপারভাইজড লার্নিং-এর অন্তর্ভুক্ত, যেখানে ডেটা লেবেল করা থাকে এবং মডেল সেই লেবেলের উপর ভিত্তি করে ভবিষ্যদ্বাণী করে (ডেটা লেবেল বলতে ডাটার কোন একটি রো এর ইনফো কী নির্দেশ করে টা বুঝায়) ।
কিভাবে KNN কাজ করে? খুব সহজ! যখন একটি নতুন ডেটা পয়েন্ট আসবে, তখন মডেল নিকটবর্তী “K” সংখ্যক ডেটা পয়েন্ট খুঁজে বের করবে এবং তাদের মধ্যে যে লেবেল সবচেয়ে বেশি থাকে, সেটিই প্রেডিকশন হিসেবে বেছে নেবে। উদাহরণস্বরূপ, একটি মডেল তৈরি করা হয়েছে ফল চেনার জন্য। যদি কোনো অজানা ফলের ছবি আসতে থাকে এবং সেই ফলের চারপাশে ৫টি নিকটবর্তী ফলের মধ্যে ৩টি আপেল হয়, তাহলে মডেল সেটিকে আপেল হিসেবে চিহ্নিত করবে।
চল আরেকটু গল্পঃ শুনি! ধরো, তুমি একটি গ্রন্থাগারে গিয়েছো যেখানে বইগুলো বিভিন্ন বিভাগে ভাগ করা আছে—যেমন বিজ্ঞান, গল্প, এবং ইতিহাস। তুমি একটি নতুন বই নিয়ে গিয়েছো এবং জানতে চাও, এটি কোন বিভাগে রাখা উচিত। KNN মডেল এই সমস্যাটি সমাধান করতে পারে। এটি নতুন বইয়ের বিষয়বস্তু দেখে গ্রন্থাগারের বিদ্যমান বইগুলোর সঙ্গে তুলনা করবে। ধরো তুমি রানডম একটা জায়গায় বই রাখলে, যদি বইটির চারপাশের ৫টি নিকটতম বইয়ের মধ্যে ৩টি বিজ্ঞান এবং ২টি গল্প বিভাগের হয়, তাহলে মডেল বলবে বইটি বিজ্ঞান বিভাগের অন্তর্ভুক্ত। এইভাবে, KNN মডেল নিকটবর্তী প্রতিবেশীদের উপর ভিত্তি করে সিদ্ধান্ত গ্রহণ করে।
Knn ও লিনিয়ার রিগ্রেশন এর মত দ্বিমাত্রিক স্থানাঙ্ক ব্যবস্থায় ডাটা সাজায়। এখানে পার্থক্য হচ্ছে যে, এটি যেকোনো নতুন ডেটা কে তার বৈশিষ্ট্য অনুযায়ী দ্বিমাত্রিক স্থানাঙ্ক এ সাজিয়ে তার নিকটবর্তী অন্য ডেটা পয়েন্টগুলোর মধ্যে সর্বোচ্চ যে লেবেল টি আছে, সেই নতুন ডেটা কে সেই লেবেল টি দিবে অ্যান্ড প্রেডিকশন দিবে। এজন্য যদি ডাটা তে অনেক মিল থাকে, তাহলে knn ভালো কাজ করে না। তখন ডিসিশন ট্রি এর মত মডেল লাগে। অপেক্ষাকৃত সহজে আলাদা করা যায় এমন ডেটা তে knn ভালো কাজ করে!
KNN-এর কাজের ধাপ:
- ডেটা সংরক্ষণ: KNN কোনো ফাংশন শিখে না। এটি শুধু ট্রেনিং ডেটা সংরক্ষণ করে রাখে। তাই একে Lazy Learner বলা হয়।
- দূরত্ব নির্ণয়: নতুন ডেটার সাথে প্রতিটি ডেটা পয়েন্টের দূরত্ব মাপা হয়। সাধারণত ইউক্লিডিয়ান ডিস্ট্যান্স বেশি ব্যবহৃত হয়।
- উদাহরণ: যদি দুইজনের উচ্চতা (x) এবং ওজন (y) এর মধ্যে পার্থক্য মাপা হয়, তাহলে দূরত্ব হবে:
- উদাহরণ: যদি দুইজনের উচ্চতা (x) এবং ওজন (y) এর মধ্যে পার্থক্য মাপা হয়, তাহলে দূরত্ব হবে:
- K নির্ধারণ: মডেল “K” সংখ্যক নিকটবর্তী পয়েন্ট খুঁজে বের করে। উদাহরণস্বরূপ, যদি K = 3 হয়, তবে মডেল ৩টি নিকটবর্তী পয়েন্ট খুঁজে সেই লেবেলগুলোর উপর ভিত্তি করে সিদ্ধান্ত নেবে।
- ভোটিং মেকানিজম: প্রতিবেশীদের মধ্যে সর্বাধিক লেবেলধারী ডেটা পয়েন্টের লেবেল প্রেডিকশন হিসেবে নির্ধারণ করা হয়
কেন KNN গুরুত্বপূর্ণ?
- কোডিং ও ধারণা সহজ।
- রোগ নির্ণয় (উদাহরণস্বরূপ, একটি রোগীর নিকটতম রোগীর রিপোর্টের ভিত্তিতে প্রেডিকশন), সুপারমার্কেট রেকমেন্ডেশন।
- ছোট ডেটাসেটে ভালো কাজ করে।
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.neighbors import KNeighborsClassifier
from sklearn.metrics import accuracy_score
# Iris ডেটাসেট লোড করা
iris = load_iris()
X, y = iris.data, iris.target
# ট্রেন ও টেস্ট ডেটা ভাগ করা
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# ডেটা স্কেলিং করা (KNN দূরত্ব ভিত্তিক, তাই স্কেলিং দরকার)
scaler = StandardScaler()
X_train = scaler.fit_transform(X_train)
X_test = scaler.transform(X_test)
# KNN মডেল তৈরি করা (K=5)
model = KNeighborsClassifier(n_neighbors=5)
# মডেল ট্রেন করা
model.fit(X_train, y_train)
# প্রেডিকশন করা
y_pred = model.predict(X_test)
# একুরেসি বের করা
accuracy = accuracy_score(y_test, y_pred)
print(f'KNN মডেলের একুরেসি: {accuracy * 100:.2f}%')
ডেটার স্কেলিং হলো ডেটাসেটের প্রতিটি ফিচারের মানকে একটি নির্দিষ্ট পরিসরে নিয়ে আসার প্রক্রিয়া, যাতে বিভিন্ন ফিচারের মানের পার্থক্য প্রভাবিত না করে মডেলের কার্যক্ষমতা। উদাহরণস্বরূপ, যদি একটি ফিচারের মান হয় ১০০ থেকে ১০০০ এর মধ্যে এবং আরেকটি ফিচারের মান হয় ১ থেকে ১০ এর মধ্যে, তবে বড় মানের ফিচারটি দূরত্ব ভিত্তিক অ্যালগরিদম (যেমন KNN বা K-Means) এর ফলাফলে বেশি প্রভাব ফেলে। স্কেলিং ব্যবহার করলে এই সমস্যাটি সমাধান হয়, কারণ এটি ডেটার মানগুলিকে একই পরিসরে (যেমন ০ থেকে ১) নিয়ে আসে। স্কেলিং করার জনপ্রিয় পদ্ধতি হলো Min-Max স্কেলিং, যেখানে প্রতিটি ফিচারের মান নতুন মান = (মান – সর্বনিম্ন মান) / (সর্বোচ্চ মান – সর্বনিম্ন মান) সূত্রে রূপান্তরিত হয়, এবং Standardization, যেখানে মান = (মান – গড়) / স্ট্যান্ডার্ড ডেভিয়েশন সূত্রে রূপান্তরিত হয়। স্কেলিং ডেটার বৈশিষ্ট্যগুলির ভারসাম্য বজায় রেখে মডেলের পারফরম্যান্স বাড়ায়।
KNN অ্যালগরিদমের কাজ ভালোভাবে করতে হলে ডেটার স্কেলিং অত্যন্ত গুরুত্বপূর্ণ। কারণ, বিভিন্ন বৈশিষ্ট্যের (features) স্কেলের পার্থক্য থাকলে দূরত্ব মাপার সময় ভুল হতে পারে। উদাহরণস্বরূপ, যদি একটি ফিচারের মান মিটার এবং অন্যটির মান সেন্টিমিটারে হয়, তাহলে বড় স্কেলের বৈশিষ্ট্যটির প্রভাব বেশি পড়বে। তাছাড়া, বড় ডেটাসেটের ক্ষেত্রে KNN ধীর হয়ে যায় কারণ প্রতিটি নতুন ডেটার জন্য এটি বিদ্যমান ডেটার প্রত্যেকটি পয়েন্টের সঙ্গে দূরত্ব মাপে।
যদিও KNN সহজ এবং শক্তিশালী, বড় ডেটাসেটে এটি কার্যকর নাও হতে পারে। এ ক্ষেত্রে SVC অনেক কার্যকর, কারণ এটি প্রেডিকশন করার জন্য হাইপারপ্লেন ব্যবহার করে যা পুরো ডেটাসেটের পরিবর্তে নির্দিষ্ট কয়েকটি গুরুত্বপূর্ণ ডেটা পয়েন্ট (সাপোর্ট ভেক্টর) নিয়ে কাজ করে। ফলে, SVC বড় ডেটাসেটে দ্রুত এবং নির্ভুলভাবে কাজ করতে পারে।