আমি ডায়াবেটিসের পূর্বাভাস দেওয়ার জন্য এসভিএম ব্যবহার করছি। আমি এই উদ্দেশ্যে বিআরএফএসএস ডেটা সেট ব্যবহার করছি । ডেটা সেটটিতে মাত্রা রয়েছে এবং এটি স্কিউড হয়। টার্গেট ভেরিয়েবলের s এর শতাংশ while যখন এর মধ্যে বাকি । ।11 % 89 %Y
N
আমি শুধু ব্যবহার করছি 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);
আমার ল্যাপটপে এটি দ্রুততর হওয়ায় আমি (প্রশিক্ষণ = এবং পরীক্ষা = ) নমুনা নিয়ে দৌড়েছি । আমার প্রাপ্ত পরীক্ষার ডেটার জন্য কনফিউশন ম্যাট্রিক্স ( নমুনা) বেশ খারাপ।300 300
true
pred N Y
N 262 38
Y 0 0
আমার Y
ক্লাস সম্পর্কে আমার ভবিষ্যদ্বাণী উন্নত করা দরকার । আসলে, আমি Y
খারাপভাবে পারফরম্যান্স করলেও আমার যথাসম্ভব যথাযথ হওয়া দরকার N
। শ্রেণিবিন্যাসের নির্ভুলতার উন্নতির জন্য যে কোনও পরামর্শই প্রশংসিত হবে।
Y
কোনও ইনপুটটির পূর্বাভাস দেয় । এর অর্থ এটি সময়ের সঠিক ।