Naive Bayes Yöntemiyle Sınıflandırma (Classification with Naive Bayes): R ile Uygulama

Python ile yaptığımız Naive Bayes örneğini bu yazımızda R ile yapacağız.

Çalışma Dizinini Ayarlama, Veri Setini İndirme

Veri setini buradan indirebilirsiniz.

setwd('Calisma_Dizininiz')
dataset = read.csv('SosyalMedyaReklamKampanyası.csv', encoding = 'UTF-8')

Veri Seti Görünüm

Veriyi Anlamak

Yukarıda gördüğümüz veri seti beş nitelikten oluşuyor. Veri seti bir sosyal medya kayıtlarından derlenmiş durumda. KullaniciID müşteriyi belirleyen eşsiz rakam, Cinsiyet, Yaş, Tahmini Gelir yıllık tahmin edilen gelir, SatinAldiMi ise belirli bir ürünü satın almış olup olmadığı, hadi lüks araba diyelim. Bu veri setinde kolayca anlaşılabileceği gibi hedef değişkenimiz SatinAldiMi’dir. Diğer dört nitelik ise bağımsız niteliklerdir. Bu bağımsız niteliklerle bağımlı nitelik (satın alma davranışının gerçekleşip gerçekleşmeyeceği) tahmin edilecek.

Bağımsız değişkenlerin hepsini analizde kullanmayacağız. Analiz için kullanacağımız nitelikleri seçelim:

 dataset = dataset[3:5]

3,4 ve 5’inci nitelikleri alacağımız için parantez içine 3:5 dedik. Yeni veri setimizi de görelim:

Hedef niteliğimiz SatinAldiMi niteliğini factor yapalım.

dataset\$SatinAldiMi = factor(dataset\$SatinAldiMi, levels = c(0, 1))

Veri Setini Eğitim ve Test Olarak Ayırmak

Aynı sonuçları almak için random değeri belirlemek için bir sayı belirliyoruz. 123. split fonksiyonu ile hangi kayıtların eğitim hangi kayıtların test grubunda kalacağını damgalıyoruz. Sonra bu damgalara göre ana veri setinden yeni eğitim ve test setlerini oluşturuyoruz.

library(caTools)
set.seed(123)
split = sample.split(dataset\$SatinAldiMi, SplitRatio = 0.75)
training_set = subset(dataset, split == TRUE)
test_set = subset(dataset, split == FALSE)

Yaş ile maaş aynı ölçekte olmadığı için bu nitelikleri normalizasyona tabi tutuyoruz.

training_set[-3] = scale(training_set[-3])
test_set[-3] = scale(test_set[-3])

Naive Bayes Modeli Oluşturmak ve Eğitmek

R’ın e1071 paketi içindeki naiveBayes nesnesini model oluşturmak için kullanacağız.

library(e1071)
classifier = naiveBayes(x = training_set[-3],
                        y = training_set\$SatinAldiMi)

İlk parametremiz nitelikler matrisi olan x, ikinci parametremiz hedef niteliğimiz y. Sınıflandırıcımızı oluşturduk.

Test Seti ile Tahmin Yapmak

Eğittiğimiz modeli ve test setini kullanarak tahmin yapalım ve bakalım modelimiz ne kadar isabetli sınıflandırma yapıyor.

y_pred = predict(classifier, newdata = test_set[-3])

Hata Matrisini Oluşturmak

cm = table(test_set[, 3], y_pred)
cm
   0  1
 0 57 7
 1 7 29

Toplam 14 hatalı sınıflandırma yapmış Naive Bayes.

library(ElemStatLearn)
set = training_set
X1 = seq(min(set[, 1]) - 1, max(set[, 1]) + 1, by = 0.01)
X2 = seq(min(set[, 2]) - 1, max(set[, 2]) + 1, by = 0.01)
grid_set = expand.grid(X1, X2)
colnames(grid_set) = c('Yas', 'TahminiMaas')
y_grid = predict(classifier, newdata = grid_set)
plot(set[, -3],
main = 'Naive Bayes (Eğitim seti)',
xlab = 'Yaş', ylab = 'Maaş',
xlim = range(X1), ylim = range(X2))
contour(X1, X2, matrix(as.numeric(y_grid), length(X1), length(X2)), add = TRUE)
points(grid_set, pch = '.', col = ifelse(y_grid == 1, 'springgreen3', 'tomato'))
points(set, pch = 21, bg = ifelse(set[, 3] == 1, 'green4', 'red3'))

 library(ElemStatLearn)
set = test_set
X1 = seq(min(set[, 1]) - 1, max(set[, 1]) + 1, by = 0.01)
X2 = seq(min(set[, 2]) - 1, max(set[, 2]) + 1, by = 0.01)
grid_set = expand.grid(X1, X2)
colnames(grid_set) = c('Yas', 'TahminiMaas')
y_grid = predict(classifier, newdata = grid_set)
plot(set[, -3], main = 'Naive Bayes (Test seti)',
 xlab = 'Age', ylab = 'Estimated Salary',
 xlim = range(X1), ylim = range(X2))
contour(X1, X2, matrix(as.numeric(y_grid), length(X1), length(X2)), add = TRUE)
points(grid_set, pch = '.', col = ifelse(y_grid == 1, 'springgreen3', 'tomato'))
points(set, pch = 21, bg = ifelse(set[, 3] == 1, 'green4', 'red3'))

Hoşçakalın…

Yazar Hakkında
Toplam 152 yazı
Erkan ŞİRİN
Erkan ŞİRİN
2014'ten beri hem akademik alanda hem de sektörde pratik anlamda büyük veri ve veri bilimi ile ilgili çalışmalar yürütmektedir. Büyük veri ve veri bilimi ile ilgili birçok kurum ve şirkete danışmanlık ve eğitimler vermekte, projeler icra etmektedir. Çalışma alanları: büyük veri platformlarının kurulum ve yönetimi, büyük veri üzerinde makine öğrenmesi, olağan dışılık ve sahtecilik tespiti, akan veri işleme ve veri hazırlama sürecidir.
Yorumlar (2 yorum)
Elif
Elif Cevapla
- 23:05

Merhaba,
Benim kullanacağım veri setinde hedef değişkenim “Mesafe(metre)” bu yüzden de tahmin sonucum factor(0) olarak gözüküyor bu algoritmayı kullanabilmek için hedef değişkenim 0 veya 1 mi olmak zorunda? Bu konuda yardımcı olabilirseniz çok sevinirim. Teşekkürler.

    Erkan ŞİRİN
    Erkan ŞİRİN Cevapla
    - 23:18

    Merhaba 0,1 olması şart değil ancak kategorik olması gerekir. Çünkü sınıflandırma yapıyoruz burada. Eğer hedef değişkeniniz sürekli ise (metre öyle geliyor kulağa) regresyon algoritmalarına bakabilirsiniz.

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

×

Bir Şeyler Ara