ডায়াবেটিসের এসভিএম শ্রেণিবিন্যাস উন্নত করা


10

আমি ডায়াবেটিসের পূর্বাভাস দেওয়ার জন্য এসভিএম ব্যবহার করছি। আমি এই উদ্দেশ্যে বিআরএফএসএস ডেটা সেট ব্যবহার করছি । ডেটা সেটটিতে মাত্রা রয়েছে এবং এটি স্কিউড হয়। টার্গেট ভেরিয়েবলের s এর শতাংশ while যখন এর মধ্যে বাকি । ।11 % 89 %432607×136Y11%N89%

আমি শুধু ব্যবহার করছি 15আউট 136ডেটা সেট থেকে স্বাধীন ভেরিয়েবল। ডেটা সেট হ্রাস করার অন্যতম কারণ হ'ল এসযুক্ত সারিগুলি NAবাদ দিলে আরও প্রশিক্ষণের নমুনাগুলি ছিল ।

এই 15পরিবর্তনশীলগুলি এলোমেলো গাছ, লজিস্টিক রিগ্রেশন এবং ফলাফলের মডেলগুলির মধ্যে কোন ভেরিয়েবলগুলি তাৎপর্যপূর্ণ তা আবিষ্কার করার মতো পরিসংখ্যানগত পদ্ধতি চালানোর পরে নির্বাচন করা হয়েছিল। উদাহরণস্বরূপ, লজিস্টিক রিগ্রেশন চালানোর পরে আমরা p-valueসর্বাধিক উল্লেখযোগ্য ভেরিয়েবলগুলি অর্ডার করতাম ।

পরিবর্তনশীল নির্বাচন করার আমার পদ্ধতি কি সঠিক? কোন পরামর্শ ব্যাপকভাবে স্বাগত।

নিম্নলিখিতটি আমার Rবাস্তবায়ন।

library(e1071) # Support Vector Machines

#--------------------------------------------------------------------
# read brfss file (huge 135 MB file)
#--------------------------------------------------------------------
y <- read.csv("http://www.hofroe.net/stat579/brfss%2009/brfss-2009-clean.csv")
indicator <- c("DIABETE2", "GENHLTH", "PERSDOC2", "SEX", "FLUSHOT3", "PNEUVAC3", 
    "X_RFHYPE5", "X_RFCHOL", "RACE2", "X_SMOKER3", "X_AGE_G", "X_BMI4CAT", 
    "X_INCOMG", "X_RFDRHV3", "X_RFDRHV3", "X_STATE");
target <- "DIABETE2";
diabetes <- y[, indicator];

#--------------------------------------------------------------------
# recode DIABETE2
#--------------------------------------------------------------------
x <- diabetes$DIABETE2;
x[x > 1]  <- 'N';
x[x != 'N']  <- 'Y';
diabetes$DIABETE2 <- x; 
rm(x);

#--------------------------------------------------------------------
# remove NA
#--------------------------------------------------------------------
x <- na.omit(diabetes);
diabetes <- x;
rm(x);

#--------------------------------------------------------------------
# reproducible research 
#--------------------------------------------------------------------
set.seed(1612);
nsamples <- 1000; 
sample.diabetes <- diabetes[sample(nrow(diabetes), nsamples), ]; 

#--------------------------------------------------------------------
# split the dataset into training and test
#--------------------------------------------------------------------
ratio <- 0.7;
train.samples <- ratio*nsamples;
train.rows <- c(sample(nrow(sample.diabetes), trunc(train.samples)));

train.set  <- sample.diabetes[train.rows, ];
test.set   <- sample.diabetes[-train.rows, ];

train.result <- train.set[ , which(names(train.set) == target)];
test.result  <- test.set[ , which(names(test.set) == target)];

#--------------------------------------------------------------------
# SVM 
#--------------------------------------------------------------------
formula <- as.formula(factor(DIABETE2) ~ . );
svm.tune <- tune.svm(formula, data = train.set, 
    gamma = 10^(-3:0), cost = 10^(-1:1));
svm.model <- svm(formula, data = train.set, 
    kernel = "linear", 
    gamma = svm.tune$best.parameters$gamma, 
    cost  = svm.tune$best.parameters$cost);

#--------------------------------------------------------------------
# Confusion matrix
#--------------------------------------------------------------------
train.pred <- predict(svm.model, train.set);
test.pred  <- predict(svm.model, test.set);
svm.table <- table(pred = test.pred, true = test.result);
print(svm.table);

আমার ল্যাপটপে এটি দ্রুততর হওয়ায় আমি (প্রশিক্ষণ = এবং পরীক্ষা = ) নমুনা নিয়ে দৌড়েছি । আমার প্রাপ্ত পরীক্ষার ডেটার জন্য কনফিউশন ম্যাট্রিক্স ( নমুনা) বেশ খারাপ।1000300 300700300300

    true
pred   N   Y
   N 262  38
   Y   0   0

আমার Yক্লাস সম্পর্কে আমার ভবিষ্যদ্বাণী উন্নত করা দরকার । আসলে, আমি Yখারাপভাবে পারফরম্যান্স করলেও আমার যথাসম্ভব যথাযথ হওয়া দরকার N। শ্রেণিবিন্যাসের নির্ভুলতার উন্নতির জন্য যে কোনও পরামর্শই প্রশংসিত হবে।


আমার ধারণা আপনার এসভিএম মোটেও কাজ করে না, তবে কেন জানি না! আপনার ডেটা স্বাভাবিক করার জন্য এটি আরও ভাল হতে পারে ...
ব্যবহারকার 4581

হ্যাঁ এটি মূলত যে Yকোনও ইনপুটটির পূর্বাভাস দেয় । এর অর্থ এটি সময়ের সঠিক ।  90%
আনন্দ

ডেটা সাধারণকরণ শুরু করা সবচেয়ে ভাল জিনিস। তারপরেই শুরু করুন। আপনি অন-লিনিয়ার কার্নেলটি আরও ভাল ফলাফল দেখাতে পারে তা অনুসন্ধান করার চেষ্টা করতে পারেন। (এটি আপনার সীমান্তের প্রবাহের উপর নির্ভর করে, স্বাভাবিক হতে পারে যথেষ্ট হওয়া উচিত)
404 ড্রিমার_এমএল

এর kernlabপরিবর্তে আপনি চেষ্টাও করতে পারেন e1071- এটি স্বয়ংক্রিয়ভাবে স্বাভাবিক হয় এবং প্রথম মডেলের বুটস্ট্র্যাপটি আরও সহজ করে তোলে কিছু হিউরিস্টিক্স।

উত্তর:


9

আমার 4 টি পরামর্শ রয়েছে:

  1. আপনার মডেলটিতে অন্তর্ভুক্ত করার জন্য আপনি কীভাবে ভেরিয়েবলগুলি বেছে নিচ্ছেন? আপনি বড় ডেটাसेट থেকে কিছু মূল সূচক মিস করছেন missing
  2. আপনি যে সমস্ত সূচক ব্যবহার করছেন তার প্রায় সবগুলিকেই (যেমন যৌনতা, ধূমপায়ী ইত্যাদি) কারণ হিসাবে বিবেচনা করা উচিত। এই ভেরিয়েবলগুলিকে সংখ্যাসূচক হিসাবে চিকিত্সা করা ভুল, এবং সম্ভবত আপনার মডেলটিতে ত্রুটির ক্ষেত্রে অবদান রাখছে।
  3. আপনি কেন একটি এসভিএম ব্যবহার করছেন? লিনিয়ার বৈষম্যমূলক বিশ্লেষণ বা এমনকি লিনিয়ার রিগ্রেশন এর মতো কোনও সহজ পদ্ধতি আপনি ব্যবহার করেছেন? আরও বড় ডেটাসেটে একটি সহজ পদ্ধতির ফলে আরও ভাল ফলাফল পাওয়া যাবে।
  4. ক্যারেট প্যাকেজ চেষ্টা করুন । এটি আপনাকে মডেল যথার্থতা ক্রস-বৈধকরণে সহায়তা করবে, এটি সমান্তরালভাবে তৈরি হয়েছে যা আপনাকে দ্রুত কাজ করতে দেয় এবং বিভিন্ন ধরণের মডেলগুলি অন্বেষণ করা সহজ করে তোলে।

ক্যারেটের জন্য এখানে কয়েকটি উদাহরণ কোড দেওয়া হয়েছে:

library(caret)

#Parallize
library(doSMP)
w <- startWorkers()
registerDoSMP(w)

#Build model
X <- train.set[,-1]
Y <- factor(train.set[,1],levels=c('N','Y'))
model <- train(X,Y,method='lda')

#Evaluate model on test set
print(model)
predY <- predict(model,test.set[,-1])
confusionMatrix(predY,test.set[,1])
stopWorkers(w)

এই এলডিএ মডেলটি আপনার এসভিএমকে মারধর করে, এবং আমি আপনার কারণগুলিও ঠিক করি নি। আমি নিশ্চিত যে আপনি যদি যৌনতা, ধূমপায়ী ইত্যাদিকে পুনরুদ্ধার করেন তবে আপনি আরও ভাল ফলাফল পাবেন।


আমি নিম্নলিখিত ত্রুটি পেয়েছি task 1 failed - "could not find function "predictionFunction""। আমি জানি এটি কোনও ফোরাম নয় তবে আপনার কোনও মন্তব্য থাকলে দয়া করে আমাকে জানান।
আনন্দ

1
@ আনন্দ: অ্যাডমিন হিসাবে একটি নতুন আর সেশন খুলুন (বা ম্যাক / লিনাক্সে সুডো আর চালান)। update.packages.এটি শেষ হয়ে গেলে চালান , আর বন্ধ করুন এবং একটি সাধারণ (প্রশাসক নয়) সেশনটি পুনরায় খুলুন। "এসভিএম" এবং "কনফিউশন ম্যাট্রিক্স" বিভাগ ব্যতীত আপনার কোডটি চালান। তারপরে আমার কোডটি চালান। আপনি যদি এখনও ত্রুটি পান তবে সঠিক ত্রুটি সহ দয়া করে একটি লাইন পোস্ট করুন that
Zach

1
@ আনন্দ: এছাড়াও, নিশ্চিত হয়ে নিন যে আপনি আর (2.14) এর সর্বশেষ সংস্করণটি চালাচ্ছেন এবং কেরেটের সর্বশেষ সংস্করণটি ব্যবহার করছেন। আপনি install.packages('caret')আবার চালিয়ে ক্যারেট আপডেট করতে পারেন ।
Zach

@ আনন্দ: দুর্দান্ত! আপনি trainফাংশনটির জন্য বিভিন্ন পদ্ধতিতে ফেলে রাখতে পারেন , যেমন nb(নিষ্পাপ বেইস), glm(লজিস্টিক রিগ্রেশন) svmLinearএবং svmRadial। এসভিএম এর ফিট হতে অনেক দিন সময় লাগবে।
জাচ

3

আপনি যদি লিনিয়ার কার্নেল ব্যবহার করে থাকেন তবে বৈশিষ্ট্য নির্বাচনটি একটি খারাপ ধারণা এবং সম্ভবত নিয়মিতকরণ বৈশিষ্ট্য নির্বাচনের চেয়ে বেশি কার্যকরভাবে আটকাতে পারে। নোট করুন যে SVM আনুমানিক প্রয়োগকৃত পারফরম্যান্সের সীমাটি বৈশিষ্ট্য জায়গার মাত্রা থেকে পৃথক, যা এসভিএমের বিক্রয় পয়েন্টগুলির মধ্যে একটি ছিল।


2

আমি সম্প্রতি এই সমস্যাটি পেয়েছি এবং বেশ কয়েকটি জিনিস খুঁজে পেয়েছি যা সহায়তা করে। প্রথমে একটি নাইভ বেয়েস মডেল (প্যাকেজ কেএলআর) ব্যবহার করে দেখুন যা শ্রেণিবিন্যাসের সমস্যাটিতে সংখ্যালঘু শ্রেণি ক্ষুদ্র হয় যখন কখনও কখনও আপনাকে আরও ভাল ফলাফল দেয়। এছাড়াও, আপনি যদি কোনও এসভিএমের সাথে লেগে থাকতে পছন্দ করেন তবে আপনি সংখ্যালঘু শ্রেণীর উপর নজর রাখার চেষ্টা করতে পারেন। মূলত আপনি সংখ্যালঘু শ্রেণির আরও উদাহরণ অন্তর্ভুক্ত করতে চান বা সংখ্যালঘু শ্রেণীর জন্য সিনথেটিকভাবে কেস তৈরি করতে চাইবেন

এই কাগজ: http: //www.it.iitb.ac.in/~kamlesh/Page/Reports/hightlySkew.pdf

ওয়েকাতে প্রয়োগ করা এই কৌশলগুলির কিছু আলোচনা এবং উদাহরণ রয়েছে তবে এগুলিকে আর-তে নিজেকে চাপিয়ে দেওয়াও সম্ভব।


সহায়ক মন্তব্যের জন্য ধন্যবাদ। আমাকে আপনার পরামর্শ চেষ্টা করে দেখুন।
আনন্দ

1

ইতিমধ্যে যা উল্লেখ করা হয়েছে তা ছাড়াও আপনি লিনিয়ার কার্নেলটি ব্যবহার করার জন্য আপনার সেরা মডেলটি ঠিক করছেন। আপনার টিউনিং পর্যায়ে ব্যবহৃত / পাওয়া গিয়েছিল একই কর্নেল সহ (যেটি আমি ধরে নিলাম যে আপনি গামা টিউন করছেন সেহেতু আরবিএফ হ'ল) ​​আপনি যে মডেলটি সুর করেছিলেন তার মধ্যে সেরা মডেলটি ব্যবহার করার পূর্বাভাস দেওয়া উচিত।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.