K-Nearest Neighbors (KNN) হল একটি সহজ এবং জনপ্রিয় সুপারভাইজড মেশিন লার্নিং অ্যালগরিদম, যা ক্লাসিফিকেশন এবং রিগ্রেশন উভয় সমস্যার জন্য ব্যবহৃত হয়। এটি ইনস্ট্যান্স-বেসড বা নন-প্যারামেট্রিক অ্যালগরিদম, যার মানে হল যে এটি কোনো মডেল তৈরি না করে ডেটার কাছ থেকে সরাসরি সিদ্ধান্ত নেয়।
KNN কীভাবে কাজ করে?
KNN একটি বেশি কাছের (nearest) প্রতিবেশী বা পয়েন্টের উপর ভিত্তি করে কাজ করে, অর্থাৎ একটি ইনপুট ডেটার ক্লাস বা মান নির্ধারণ করতে, তার কাছের Kটি প্রতিবেশী (neighbors) পয়েন্টের মধ্যে কিভাবে শ্রেণীবিভাজন হচ্ছে, সেটি দেখা হয়।
কিভাবে কাজ করে:
- ট্রেনিং ডেটা: KNN একটি ডেটাবেসের মতো কাজ করে, যেখানে প্রতিটি ডেটা পয়েন্ট একটি ফিচার ভেক্টর হিসেবে সংরক্ষিত থাকে।
- নতুন পয়েন্টের জন্য ক্লাস বা মান নির্ধারণ: যখন একটি নতুন ডেটা পয়েন্ট আসে, তখন এটি তার কাছের Kটি প্রতিবেশী পয়েন্টের থেকে ভোট বা গড় নিয়ে একটি ক্লাসিফিকেশন (বা রিগ্রেশন) সিদ্ধান্ত নেয়।
- ডিস্ট্যান্স মেট্রিক: প্রতিবেশী খুঁজে বের করার জন্য সাধারণত ইউক্লিডিয়ান দূরত্ব (Euclidean distance) ব্যবহৃত হয়, তবে অন্যান্য দূরত্ব মেট্রিকও ব্যবহার করা যেতে পারে (যেমন ম্যানহ্যাটন, মিনকস্কি ইত্যাদি)।
ইউক্লিডিয়ান দূরত্ব (Euclidean Distance):
ইউক্লিডিয়ান দূরত্ব হলো দুটি পয়েন্টের মধ্যে সরলতম দূরত্ব। যদি দুটি পয়েন্ট এবং থাকে, তবে তাদের মধ্যে ইউক্লিডিয়ান দূরত্ব হবে:
KNN ক্লাসিফিকেশন:
- ক্লাস সংখ্যা: KNN, ইনপুট ডেটার Kটি সবচেয়ে কাছের প্রতিবেশী পয়েন্ট নির্বাচন করে, এবং এই প্রতিবেশীদের মধ্যে অধিকাংশ ক্লাসকে নির্বাচিত ক্লাস হিসেবে ধরে নেয়।
- প্রতিক্রিয়া: এটি সাধারণত মেজরিটি ভোটিং (majority voting) পদ্ধতি ব্যবহার করে, যেখানে K প্রতিবেশীর মধ্যে যেই ক্লাস সবচেয়ে বেশি হয়, সেটি প্রেডিক্টেড ক্লাস হবে।
KNN রিগ্রেশন:
KNN রিগ্রেশনেও একই ধরনের পদ্ধতি ব্যবহার করা হয়, তবে এখানে আউটপুটের মান নির্ধারণ করা হয় কেবল প্রতিবেশী পয়েন্টগুলোর গড় বা মিডিয়ান নিয়ে।
KNN এর প্রধান প্যারামিটার:
- K (নম্বর অফ নেবার্স): KNN এর সবচেয়ে গুরুত্বপূর্ণ প্যারামিটার। K হল প্রতিবেশী পয়েন্টের সংখ্যা, যা মডেলটি কেমন আচরণ করবে তা নির্ধারণ করে। খুব ছোট K মানে মডেলটি অস্থির (overfitting) হতে পারে, এবং খুব বড় K মানে মডেলটি খুব সাধারণ (underfitting) হতে পারে।
- ডিস্ট্যান্স মেট্রিক: সাধারণত ইউক্লিডিয়ান দূরত্ব ব্যবহৃত হয়, তবে অন্য মেট্রিকও ব্যবহার করা যেতে পারে।
KNN এর সুবিধা:
- সহজ এবং সহজে বাস্তবায়নযোগ্য: KNN একটি খুব সহজ অ্যালগরিদম, যা তেমন কোনো প্রশিক্ষণ প্রক্রিয়া ছাড়াই কাজ করে।
- কোনো হাইপারপ্যারামিটার টিউনিং প্রয়োজন নেই: KNN অ্যালগরিদমটির জন্য কমপ্লেক্স মডেল তৈরি করার প্রয়োজন পড়ে না।
- বহুবিধ অ্যাপ্লিকেশন: এটি ইমেজ ক্লাসিফিকেশন, টেক্সট ক্লাসিফিকেশন, এবং রিকমেন্ডেশন সিস্টেমে ব্যবহৃত হয়।
KNN এর সীমাবদ্ধতা:
- কম্পিউটেশনাল খরচ: KNN মডেলটি ইনস্ট্যান্স-বেসড, তাই নতুন ডেটা পয়েন্টের জন্য প্রতিবার ট্রেনিং ডেটা পয়েন্টের সাথে তুলনা করতে হয়। বড় ডেটাসেটের জন্য এটি ধীরগতিতে কাজ করতে পারে।
- উচ্চ মাত্রার ডেটা (High-Dimensional Data): KNN উচ্চ মাত্রার ডেটা (যেমন, ডেটার অনেক ফিচার) নিয়ে কাজ করতে অসুবিধায় পড়ে, কারণ এর ফলস্বরূপ কৃত্রিম দূরত্ব তৈরি হয়, যা মডেলটির কার্যকারিতা কমিয়ে দেয়।
- ব্যালান্সড ডেটা প্রয়োজন: KNN মডেলটি মূলত খুব ভারী শ্রেণী বা খুব হালকা শ্রেণীর সাথে কাজ করতে অসুবিধা হতে পারে।
KNN এর উদাহরণ:
এখন, Python-এ Scikit-learn ব্যবহার করে একটি সাধারণ KNN ক্লাসিফিকেশন উদাহরণ দেখি:
# প্রয়োজনীয় লাইব্রেরি ইমপোর্ট
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier
from sklearn.metrics import accuracy_score
# 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 মডেল তৈরি এবং প্রশিক্ষণ
knn = KNeighborsClassifier(n_neighbors=3) # k=3
knn.fit(X_train, y_train)
# প্রেডিকশন করা
y_pred = knn.predict(X_test)
# মডেল মূল্যায়ন
print("Accuracy:", accuracy_score(y_test, y_pred))
কোড বিশ্লেষণ:
- ডেটাসেট লোড করা: Iris ডেটাসেট লোড করা হচ্ছে, যা একটি জনপ্রিয় ডেটাসেট মেশিন লার্নিং শেখার জন্য।
- KNN মডেল তৈরি করা: KNeighborsClassifier এর মাধ্যমে KNN মডেল তৈরি করা হয়েছে, এবং এখানে
n_neighbors=3মানে মডেলটি ৩টি প্রতিবেশী পয়েন্ট ব্যবহার করবে। - টেস্ট ডেটার উপর প্রেডিকশন: মডেলটি টেস্ট ডেটার উপর প্রেডিকশন করছে এবং accuracy score বের করা হচ্ছে।
সারাংশ:
K-Nearest Neighbors (KNN) একটি শক্তিশালী এবং সহজ মেশিন লার্নিং অ্যালগরিদম, যা ক্লাসিফিকেশন এবং রিগ্রেশন সমস্যার জন্য ব্যবহৃত হয়। এটি ইনপুট ডেটার কাছের K প্রতিবেশী পয়েন্টের উপর ভিত্তি করে সিদ্ধান্ত নেয়। KNN এর মূল সুবিধা হল এর সরলতা এবং ব্যাখ্যাযোগ্যতা, তবে বড় ডেটাসেট বা উচ্চ মাত্রার ডেটার জন্য এটি ধীরগতিতে কাজ করতে পারে।
K-Nearest Neighbors (KNN) হল একটি অত্যন্ত জনপ্রিয় এবং সহজ মেশিন লার্নিং অ্যালগরিদম, যা ক্লাসিফিকেশন এবং রিগ্রেশন উভয় ধরনের সমস্যায় ব্যবহার করা যায়। এটি একটি বায়েসিয়ান (non-parametric) অ্যালগরিদম, যা ইনপুট ডেটার কাছাকাছি বা নিকটতম (nearest) প্রতিবেশী (neighbors) গুলি ব্যবহার করে ফলাফল বা আউটপুট নির্ধারণ করে।
KNN এর মৌলিক ধারণা:
KNN একটি নন-প্যারামেট্রিক ক্লাসিফিকেশন অ্যালগরিদম, যার মানে এটি ডেটার গঠন সম্পর্কে কোনো পূর্ব ধারণা রাখে না (যেমন, কোনো ভিন্নরকম ডেটা প্রক্রিয়াকরণ বা মডেলিং)। এটি সরাসরি ডেটার কাছাকাছি প্রতিবেশীদের ভিত্তিতে আউটপুট প্রেডিক্ট করে।
KNN-এ প্রতিটি ইনপুট পয়েন্টকে তার কাছাকাছি Kটি প্রতিবেশীর (nearest neighbors) সাহায্যে শ্রেণীবদ্ধ করা হয়। এটি একটি গাণিতিক দূরত্ব (distance) মেপে প্রতিবেশীদের নির্বাচন করে। সাধারনত, ইউক্লিডিয়ান দূরত্ব (Euclidean Distance) ব্যবহার করা হয়, তবে অন্যান্য দূরত্বের মাপ (যেমন Manhattan, Minkowski)ও ব্যবহার করা যেতে পারে।
KNN এর কাজের পদ্ধতি:
- K মান নির্বাচন: প্রথমে
Kমানটি নির্বাচন করতে হয়। এটি কিভাবে কাজ করবে তা নির্ধারণ করে (যেমন, K=3 হলে, মডেল তিনটি নিকটতম প্রতিবেশীকে দেখে ফলাফল নির্ধারণ করবে)। সাধারণত, K-এর ছোট মান অস্বাভাবিকভাবে অস্থির বা noisy হতে পারে, আর K-এর বড় মান সামগ্রিকভাবে সঠিক ফলাফল দেয়। ডেটা পয়েন্টের দূরত্ব মাপা: ইনপুট ডেটা পয়েন্ট এবং প্রশিক্ষণ ডেটাসেটের সকল পয়েন্টের মধ্যে দূরত্ব গণনা করা হয়। সাধারনত ইউক্লিডিয়ান দূরত্ব ব্যবহার করা হয়, যা দুটি পয়েন্টের মধ্যে সরলরেখার দৈর্ঘ্য মাপতে সাহায্য করে।
ইউক্লিডিয়ান দূরত্বের ফর্মুলা:
এখানে এবং হল দুটি পয়েন্ট, এবং হল তাদের সংশ্লিষ্ট ফিচার ভ্যালু।
- নিকটতম প্রতিবেশী নির্বাচন: ক্যালকুলেটেড দূরত্বের ভিত্তিতে,
Kটি নিকটতম প্রতিবেশী নির্বাচন করা হয়। অর্থাৎ, যেগুলোর দূরত্ব সবচেয়ে কম। - ক্লাস নির্ধারণ (Classification):
- ক্লাসিফিকেশন: যদি KNN ক্লাসিফিকেশন সমস্যা সমাধান করছে, তবে নির্বাচিত
Kপ্রতিবেশীর মধ্যে অধিকাংশ ক্লাসের আউটপুটকে চূড়ান্ত আউটপুট হিসেবে নির্বাচিত করা হয়। উদাহরণস্বরূপ, যদি তিনটি প্রতিবেশী থাকে, এবং দুটিতে ক্লাস "A" এবং একটি ক্লাস "B" থাকে, তবে আউটপুট হবে "A"। - রিগ্রেশন: যদি KNN রিগ্রেশন সমস্যার জন্য ব্যবহৃত হয়, তবে নির্বাচিত প্রতিবেশীদের আউটপুটের গড় বা গড় মান হিসাব করা হয় এবং সেটি চূড়ান্ত ফলাফল হিসেবে নির্বাচন করা হয়।
- ক্লাসিফিকেশন: যদি KNN ক্লাসিফিকেশন সমস্যা সমাধান করছে, তবে নির্বাচিত
- ফলাফল প্রদান: চূড়ান্ত ক্লাস বা ফলাফল প্রদান করা হয়, যা সংশ্লিষ্ট শ্রেণী বা মানের প্রতিনিধিত্ব করে।
KNN এর বৈশিষ্ট্য:
- এটিকন সহজ এবং পারসোনালাইজড: KNN অ্যালগরিদম সহজেই কার্যকরী হয় এবং নতুন ডেটার জন্য দ্রুত প্রয়োগ করা যায়।
- নন-প্যারামেট্রিক: কোনো পূর্ব ধারণা বা ডেটার গঠন জানার প্রয়োজন নেই।
- প্রশিক্ষণের সময় কম: এই অ্যালগরিদমটি প্রশিক্ষণের সময়ে কম সময় নেয়, কারণ মডেলটি ট্রেনিংয়ের সময়ে কোনো সুনির্দিষ্ট নিয়ম বা ফাংশন তৈরি করে না। তবে পরীক্ষার সময়ে (prediction) সময় বেশি লাগে, কারণ প্রতিটি নতুন ইনপুটের জন্য দূরত্ব হিসাব করতে হয়।
KNN এর ব্যবহার উদাহরণ:
ধরা যাক, একটি ডেটাসেটে "অপরাধী" (criminal) এবং "অপরাধী নয়" (not criminal) শ্রেণী রয়েছে, এবং আপনি একটি নতুন ব্যক্তির উপর ভিত্তি করে তার শ্রেণী নির্ধারণ করতে চান। KNN এই নতুন ব্যক্তির কাছাকাছি Kটি প্রতিবেশী দেখে তার শ্রেণী নির্ধারণ করবে।
উদাহরণ কোড:
import numpy as np
from sklearn.neighbors import KNeighborsClassifier
from sklearn.model_selection import train_test_split
# উদাহরণ ডেটাসেট
X = np.array([[1, 2], [2, 3], [3, 3], [6, 6], [7, 7], [8, 8]]) # ফিচার
y = np.array([0, 0, 0, 1, 1, 1]) # ক্লাস (0 = Not Criminal, 1 = Criminal)
# ডেটাসেটকে ট্রেন এবং টেস্টে ভাগ করা
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.33)
# KNN মডেল তৈরি করা
knn = KNeighborsClassifier(n_neighbors=3)
# মডেল প্রশিক্ষণ
knn.fit(X_train, y_train)
# পূর্বানুমান করা
prediction = knn.predict(X_test)
print(f"Prediction: {prediction}")
এখানে, KNN মডেলটি n_neighbors=3 সেট করা হয়েছে, অর্থাৎ 3টি নিকটতম প্রতিবেশীর ভিত্তিতে আউটপুট নির্ধারণ করা হবে।
KNN এর সুবিধা এবং অসুবিধা
সুবিধা:
- সহজ এবং প্রয়োগে সহজ: KNN খুবই সহজ অ্যালগরিদম, যা দ্রুত প্রয়োগ করা যায়।
- নন-প্যারামেট্রিক: এতে ডেটার কোনো পূর্ব অনুমান বা মডেলিংয়ের প্রয়োজন নেই।
- অল্প সময়ের মধ্যে কাজ করে: প্রশিক্ষণের সময় কম লাগে।
অসুবিধা:
- বড় ডেটাসেটের জন্য ধীর গতিতে কাজ করে: নতুন ইনপুট পয়েন্টের জন্য দূরত্ব মাপতে বড় ডেটাসেটের ক্ষেত্রে সময় বেশি লাগে।
- মেমরি খরচ: KNN এর মধ্যে সমস্ত ট্রেনিং ডেটা মেমরিতে রাখতে হয়, তাই মেমরি খরচ অনেক বেশি হতে পারে।
- নিউরাল নেটওয়ার্কের চেয়ে কম কার্যকরী: জটিল সম্পর্কের জন্য নিউরাল নেটওয়ার্ক এবং অন্যান্য মডেল অধিক কার্যকরী হতে পারে।
সারাংশ
K-Nearest Neighbors (KNN) একটি সহজ, শক্তিশালী এবং জনপ্রিয় ক্লাসিফিকেশন অ্যালগরিদম যা নতুন ইনপুট পয়েন্টের জন্য তার নিকটতম প্রতিবেশীদের দেখে আউটপুট সিদ্ধান্ত নেয়। এটি সাধারণত ক্লাসিফিকেশন এবং রিগ্রেশন উভয় ধরনের সমস্যায় ব্যবহৃত হয়। KNN অ্যালগরিদম প্রশিক্ষণ পর্যায়ে খুব বেশি সময় নেয় না, কিন্তু পরীক্ষার (prediction) সময় এটি সবার সাথে দূরত্ব হিসাব করে ফলাফল প্রদান করে, যা বড় ডেটাসেটে ধীর গতিতে কাজ করতে পারে।
K-Nearest Neighbors (KNN) একটি জনপ্রিয় সুপারভাইজড মেশিন লার্নিং অ্যালগরিদম, যা শ্রেণীবিভাগ (classification) এবং রিগ্রেশন (regression) এর জন্য ব্যবহৃত হয়। KNN এর মূল কাজ হল একটি নতুন ডেটা পয়েন্টের জন্য তার ক-নিকটতম প্রতিবেশী (neighbors) খুঁজে বের করা এবং তাদের ভোট বা গড়ের মাধ্যমে সিদ্ধান্ত নেয়া। KNN অ্যালগরিদম কাজ করার জন্য ডেটা পয়েন্টগুলির মধ্যে দূরত্ব (distance) নির্ধারণ করতে হয়। এই উদ্দেশ্যে বিভিন্ন distance metrics ব্যবহৃত হয়।
KNN এর প্রধান Distance Metrics:
- Euclidean Distance (ইউক্লিডিয়ান দূরত্ব)
- Manhattan Distance (ম্যানহাটন দূরত্ব)
- Minkowski Distance (মিনকোভস্কি দূরত্ব)
- Cosine Similarity (কোসাইন সাদৃশ্য)
১. Euclidean Distance (ইউক্লিডিয়ান দূরত্ব)
Euclidean Distance হল সবচেয়ে সাধারণ এবং জনপ্রিয় distance metric, যা দুইটি পয়েন্টের মধ্যে সরাসরি লাইন বা সোজা পথে দূরত্ব হিসাব করে। এটি সাধারণত গাণিতিক পিথাগোরাসের থিওরেম ব্যবহার করে বের করা হয়।
সূত্র:
এখানে,
- এবং দুটি পয়েন্ট।
- হল ডেটা পয়েন্টের ফিচারের সংখ্যা।
উদাহরণ:
ধরা যাক, দুটি পয়েন্ট এবং :
২. Manhattan Distance (ম্যানহাটন দূরত্ব)
Manhattan Distance বা Taxicab Distance হল এমন একটি দূরত্ব যা দুটি পয়েন্টের মধ্যে সোজা লাইন দিয়ে নয়, বরং অনুভূমিক এবং উল্লম্বভাবে চলতে চলতে হিসাব করা হয়। এটি শহরের রাস্তা যেমন ম্যানহাটনে যেখানে রাস্তা সরল এবং কোণাকোণি থাকে, সেখানে ব্যবহৃত হয়।
সূত্র:
এখানে,
- এবং দুটি পয়েন্ট।
- হল ডেটা পয়েন্টের ফিচারের সংখ্যা।
উদাহরণ:
ধরা যাক, দুটি পয়েন্ট এবং :
৩. Minkowski Distance (মিনকোভস্কি দূরত্ব)
Minkowski Distance হল একটি সাধারণীকৃত distance metric যা Euclidean এবং Manhattan দূরত্বের একটি সাধারণ রূপ। এটি একটি প্যারামিটার দ্বারা নিয়ন্ত্রিত, যেটি নির্ধারণ করে কতটা "ভারী" ফিচারের জন্য আমরা দূরত্বের ক্যালকুলেশন করব। যদি , তবে এটি Euclidean Distance হয় এবং যদি , তবে এটি Manhattan Distance হয়।
সূত্র:
এখানে,
- এবং দুটি পয়েন্ট।
- হল Minkowski প্যারামিটার (যে কোন ইতিবাচক সংখ্যা)।
- হল ডেটা পয়েন্টের ফিচারের সংখ্যা।
উদাহরণ:
যদি , দুটি পয়েন্ট এবং :
৪. Cosine Similarity (কোসাইন সাদৃশ্য)
Cosine Similarity মূলত ভেক্টরের দিকের সাদৃশ্য পরিমাপ করে, দূরত্ব নয়। এটি সাধারণত টেক্সট ডেটা বা অন্যান্য ফিচারের মধ্যে সমান্তরালতা বা সাদৃশ্য পরিমাপের জন্য ব্যবহৃত হয়। দুটি ভেক্টরের মধ্যে কোণ পরিমাপ করে, যা তাদের সাদৃশ্যের পরিমাণ নির্ধারণ করে।
সূত্র:
এখানে,
- এবং হল দুটি ভেক্টর।
- এবং হল তাদের যথাক্রমে দৈর্ঘ্য (norm)।
Cosine similarity 1 হলে ভেক্টর দুটি পুরোপুরি সমান্তরাল এবং 0 হলে তাদের মধ্যে কোনো সাদৃশ্য নেই।
উদাহরণ:
ধরা যাক, দুটি ভেক্টর এবং :
সারাংশ
- Euclidean Distance: দুটি পয়েন্টের মধ্যে সরাসরি লাইন দিয়ে দূরত্ব মাপা হয়।
- Manhattan Distance: অনুভূমিক এবং উল্লম্ব পথে পয়েন্টের মধ্যে দূরত্ব মাপা হয়।
- Minkowski Distance: একটি সাধারণীকৃত দূরত্ব যা প্যারামিটার দ্বারা নিয়ন্ত্রিত হয় (যেখানে হলে এটি Euclidean এবং হলে এটি Manhattan হয়)।
- Cosine Similarity: দুটি ভেক্টরের মধ্যে কোণ পরিমাপ করে, তাদের সাদৃশ্য নির্ধারণ করা হয়।
KNN অ্যালগরিদমে কোন distance metric ব্যবহার করা হবে তা নির্ভর করে আপনার ডেটার ধরন এবং সমস্যার উপর।
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 মডেলের পারফরম্যান্সের জন্য গুরুত্বপূর্ণ।
K-Nearest Neighbors (KNN) হল একটি সাদামাটা, তবে কার্যকরী মেশিন লার্নিং অ্যালগরিদম, যা প্রধানত classification বা regression সমস্যা সমাধানে ব্যবহৃত হয়। এটি একটি instance-based learning অ্যালগরিদম, যেখানে মডেল কোনও প্রশিক্ষণ প্রক্রিয়া অনুসরণ না করে, বরং সরাসরি ডেটার কাছাকাছি অবস্থানে থাকা Kটি সর্বাধিক কাছের প্রতিবেশী (neighbors) থেকে ভবিষ্যদ্বাণী করে।
KNN মডেলের কার্যকারিতা বিশ্লেষণ করতে, সাধারণত কয়েকটি পারফরম্যান্স মেট্রিক্স ব্যবহার করা হয়, যেমন accuracy, precision, recall, F1-score, এবং confusion matrix। এই মেট্রিকগুলির মাধ্যমে KNN মডেলের কার্যকারিতা এবং ভুল অনুমানগুলো বিশ্লেষণ করা সম্ভব।
KNN মডেলের পারফরম্যান্স বিশ্লেষণের জন্য কিছু সাধারণ ধাপ:
১. KNN মডেল প্রশিক্ষণ ও ভবিষ্যদ্বাণী
KNN মডেল প্রশিক্ষণ করা হয় ডেটাসেটের কাছাকাছি প্রতিবেশী (neighbors) ব্যবহার করে এবং মডেল নতুন ইনপুটের জন্য ভবিষ্যদ্বাণী করে।
KNN মডেল তৈরির উদাহরণ:
from sklearn.neighbors import KNeighborsClassifier
from sklearn.model_selection import train_test_split
from sklearn.datasets import load_iris
from sklearn.metrics import confusion_matrix, accuracy_score, precision_score, recall_score, f1_score
# ডেটাসেট লোড করা
iris = load_iris()
X = iris.data
y = iris.target
# ডেটা বিভক্ত করা (Train-Test Split)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
# KNN মডেল তৈরি ও প্রশিক্ষণ
knn = KNeighborsClassifier(n_neighbors=3)
knn.fit(X_train, y_train)
# ভবিষ্যদ্বাণী করা
y_pred = knn.predict(X_test)
২. Confusion Matrix ব্যবহার করা
Confusion Matrix মডেলের পারফরম্যান্স বিশ্লেষণের জন্য একটি গুরুত্বপূর্ণ টুল। এটি True Positives (TP), True Negatives (TN), False Positives (FP) এবং False Negatives (FN) দেখায়, যা মডেলের ভুল এবং সঠিক পূর্বানুমান বুঝতে সহায়তা করে।
Confusion Matrix উদাহরণ:
cm = confusion_matrix(y_test, y_pred)
print("Confusion Matrix:\n", cm)
৩. Accuracy মেট্রিক ব্যবহার করা
Accuracy হল সঠিক পূর্বানুমানগুলির হার (TP + TN) ডেটাসেটের মোট ইনস্ট্যান্সের (ทั้งหมด) বিরুদ্ধে।
Accuracy উদাহরণ:
accuracy = accuracy_score(y_test, y_pred)
print("Accuracy:", accuracy)
৪. Precision, Recall এবং F1-Score ব্যবহার করা
- Precision: কতটি পূর্বানুমানিত পজিটিভ কেস সঠিক ছিল।
- Recall: কতটি প্রকৃত পজিটিভ কেস সঠিকভাবে পূর্বানুমানিত হয়েছিল।
- F1-Score: Precision এবং Recall এর মধ্যে ভারসাম্য।
Precision, Recall এবং F1-Score উদাহরণ:
precision = precision_score(y_test, y_pred, average='macro')
recall = recall_score(y_test, y_pred, average='macro')
f1 = f1_score(y_test, y_pred, average='macro')
print("Precision:", precision)
print("Recall:", recall)
print("F1-Score:", f1)
৫. K-Value নির্বাচন
KNN মডেলের পারফরম্যান্স অনেকাংশে K (nearest neighbors) ভ্যালুর উপর নির্ভর করে। সাধারণত, খুব ছোট K মান (যেমন 1) মডেলকে খুব বেশি স্পেসিফিক হতে বাধ্য করে, যার ফলে overfitting হতে পারে, এবং খুব বড় K মান মডেলকে খুব বেশি সাধারণ করে ফেলতে পারে, যার ফলে underfitting হতে পারে। সঠিক K মান নির্বাচন করা মডেলের পারফরম্যান্সের জন্য গুরুত্বপূর্ণ।
K মান নির্বাচন (Cross-validation ব্যবহার করা):
from sklearn.model_selection import cross_val_score
# বিভিন্ন K মানে পারফরম্যান্স পরীক্ষা করা
k_values = range(1, 21)
mean_scores = []
for k in k_values:
knn = KNeighborsClassifier(n_neighbors=k)
scores = cross_val_score(knn, X, y, cv=5, scoring='accuracy')
mean_scores.append(scores.mean())
# K মানের জন্য পারফরম্যান্স গ্রাফ
import matplotlib.pyplot as plt
plt.plot(k_values, mean_scores)
plt.xlabel('K value')
plt.ylabel('Mean Cross-Validation Accuracy')
plt.title('KNN Performance for different K values')
plt.show()
৬. ROC Curve এবং AUC (Area Under Curve)
KNN মডেল বিশেষ করে যখন বিভিন্ন শ্রেণী থাকে, তখন Receiver Operating Characteristic (ROC) curve এবং AUC মান বিশ্লেষণ করা যেতে পারে। AUC মান 0 থেকে 1 এর মধ্যে থাকে, যেখানে 1 একটি পারফেক্ট মডেল এবং 0.5 হল একটি মডেল যা কেবলই এলোমেলো অনুমান করছে।
ROC Curve উদাহরণ:
from sklearn.metrics import roc_curve, auc
fpr, tpr, thresholds = roc_curve(y_test, y_pred, pos_label=1)
roc_auc = auc(fpr, tpr)
# ROC curve আঁকা
plt.figure()
plt.plot(fpr, tpr, color='blue', lw=2, label='ROC curve (area = %0.2f)' % roc_auc)
plt.plot([0, 1], [0, 1], color='gray', linestyle='--')
plt.xlabel('False Positive Rate')
plt.ylabel('True Positive Rate')
plt.title('Receiver Operating Characteristic (ROC) Curve')
plt.legend(loc="lower right")
plt.show()
KNN মডেলের পারফরম্যান্স বিশ্লেষণ – সারাংশ:
- Confusion Matrix: মডেলের পূর্বানুমান এবং প্রকৃত আউটপুটের মধ্যে সম্পর্ক প্রদর্শন করে।
- Accuracy: সঠিক পূর্বানুমানের মোট আউটপুটের তুলনায় হার।
- Precision, Recall, এবং F1-Score: মডেলের কার্যকারিতা এবং ভারসাম্য বিশ্লেষণ করতে ব্যবহৃত হয়।
- K মান নির্বাচন: KNN মডেলের পারফরম্যান্স K মানের উপর নির্ভরশীল, সঠিক K মান নির্বাচন গুরুত্বপূর্ণ।
- ROC Curve এবং AUC: শ্রেণীবিভাগের ক্ষেত্রে, কনফিউশন ম্যাট্রিক্সের পাশাপাশি ROC Curve এবং AUC ব্যবহার করে মডেলের পারফরম্যান্স মূল্যায়ন করা হয়।
এগুলি KNN মডেলের পারফরম্যান্স বিশ্লেষণ এবং সঠিকভাবে মডেল নির্বাচন বা হাইপারপ্যারামিটার টিউনিংয়ের জন্য গুরুত্বপূর্ণ টুল।
Read more