আমি প্রশিক্ষণের ডেটা থেকে একটি এসভিএম তৈরির চেষ্টা করছি যেখানে একটি গ্রুপ অন্য দলের চেয়ে বেশি প্রতিনিধিত্ব করে। তবে চূড়ান্ত পরীক্ষার ডেটাগুলিতে গ্রুপগুলি সমানভাবে উপস্থাপিত হবে। অতএব, প্রশিক্ষণের ডেটাতে দুটি গোষ্ঠীর প্রভাব ভারসাম্য বজায় রাখতে আমি আর প্যাকেজ ইন্টারফেসের class.weights
প্যারামিটারটি ব্যবহার করতে চাই ।e1071
libsvm
যেহেতু এই ওজনগুলি কীভাবে নির্দিষ্ট করা উচিত সে সম্পর্কে আমি নিশ্চিত ছিল না, তাই আমি একটি ছোট পরীক্ষা স্থাপন করেছি:
- কিছু নাল ডেটা তৈরি করুন (এলোমেলো বৈশিষ্ট্য; গ্রুপ লেবেলের মধ্যে 2: 1 অনুপাত)
class.weights
পরামিতি সেট সহ একটি এসএমএম ফিট করুন ।- একগুচ্ছ নতুন নাল ডেটাসেটের পূর্বাভাস দিন এবং শ্রেণীর অনুপাত দেখুন।
- বিভিন্ন নাল প্রশিক্ষণের জন্য পুরো প্রক্রিয়াটি বহুবার প্রতিলিপি করুন।
আমি যে আর কোডটি ব্যবহার করছি তা এখানে:
nullSVM <- function(n.var, n.obs) {
# Simulate null training data
vars = matrix(rnorm(n.var*n.obs), nrow=n.obs)
labels = rep(c('a', 'a', 'b'), length.out=n.obs)
data = data.frame(group=labels, vars)
# Fit SVM
fit = svm(group ~ ., data=data, class.weights=c(a=0.5, b=1))
# Calculate the average fraction of 'a' we would predict from null test data
mean(replicate(50, table(predict(fit, data.frame(matrix(rnorm(n.var*n.obs), nrow=n.obs))))[1])) / n.obs
}
library(e1071)
set.seed(12345)
mean(replicate(50, nullSVM(50, 300)))
এই পুরো জিনিসটি থেকে আমি একটি আউটপুট ~ 0.5 আশা করছিলাম, তবে, আমি যা পাই তা তা নয়:
> mean(replicate(50, nullSVM(50, 300)))
[1] 0.6429987
class.weights
প্যারামিটারের কাজ করছে, সাজানোর নিম্ন আমি ওজন হিসেবে a
, নিম্ন এটা এই সিমুলেশন মধ্যে প্রতিনিধিত্ব করা হয় (এবং যদি আমি বাদ class.weights
এটিকে 1 পাসে ফেরৎ) ... কিন্তু আমি বুঝতে পারছি না কেন কেবল 1 ওজন ব্যবহার করছে: 2 ( প্রশিক্ষণের ডেটা যা 2: 1) এর মধ্যে 50% পর্যন্ত নেমে আসে না।
যদি আমি এসভিএমগুলিকে ভুল বোঝাবুঝি করি তবে কেউ কি এই বিষয়টি ব্যাখ্যা করতে পারেন? (বা কিছু রেফ পাঠান?)
যদি আমি এটি ভুল করে চলেছি তবে কেউ কি আমাকে class.weights
প্যারামিটারটি ব্যবহার করার সঠিক উপায় বলতে পারেন ?
এটি সম্ভবত একটি বাগ হতে পারে? (আমি মনে করি না, যেহেতু আমি এই সফ্টওয়্যারটি এবং অন্তর্নিহিত লিবসভিএমটি যথেষ্ট পরিপক্ক হতে বুঝতে পেরেছি)