KNN (K-Nearest Neighbors) একটি জনপ্রিয় শ্রেণীবিভাগ অ্যালগরিদম যা ডেটার মধ্যে কাছাকাছি (nearest) পয়েন্টের ভিত্তিতে শ্রেণী বা আউটপুট নির্ধারণ করে। এটি একটি সহজ এবং শক্তিশালী অ্যালগরিদম, যা ডেটা পয়েন্টের কাছাকাছি পয়েন্টগুলির ভিত্তিতে সিদ্ধান্ত নেয়।
KNN অ্যালগরিদমের মূল ধারণা:
- K মানটি নির্ধারণ করে কতটি নিকটবর্তী (nearest) পয়েন্ট নিয়ে শ্রেণী নির্ধারণ করা হবে।
- যেই শ্রেণীর বেশিরভাগ পয়েন্ট সবচেয়ে কাছাকাছি হবে, সেটিই পছন্দ করা হয়।
এখন, আমরা Scikit-learn লাইব্রেরি ব্যবহার করে KNN মডেল তৈরি ও প্রশিক্ষণ করব।
উদাহরণ: Iris ডেটাসেট ব্যবহার করে KNN মডেল তৈরি
প্রয়োজনীয় লাইব্রেরি ইনস্টল করা:
pip install scikit-learn matplotlib numpy pandas
কোড উদাহরণ:
# প্রয়োজনীয় লাইব্রেরি ইমপোর্ট করা
import numpy as np
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.neighbors import KNeighborsClassifier
from sklearn.metrics import accuracy_score, confusion_matrix
import matplotlib.pyplot as plt
from sklearn.datasets import load_iris
# Iris ডেটাসেট লোড করা
iris = load_iris()
X = iris.data
y = iris.target
# ডেটাকে ট্রেনিং এবং টেস্ট সেটে ভাগ করা
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
# ফিচার স্কেলিং করা (KNN এর জন্য স্কেলিং গুরুত্বপূর্ণ)
scaler = StandardScaler()
X_train = scaler.fit_transform(X_train)
X_test = scaler.transform(X_test)
# KNN মডেল তৈরি করা
k = 3 # কিভাবে 'k' নির্বাচন করবেন তা আপনার ডেটার ওপর নির্ভর করে
model = KNeighborsClassifier(n_neighbors=k)
# মডেল প্রশিক্ষণ (ট্রেনিং)
model.fit(X_train, y_train)
# মডেল থেকে ভবিষ্যদ্বাণী করা
y_pred = model.predict(X_test)
# মডেল মূল্যায়ন
accuracy = accuracy_score(y_test, y_pred)
conf_matrix = confusion_matrix(y_test, y_pred)
print(f"Accuracy: {accuracy * 100:.2f}%")
print("Confusion Matrix:")
print(conf_matrix)
# কনফিউশন ম্যাট্রিক্সের ভিজ্যুয়ালাইজেশন
plt.figure(figsize=(5, 5))
plt.imshow(conf_matrix, interpolation='nearest', cmap=plt.cm.Blues)
plt.title('Confusion Matrix')
plt.colorbar()
tick_marks = np.arange(3)
plt.xticks(tick_marks, iris.target_names)
plt.yticks(tick_marks, iris.target_names)
plt.ylabel('True label')
plt.xlabel('Predicted label')
plt.show()
কোডের ব্যাখ্যা:
- ডেটা লোড করা:
- আমরা Iris ডেটাসেট ব্যবহার করছি, যা ৪টি ফিচার নিয়ে গঠিত (Sepal Length, Sepal Width, Petal Length, Petal Width) এবং ৩টি শ্রেণী রয়েছে।
- ডেটা ভাগ করা:
train_test_splitফাংশন ব্যবহার করে ডেটাসেটটিকে ৭০% ট্রেনিং ডেটা এবং ৩০% টেস্ট ডেটাতে ভাগ করেছি।
- ফিচার স্কেলিং:
- KNN মডেল স্কেলিং-sensitive (ফিচার স্কেলিং প্রয়োজন), তাই StandardScaler ব্যবহার করে ডেটা স্কেল করেছি।
- KNN মডেল তৈরি এবং প্রশিক্ষণ:
KNeighborsClassifierফাংশন ব্যবহার করে KNN মডেল তৈরি করেছি। এখানে k=3 মানে আমরা ৩টি নিকটবর্তী পয়েন্টের মধ্যে সবচেয়ে বেশী উপস্থিত থাকা শ্রেণী নির্বাচন করব।
- ফলাফল মূল্যায়ন:
- Accuracy এবং Confusion Matrix ব্যবহার করে মডেলটির পারফরম্যান্স যাচাই করেছি।
- কনফিউশন ম্যাট্রিক্সের মাধ্যমে শ্রেণীবিভাগের সঠিক এবং ভুল ভবিষ্যদ্বাণী দেখানো হয়।
আউটপুট:
- Accuracy: মডেলটি কতটা সঠিকভাবে পূর্বানুমান করেছে তা প্রদর্শন করবে।
- Confusion Matrix: কনফিউশন ম্যাট্রিক্সে বিভিন্ন ক্লাসের সঠিক এবং ভুল শ্রেণীবিভাগ দেখা যাবে।
KNN এর জন্য 'k' নির্বাচন:
- k নির্বাচন একটি গুরুত্বপূর্ণ পদক্ষেপ। যদি 'k' খুব ছোট হয়, তবে মডেলটি অত্যন্ত সান্নিধ্যগত হয়ে পড়বে এবং অত্যধিকভাবে প্রশিক্ষিত (Overfitting) হতে পারে। যদি 'k' খুব বড় হয়, তবে মডেলটি সাধারিত হয়ে পড়বে এবং প্রশিক্ষিত (Underfitting) হতে পারে।
- আপনি কভালিডেশন (cross-validation) ব্যবহার করে সঠিক k মানটি নির্বাচন করতে পারেন।
সারাংশ:
- KNN (K-Nearest Neighbors) একটি সহজ এবং শক্তিশালী ক্লাসিফিকেশন অ্যালগরিদম।
- এটি ডেটা পয়েন্টগুলির মধ্যে সম্পর্ক বা কাছাকাছি পয়েন্টের ভিত্তিতে সিদ্ধান্ত নেয়।
- Python এ Scikit-learn লাইব্রেরি ব্যবহার করে KNN মডেল তৈরি, প্রশিক্ষণ এবং মূল্যায়ন করা সহজ।
kনির্বাচন এবং ডেটা স্কেলিং KNN মডেলের পারফরম্যান্সের জন্য গুরুত্বপূর্ণ।
Content added By
Read more