Büyük Veri Analitiği - Lojistik Regresyon

Lojistik regresyon, yanıt değişkeninin kategorik olduğu bir sınıflandırma modelidir. İstatistiklerden gelen ve denetimli sınıflandırma problemleri için kullanılan bir algoritmadır. Lojistik regresyonda, aşağıdaki denklemde maliyet fonksiyonunu en aza indiren parametrelerin vektörünü β bulmaya çalışıyoruz.

$$ logit (p_i) = ln \ left (\ frac {p_i} {1 - p_i} \ right) = \ beta_0 + \ beta_1x_ {1, i} + ... + \ beta_kx_ {k, i} $$

Aşağıdaki kod, R'ye lojistik regresyon modelinin nasıl yerleştirileceğini gösterir. Burada, Naive Bayes için kullanılanla aynı olan lojistik regresyonu göstermek için spam veri setini kullanacağız.

Doğruluk açısından tahmin sonuçlarından, regresyon modelinin, Naive Bayes sınıflandırıcısı tarafından elde edilen% 72'ye kıyasla, test setinde% 92,5'lik bir doğruluk elde ettiğini bulduk.

library(ElemStatLearn)
head(spam) 

# Split dataset in training and testing 
inx = sample(nrow(spam), round(nrow(spam) * 0.8)) 
train = spam[inx,] 
test = spam[-inx,]  

# Fit regression model 
fit = glm(spam ~ ., data = train, family = binomial()) 
summary(fit)  

# Call: 
#   glm(formula = spam ~ ., family = binomial(), data = train) 
#  

# Deviance Residuals:  
#   Min       1Q   Median       3Q      Max   
# -4.5172  -0.2039   0.0000   0.1111   5.4944
# Coefficients: 
# Estimate Std. Error z value Pr(>|z|)     
# (Intercept) -1.511e+00  1.546e-01  -9.772  < 2e-16 *** 
# A.1         -4.546e-01  2.560e-01  -1.776 0.075720 .   
# A.2         -1.630e-01  7.731e-02  -2.108 0.035043 *   
# A.3          1.487e-01  1.261e-01   1.179 0.238591     
# A.4          2.055e+00  1.467e+00   1.401 0.161153     
# A.5          6.165e-01  1.191e-01   5.177 2.25e-07 *** 
# A.6          7.156e-01  2.768e-01   2.585 0.009747 **  
# A.7          2.606e+00  3.917e-01   6.652 2.88e-11 *** 
# A.8          6.750e-01  2.284e-01   2.955 0.003127 **  
# A.9          1.197e+00  3.362e-01   3.559 0.000373 *** 
# Signif. codes:  0 *** 0.001 ** 0.01 * 0.05 . 0.1  1  

### Make predictions 
preds = predict(fit, test, type = ’response’) 
preds = ifelse(preds > 0.5, 1, 0) 
tbl = table(target = test$spam, preds) 
tbl 

#         preds 
# target    0   1 
# email   535  23 
# spam     46 316 
sum(diag(tbl)) / sum(tbl) 
# 0.925