K-Nearest Neighbors (KNN) and Support Vector Machines (SVM) in R
K-Nearest Neighbors (KNN) এবং Support Vector Machines (SVM) হল জনপ্রিয় মেশিন লার্নিং অ্যালগরিদম যা ক্লাসিফিকেশন এবং রিগ্রেশন টাস্কে ব্যবহৃত হয়। এগুলি বিশেষভাবে কেটেগোরিকাল ডেটার জন্য কার্যকরী, যেখানে আপনাকে শ্রেণীভুক্ত বা ক্যাটেগরি ডেটা প্রেডিক্ট করতে হয়।
এখানে আমরা KNN এবং SVM সম্পর্কে বিস্তারিত আলোচনা করব, এবং কিভাবে R এ এগুলোর ব্যবহার করা হয় তা দেখাবো।
1. K-Nearest Neighbors (KNN)
K-Nearest Neighbors (KNN) একটি সহজ এবং জনপ্রিয় ক্লাসিফিকেশন অ্যালগরিদম, যেখানে একটি পয়েন্টের শ্রেণী তার আশপাশের K নিকটতম পয়েন্টের শ্রেণী দ্বারা নির্ধারিত হয়। এটি একটি instance-based learning অ্যালগরিদম, যেখানে মডেলটি পূর্বে ট্রেনিং ডেটা সংরক্ষণ করে এবং ভবিষ্যত ইনপুট ডেটা ক্লাসিফাই করার জন্য সেই ডেটা থেকে নিকটতম প্রতিবেশী ব্যবহার করে।
KNN-এর মূল ধারণা:
- K হল নিকটতম প্রতিবেশীর সংখ্যা।
- নতুন ডেটা পয়েন্টটি শ্রেণীভুক্ত করতে, K নিকটতম পয়েন্টের শ্রেণীগুলোর মধ্যে সবচেয়ে বেশি হওয়া শ্রেণীটি নির্বাচন করা হয়।
KNN Implementation in R:
# KNN জন্য যে প্যাকেজ ব্যবহার হবে তা ইনস্টল ও লোড করা
install.packages("class")
library(class)
# ডেটাসেট তৈরি
data(iris)
head(iris)
# ডেটাসেট থেকে আউটপুট এবং ইনপুট ভেরিয়েবল তৈরি করা
X <- iris[, 1:4] # প্রথম ৪টি কলাম (সাধারণভাবে বৈশিষ্ট্য)
y <- iris$Species # আউটপুট ভেরিয়েবল (লেবেল)
# ডেটাসেট বিভক্ত করা (Training and Test)
set.seed(123) # পুনরাবৃত্তির জন্য
train_index <- sample(1:nrow(iris), 0.7*nrow(iris)) # ৭০% ডেটা ট্রেনিংয়ের জন্য
train_X <- X[train_index, ]
train_y <- y[train_index]
test_X <- X[-train_index, ]
test_y <- y[-train_index]
# KNN মডেল তৈরি এবং প্রেডিকশন করা
knn_model <- knn(train_X, test_X, train_y, k = 3)
# Accuracy দেখা
table(Predicted = knn_model, Actual = test_y)এখানে, k = 3 নির্দেশ করে যে প্রতিটি নতুন পয়েন্ট শ্রেণীভুক্ত করতে তিনটি নিকটতম প্রতিবেশীর পরামর্শ নেওয়া হবে। knn() ফাংশনটি ডেটা থেকে শ্রেণীভুক্ত ফলাফল প্রদান করবে, এবং তার ভিত্তিতে accuracy দেখা হবে।
KNN-এর সুবিধা ও অসুবিধা:
- সুবিধা: সহজ এবং দ্রুত ইমপ্লিমেন্টেশন, কোনো প্যারামিটার ট্রেনিংয়ের প্রয়োজন হয় না।
- অসুবিধা: বড় ডেটাসেটের জন্য Computationally expensive, এবং K নির্বাচন একটি চ্যালেঞ্জ হতে পারে।
2. Support Vector Machines (SVM)
Support Vector Machine (SVM) একটি শক্তিশালী ক্লাসিফিকেশন অ্যালগরিদম যা ডেটার মধ্যে শ্রেণীভেদ করার জন্য একটি সুপার প্লেন (hyperplane) ব্যবহার করে। এটি ডেটার শ্রেণীগুলোর মধ্যে সর্বাধিক মার্জিন (margin) তৈরি করার চেষ্টা করে, যাতে শ্রেণীগুলোর বিভাজন স্পষ্ট হয়। SVM এমন একটি পদ্ধতি ব্যবহার করে যা ডেটার উপর ভিত্তি করে শ্রেণীভেদ করতে সাহায্য করে, বিশেষত উচ্চ মাত্রা (high-dimensional) ডেটা ব্যবহারে।
SVM এর মূল ধারণা:
- SVM একটি হাইপারপ্লেন তৈরি করে যা ডেটাকে দুটি শ্রেণিতে বিভক্ত করে।
- Kernel trick ব্যবহার করে, SVM নন-লাইনারি ডেটা সেগমেন্টেশনও করতে পারে।
- SVM মূলত binary classification এর জন্য ব্যবহৃত হয়, তবে এটি মাল্টি-ক্লাস ক্লাসিফিকেশনেও ব্যবহৃত হতে পারে।
SVM Implementation in R:
# SVM প্যাকেজ ইনস্টল ও লোড করা
install.packages("e1071")
library(e1071)
# ডেটাসেট তৈরি (Iris dataset)
data(iris)
# SVM মডেল তৈরি
svm_model <- svm(Species ~ ., data = iris, kernel = "linear")
# প্রেডিকশন করা
svm_predictions <- predict(svm_model, iris)
# Accuracy দেখা
table(Predicted = svm_predictions, Actual = iris$Species)এখানে, svm() ফাংশন ব্যবহার করে Species ভেরিয়েবলকে প্রিডিক্ট করার জন্য একটি সাপোর্ট ভেক্টর মেশিন মডেল তৈরি করা হয়েছে। kernel = "linear" অপশন দিয়ে আমরা একটি লিনিয়ার কর্ণেল ব্যবহার করেছি। বিভিন্ন ধরনের কর্ণেল ব্যবহার করে নন-লাইনারি ডেটাও ক্লাসিফাই করা সম্ভব।
SVM-এর সুবিধা ও অসুবিধা:
- সুবিধা: উচ্চ মাত্রার (high-dimensional) ডেটার জন্য কার্যকর, ভালো জেনারালাইজেশন ক্ষমতা।
- অসুবিধা: বড় ডেটাসেটে SVM মডেল ট্রেনিং কম্পিউটেশনালভাবে ব্যয়বহুল হতে পারে, এবং কর্ণেল সিলেকশন একটি চ্যালেঞ্জ হতে পারে।
KNN এবং SVM এর তুলনা
| Feature | KNN | SVM |
|---|---|---|
| Method | Instance-based learning (lazy learner) | Model-based learning (eager learner) |
| Complexity | Computationally expensive for large datasets | More efficient for large datasets |
| Performance | Works well with small datasets and less complex data | Excellent for high-dimensional data |
| Training Time | No training phase (no model to train) | Requires training phase (building the model) |
| Best for | Simple problems and small datasets | Complex problems, especially in higher dimensions |
| Kernel Trick | Does not use kernels | Uses kernel trick for non-linear problems |
Conclusion
- K-Nearest Neighbors (KNN): একটি সহজ, ইন্সট্যান্স-বেসড ক্লাসিফিকেশন অ্যালগরিদম যা নতুন ইনপুট পয়েন্টের ক্লাস নির্ধারণ করতে আশপাশের K নিকটতম পয়েন্ট ব্যবহার করে।
- Support Vector Machines (SVM): একটি শক্তিশালী ক্লাসিফিকেশন অ্যালগরিদম যা ডেটার মধ্যে শ্রেণীভেদ করার জন্য সুপার প্লেন তৈরি করে এবং উচ্চ মাত্রার ডেটা বা নন-লাইনারি ক্লাসিফিকেশনের জন্য কার্যকরী।
এখানে, KNN এবং SVM উভয় অ্যালগরিদমই ক্লাসিফিকেশন সমস্যার জন্য ব্যবহৃত হয়, তবে প্রতিটির নিজস্ব শক্তি এবং সীমাবদ্ধতা রয়েছে। SVM উচ্চ মাত্রার ডেটাতে ভালো ফলাফল দেয়, যখন KNN ছোট ডেটাসেটের জন্য দ্রুত কার্যকর।
Read more