Diyabet tahmininde SVM kullanıyorum. Bu amaçla BRFSS veri setini kullanıyorum . Veri kümesi boyutlarına sahiptir ve eğridir. Hedef değişkendeki s yüzdesi , s ise geri kalan .Y
N
Sadece kullanıyorum 15
dışına 136
veri kümesinden bağımsız değişkenler. Veri kümesini azaltmanın nedenlerinden biri, NA
s içeren satırlar atlandığında daha fazla eğitim örneğine sahip olmaktı.
Bu 15
değişkenler rastgele ağaçlar, lojistik regresyon gibi istatistiksel yöntemler uygulandıktan ve sonuçta ortaya çıkan modellerden hangi değişkenlerin anlamlı olduğunu bulduktan sonra seçilmiştir. Örneğin, lojistik regresyonu çalıştırdıktan sonra p-value
en önemli değişkenleri sıraladık.
Değişken seçimi yapma yöntemim doğru mu? Herhangi bir öneri büyük ölçüde açığız.
Aşağıdakiler benim R
uygulamam.
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);
Birlikte ran (eğitim = ve test = daha hızlı benim laptop olduğundan) numuneler. Aldığım test verileri ( örnek) için karışıklık matrisi oldukça kötü.
true
pred N Y
N 262 38
Y 0 0
Y
Sınıf için tahminimi geliştirmem gerekiyor . Aslında, Y
kötü performans göstersem bile olabildiğince doğru olmalıyım N
. Sınıflandırmanın doğruluğunu artırmak için herhangi bir öneri büyük takdir edilecektir.
Y
herhangi bir girişi tahmin eder . Bu , zamanın doğru olacağı anlamına gelir .