মেশিন লার্নিং (Machine Learning) -এর জগতে পা রাখা নতুনদের জন্য K-Nearest Neighbors (KNN) অ্যালগরিদম একটি চমৎকার সূচনা। এটি সবচেয়ে সহজবোধ্য এবং স্বজ্ঞাত অ্যালগরিদমগুলির মধ্যে একটি, যা ডেটা প্যাটার্ন চিনতে সাহায্য করে। কৃত্রিম বুদ্ধিমত্তা এবং মেশিন লার্নিং-এর জগতে KNN কীভাবে কাজ করে, এর সুবিধা-অসুবিধা কী এবং কখন এটি ব্যবহার করা উচিত, তা নিয়ে আজ আমরা আলোচনা করব।
K-Nearest Neighbors (KNN) কী?
কে-নিয়ার্সট নেবারস (KNN) একটি নন-প্যারামেট্রিক, লেজি লার্নিং অ্যালগরিদম যা মূলত ক্লাসিফিকেশন এবং রিগ্রেশন সমস্যার জন্য ব্যবহৃত হয়। “লেজি লার্নিং” বলার কারণ হলো, এটি ট্রেনিং ডেটা থেকে সরাসরি কোনো মডেল তৈরি করে না। বরং, যখন একটি নতুন ডেটা পয়েন্ট আসে, তখন এটি ট্রেনিং ডেটা থেকে তার নিকটতম ‘K’ সংখ্যক ডেটা পয়েন্ট খুঁজে বের করে এবং তাদের তথ্যের ভিত্তিতে পূর্বাভাস দেয়।
সহজ কথায়, একটি নতুন ডেটা পয়েন্টকে তার “প্রতিবেশীদের” (neighbors) ভিত্তিতে শ্রেণীবদ্ধ করা হয়। যদি আপনার পরিচিত কোনো নতুন ব্যক্তি আসে, এবং সে তার নিকটতম বন্ধুদের সাথে চলাফেরা করে, তবে আপনি হয়তো তার বন্ধুদের বৈশিষ্ট্য দেখে নতুন ব্যক্তির বৈশিষ্ট্য সম্পর্কে অনুমান করতে পারবেন। KNN ঠিক একই ধারণা ব্যবহার করে।
কে-নিয়ার্সট নেবারস (KNN) কীভাবে পূর্বাভাস দেয়?
KNN অ্যালগরিদম দুটি প্রধান ধাপে কাজ করে:
১. দূরত্বের গণনা: একটি নতুন ডেটা পয়েন্টের জন্য, অ্যালগরিদম ট্রেনিং ডেটাসেটের প্রতিটি পয়েন্টের সাথে তার দূরত্ব গণনা করে। এই দূরত্বের জন্য সাধারণত ইউক্লিডীয় দূরত্ব (Euclidean Distance) ব্যবহার করা হয়, তবে ম্যানহাটন দূরত্ব (Manhattan Distance) বা অন্যান্য দূরত্বের পরিমাপও ব্যবহার করা যেতে পারে।
ইউক্লিডীয় দূরত্বের সূত্রটি নিম্নরূপ:
যেখানে এবং হলো দুটি ডেটা পয়েন্ট এবং হলো ফিচারগুলির সংখ্যা।
২. K সংখ্যক নিকটতম প্রতিবেশী নির্বাচন এবং ভোটিং: দূরত্বের গণনার পর, অ্যালগরিদম সবচেয়ে কম দূরত্বের ‘K’ সংখ্যক ডেটা পয়েন্ট নির্বাচন করে।
- ক্লাসিফিকেশন (Classification) এর ক্ষেত্রে: এই ‘K’ সংখ্যক প্রতিবেশীর মধ্যে যে ক্লাসটি সবচেয়ে বেশিবার উপস্থিত, নতুন ডেটা পয়েন্টটিকে সেই ক্লাসে অন্তর্ভুক্ত করা হয়। এটি অনেকটা সংখ্যাগরিষ্ঠতার ভিত্তিতে ভোটের মতো কাজ করে।
- রিগ্রেশন (Regression) এর ক্ষেত্রে: এই ‘K’ সংখ্যক প্রতিবেশীর গড় মান (বা মধ্যমা) নিয়ে নতুন ডেটা পয়েন্টের পূর্বাভাস দেওয়া হয়।
K এর সঠিক মান নির্বাচন
KNN অ্যালগরিদমে ‘K’ এর মান নির্বাচন একটি গুরুত্বপূর্ণ বিষয়। ‘K’ এর মান নির্ধারণের জন্য কোনো নির্দিষ্ট নিয়ম নেই, তবে কিছু সাধারণ কৌশল অবলম্বন করা যেতে পারে:
- ছোট ‘K’ (যেমন K=1): এটি মডেলকে নয়েজ-এর প্রতি বেশি সংবেদনশীল করে তোলে এবং ওভারফিটিং (Overfitting) হওয়ার সম্ভাবনা বাড়ায়।
- বড় ‘K’: এটি মডেলকে অতিরিক্ত স্মুথ করে তোলে এবং আন্ডারফিটিং (Underfitting) এর দিকে নিয়ে যেতে পারে, কারণ এটি দূরবর্তী প্রতিবেশীদেরকেও বিবেচনা করে।
সাধারণত, ‘K’ এর জন্য একটি বিজোড় সংখ্যা (odd number) নির্বাচন করা ভালো, যাতে ক্লাসিফিকেশনের ক্ষেত্রে টাই (tie) হওয়ার সম্ভাবনা এড়ানো যায়। ‘K’ এর সর্বোত্তম মান খুঁজে বের করার জন্য ক্রস-ভ্যালিডেশন (Cross-validation) পদ্ধতি ব্যবহার করা হয়।
KNN অ্যালগরিদম ধাপে ধাপে
১. ডেটা সংগ্রহ ও প্রস্তুতি:
- একটি লেবেলযুক্ত ডেটাসেট সংগ্রহ করুন (ক্লাসিফিকেশনের জন্য ক্লাস লেবেল এবং রিগ্রেশনের জন্য টার্গেট ভ্যালু সহ)।
- ডেটাসেটটি ট্রেইনিং সেট এবং টেস্টিং (বা ভ্যালিডেশন) সেটে ভাগ করুন।
২. “k” এর মান নির্ধারণ:
- “k” নির্ধারণ করা খুব গুরুত্বপূর্ণ, কারণ এটি প্রেডিকশনের উপর সরাসরি প্রভাব ফেলে।
- ছোট “k” মান আউটলাইয়ারের কারণে ভুল ফলাফল দিতে পারে; আর বড় “k” মান ফিচারগুলোর মাঝে সূক্ষ্ম পার্থক্য উপেক্ষা করে ফেলতে পারে।
৩. দূরত্ব নির্ণয়:
- প্রতিটি টেস্ট ডেটা পয়েন্টের জন্য ট্রেইনিং সেটের সকল পয়েন্টের সাথে দূরত্ব নির্ণয় করুন।
৪. k নিকটবর্তী প্রতিবেশী নির্ধারণ:
- সবচেয়ে কম দূরত্বের “k” সংখ্যক ট্রেইনিং পয়েন্ট নির্বাচন করুন।
৫. ভোটিং বা গড়:
- ক্লাসিফিকেশন: k প্রতিবেশীদের মধ্যে সর্বাধিক সংখ্যক ক্লাস যেটি রয়েছে সেটি নির্বাচিত হয়।
- রিগ্রেশন: k প্রতিবেশীর মানের গড় হিসাব করে সেটি প্রেডিকশন হিসাবে ব্যবহৃত হয়।
৬. প্রেডিকশন ও পারফরম্যান্স যাচাই:
- প্রতিটি টেস্ট ডেটার জন্য এই ধাপগুলো অনুসরণ করে প্রেডিকশন করুন।
- Accuracy বা Mean Squared Error দিয়ে ফলাফল মূল্যায়ন করুন।
৭. মডেল টিউনিং:
- বিভিন্ন “k” মান পরীক্ষা করে দেখুন এবং কোনটি সেরা পারফরম্যান্স দেয় তা নির্ধারণ করুন।
৮. চূড়ান্ত মডেল:
- সেরা “k” মান দিয়ে পুরো ট্রেইনিং সেট ব্যবহার করে চূড়ান্ত মডেল তৈরি করুন এবং নতুন ডেটায় প্রেডিকশন করুন।
KNN-এ ব্যবহৃত সাধারণ Distance (দূরত্ব) মেট্রিকস:
- Euclidean Distance: সরলরেখায় দূরত্ব মাপা হয়।
- Manhattan Distance: প্রতিটি ফিচারের মধ্যে পার্থক্যের যোগফল।
- Minkowski Distance: Euclidean ও Manhattan এর সাধারণ রূপ। p=1 হলে Manhattan, p=2 হলে Euclidean।
- Cosine Similarity: দুটি ভেক্টরের কোণের কসাইন মান। বিশেষ করে টেক্সট বা হাই-ডাইমেনশনাল ডেটার জন্য উপযোগী।
- Chebyshev Distance: ফিচারগুলোর মধ্যে সর্বাধিক পার্থক্য কত, তা হিসাব করে।
- Hamming Distance: দুটি বাইনারি স্ট্রিং কতগুলো পজিশনে আলাদা তা মাপে।
- Jaccard Distance: দুটি সেটের intersection এবং union এর অনুপাতে মাপে।
- Correlation Distance: দুইটি ভেক্টরের পারস্পরিক সম্পর্কের ভিত্তিতে দূরত্ব হিসাব করে।
“k” এর উপযুক্ত মান কীভাবে নির্ধারণ করবেন?
-
- Cross-Validation: ডেটাসেটকে ভাগ করে বিভিন্ন “k” মানের পারফরম্যান্স যাচাই করা হয়।
- Odd vs Even k: ক্লাসিফিকেশনে টাই এড়াতে বিজোড় k বেছে নেওয়া ভালো।
- Elbow Method: Accuracy বনাম k গ্রাফ আঁকা হয়, যেখানে পারফরম্যান্স স্থির হয়ে আসে, সেটিই উপযুক্ত “k”।
- Grid Search: পূর্বনির্ধারিত k মানের একটি পরিসরে পরীক্ষা করা।
- Domain Knowledge: সমস্যা সম্পর্কে পূর্বধারণা থাকলে তার উপর ভিত্তি করে “k” নির্ধারণ করা যায়।
Use Case Testing: আলাদা টেস্ট ডেটা ব্যবহার করে বিভিন্ন k মান পরীক্ষা করা।
পাইথন ব্যবহার করে KNN এর উদাহরণ
চলুন, একটি সহজ উদাহরণ দিয়ে দেখি পাইথনে KNN কিভাবে কাজ করে। আমরা scikit-learn
লাইব্রেরি ব্যবহার করব।
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
from sklearn.neighbors import KNeighborsClassifier from sklearn.model_selection import train_test_split from sklearn.datasets import load_iris 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 মডেল তৈরি করা (K=5 ধরা হয়েছে) knn = KNeighborsClassifier(n_neighbors=5) # ৪. মডেলকে ট্রেনিং ডেটা দিয়ে প্রশিক্ষণ দেওয়া knn.fit(X_train, y_train) # ৫. টেস্ট ডেটার উপর পূর্বাভাস তৈরি করা y_pred = knn.predict(X_test) # ৬. মডেলের কার্যকারিতা মূল্যায়ন করা accuracy = accuracy_score(y_test, y_pred) print(f"মডেলের নির্ভুলতা: {accuracy:.2f}") # একটি নতুন ডেটা পয়েন্টের জন্য পূর্বাভাস # উদাহরণ: [5.1, 3.5, 1.4, 0.2] এই ডেটা পয়েন্টটি কোন শ্রেণীর? new_data = [[5.1, 3.5, 1.4, 0.2]] predicted_class = knn.predict(new_data) print(f"নতুন ডেটা পয়েন্টের পূর্বাভাসিত শ্রেণী: {iris.target_names[predicted_class[0]]}") |
উপরের কোডে, আমরা প্রথমে আইরিস (Iris) ডেটাসেট লোড করেছি, যা ফুলের বিভিন্ন বৈশিষ্ট্যের (যেমন ফুলের পাপড়ির দৈর্ঘ্য-প্রস্থ) উপর ভিত্তি করে ফুলকে তিনটি প্রজাতিতে শ্রেণীবদ্ধ করে। এরপর, ডেটাসেটকে ট্রেনিং এবং টেস্টিং সেটে ভাগ করে একটি KNN মডেল তৈরি করেছি K=5
ধরে। মডেলকে প্রশিক্ষণ দেওয়ার পর, আমরা টেস্ট ডেটার উপর পূর্বাভাস তৈরি করেছি এবং মডেলের নির্ভুলতা পরিমাপ করেছি। অবশেষে, একটি নতুন ডেটা পয়েন্টের জন্য পূর্বাভাস কিভাবে করা হয়, তা দেখানো হয়েছে।
K-Nearest Neighbors (KNN) এর সুবিধা:
- সহজবোধ্য এবং স্বজ্ঞাত: এর কার্যপ্রণালী বুঝতে এবং প্রয়োগ করতে সহজ।
- নন-প্যারামেট্রিক: এটি ডেটার অন্তর্নিহিত বন্টন সম্পর্কে কোনো অনুমান করে না, যা বিভিন্ন ধরনের ডেটাসেটের জন্য উপযোগী।
- লেজি লার্নিং: প্রশিক্ষণের সময় কম লাগে, কারণ এটি শুধুমাত্র ডেটা সংরক্ষণ করে।
- নমনীয়তা: ক্লাসিফিকেশন এবং রিগ্রেশন উভয় সমস্যার জন্য ব্যবহার করা যেতে পারে।
K-Nearest Neighbors (KNN) এর অসুবিধা:
- গণনা ব্যয়বহুল: যখন ডেটাসেটে প্রচুর সংখ্যক ডেটা পয়েন্ট থাকে, তখন প্রতিটি নতুন ডেটা পয়েন্টের জন্য দূরত্বের গণনা করা সময়সাপেক্ষ হতে পারে।
- স্মৃতি-নির্ভর: এটি সমস্ত ট্রেনিং ডেটা মেমোরিতে সংরক্ষণ করে, যা বড় ডেটাসেটের জন্য মেমোরি সমস্যা তৈরি করতে পারে।
- ফিচার স্কেলিং এর সংবেদনশীলতা: বিভিন্ন স্কেলের ফিচার থাকলে দূরত্বের গণনা ভুল ফলাফল দিতে পারে। তাই ফিচার স্কেলিং (যেমন Min-Max scaling বা Standardization) প্রয়োজন হয়।
- অপ্রাসঙ্গিক ফিচার্সের প্রতি সংবেদনশীল: অপ্রাসঙ্গিক ফিচার্স থাকলে মডেলের কার্যকারিতা কমে যেতে পারে।
- ‘K’ এর সঠিক মান নির্বাচন কঠিন: ‘K’ এর সঠিক মান খুঁজে বের করা চ্যালেঞ্জিং হতে পারে।
K-Nearest Neighbors (KNN) কখন ব্যবহার করবেন?
- ছোট থেকে মাঝারি আকারের ডেটাসেট: যখন ডেটাসেটের আকার খুব বড় নয় এবং আপনি দ্রুত একটি বেসলাইন মডেল তৈরি করতে চান।
- নন-লিনিয়ার ডেটা: যখন ডেটার মধ্যে সম্পর্ক রৈখিক নয় এবং আপনি একটি নন-লিনিয়ার ক্লাসিফায়ার বা রিগ্রেসর খুঁজছেন।
- কমপ্লেক্স প্যাটার্ন শনাক্তকরণ: যখন ডেটাতে জটিল প্যাটার্ন থাকে যা অন্যান্য সহজ অ্যালগরিদম দ্বারা সহজে ধরা পড়ে না।
- ব্যাখ্যাযোগ্য মডেল প্রয়োজন: যখন আপনি একটি সহজবোধ্য মডেল চান যার কার্যপ্রণালী সহজে ব্যাখ্যা করা যায়।
K-Nearest Neighbors (KNN) অ্যালগরিদম মেশিন লার্নিং-এর জগতে একটি শক্তিশালী এবং সহজবোধ্য হাতিয়ার। এর সরলতা এবং কার্যকারিতা এটিকে ডেটা বিশ্লেষণের বিভিন্ন ক্ষেত্রে, বিশেষ করে নতুনদের জন্য একটি জনপ্রিয় পছন্দ করে তোলে। এর সুবিধা এবং অসুবিধাগুলি ভালোভাবে বুঝে সঠিক পরিস্থিতিতে এটি ব্যবহার করতে পারলে, এটি আপনার মেশিন লার্নিং প্রকল্পগুলিতে চমৎকার ফলাফল দিতে পারে। আপনার মেশিন লার্নিং যাত্রা শুভ হোক!
Leave a Comment