অ্যাডাবোস্টের এই কাগজটি কে-শ্রেণির সমস্যাগুলিতে 2-শ্রেণির মডেলগুলি বাড়ানোর জন্য কিছু পরামর্শ এবং কোড (পৃষ্ঠা 17) দেয়। আমি এই কোডটি সাধারণীকরণ করতে চাই, যেমন আমি সহজেই বিভিন্ন 2-শ্রেণির মডেলগুলিতে প্লাগ করতে পারি এবং ফলাফলগুলি তুলনা করতে পারি। কারণ বেশিরভাগ শ্রেণিবদ্ধকরণের মডেলগুলির একটি সূত্র ইন্টারফেস এবং একটি predict
পদ্ধতি রয়েছে, এর কয়েকটি অপেক্ষাকৃত সহজ হওয়া উচিত। দুর্ভাগ্যক্রমে, আমি 2-শ্রেণীর মডেলগুলি থেকে শ্রেণীর সম্ভাব্যতাগুলি বের করার কোনও মানক উপায় খুঁজে পাইনি, সুতরাং প্রতিটি মডেলের জন্য কিছু কাস্টম কোডের প্রয়োজন হবে।
আমি এখানে একটি ফাংশন লিখেছি যাতে আমি কে-ক্লাসের সমস্যাটিকে 2-শ্রেণির সমস্যাগুলিতে বিভক্ত করতে এবং কে মডেলগুলি ফিরিয়ে দিতে:
oneVsAll <- function(X,Y,FUN,...) {
models <- lapply(unique(Y), function(x) {
name <- as.character(x)
.Target <- factor(ifelse(Y==name,name,'other'), levels=c(name, 'other'))
dat <- data.frame(.Target, X)
model <- FUN(.Target~., data=dat, ...)
return(model)
})
names(models) <- unique(Y)
info <- list(X=X, Y=Y, classes=unique(Y))
out <- list(models=models, info=info)
class(out) <- 'oneVsAll'
return(out)
}
প্রতিটি মডেলের পুনরাবৃত্তি করতে এবং পূর্বাভাস দেওয়ার জন্য আমি এখানে একটি পূর্বাভাসের পদ্ধতি লিখেছি:
predict.oneVsAll <- function(object, newX=object$info$X, ...) {
stopifnot(class(object)=='oneVsAll')
lapply(object$models, function(x) {
predict(x, newX, ...)
})
}
এবং পরিশেষে, data.frame
ভবিষ্যদ্বাণী করা সম্ভাব্যতাকে সাধারণ করতে এবং কেসগুলিকে শ্রেণিবদ্ধ করার জন্য এখানে একটি ফাংশন । নোট করুন যে data.frame
প্রতিটি মডেল থেকে সম্ভাবনার কে-কলাম তৈরি করা আপনার উপর নির্ভর করে, কারণ 2-শ্রেণির মডেল থেকে শ্রেণিবদ্ধ সম্ভাবনাগুলি বের করার জন্য একীভূত উপায় নেই:
classify <- function(dat) {
out <- dat/rowSums(dat)
out$Class <- apply(dat, 1, function(x) names(dat)[which.max(x)])
out
}
এখানে ব্যবহার করে একটি উদাহরণ দেওয়া হয়েছে adaboost
:
library(ada)
library(caret)
X <- iris[,-5]
Y <- iris[,5]
myModels <- oneVsAll(X, Y, ada)
preds <- predict(myModels, X, type='probs')
preds <- data.frame(lapply(preds, function(x) x[,2])) #Make a data.frame of probs
preds <- classify(preds)
>confusionMatrix(preds$Class, Y)
Confusion Matrix and Statistics
Reference
Prediction setosa versicolor virginica
setosa 50 0 0
versicolor 0 47 2
virginica 0 3 48
এখানে ব্যবহার করে একটি উদাহরণ দেওয়া হয়েছে lda
(আমি জানি এলডিএ একাধিক ক্লাস পরিচালনা করতে পারে তবে এটি কেবল একটি উদাহরণ):
library(MASS)
myModels <- oneVsAll(X, Y, lda)
preds <- predict(myModels, X)
preds <- data.frame(lapply(preds, function(x) x[[2]][,1])) #Make a data.frame of probs
preds <- classify(preds)
>confusionMatrix(preds$Class, Y)
Confusion Matrix and Statistics
Reference
Prediction setosa versicolor virginica
setosa 50 0 0
versicolor 0 39 5
virginica 0 11 45
এই ফাংশনগুলির কোনও সূত্র ইন্টারফেস এবং একটি predict
পদ্ধতি সহ যে কোনও 2-শ্রেণির মডেলের জন্য কাজ করা উচিত । মনে রাখবেন যে আপনাকে এক্স এবং ওয়াই উপাদানগুলি ম্যানুয়ালি বিভক্ত করতে হবে যা কিছুটা কুরুচিপূর্ণ তবে সূত্রের ইন্টারফেসটি লেখার মুহূর্তে আমার বাইরে beyond
এই দৃষ্টিভঙ্গি কি সবার কাছে অর্থবোধ করে? আমি কীভাবে এটি উন্নত করতে পারি, বা এই সমস্যাটি সমাধান করার জন্য কোনও প্যাকেজ রয়েছে?
predict
পদ্ধতি আছে has
car
, বা*lab
প্যাকেজগুলির মধ্যে একটি) আপনার মতো একটি কার্য সরবরাহ করেছিল। দুঃখিত আমি সাহায্য করতে পারি না। কে-ওয়ে এসভিএম কীভাবে কাজ করে সে সম্পর্কে আমি কিছুটা পড়েছি এবং মনে হয় এটি ভাবনার চেয়ে আরও জটিল।