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 .YN
Sadece kullanıyorum 15dışına 136veri kümesinden bağımsız değişkenler. Veri kümesini azaltmanın nedenlerinden biri, NAs içeren satırlar atlandığında daha fazla eğitim örneğine sahip olmaktı.
Bu 15değ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-valueen ö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 Ruygulamam.
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
YSınıf için tahminimi geliştirmem gerekiyor . Aslında, Ykö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.
Yherhangi bir girişi tahmin eder . Bu , zamanın doğru olacağı anlamına gelir .