Karar Ağacı ile Sınıflandırma (Classification with Decision Tree): R ile Örnek Uygulama

Python ile yaptığımız Karar Ağacı ö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')
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 rpart paketi içindeki rpart nesnesini model oluşturmak için kullanacağız.

library(rpart)
classifier = rpart(formula = SatinAldiMi ~ .,
                   data = training_set)

İlk parametremiz formül; bağımlı değişken solda ve bağımsız değişkenleri temsilen nokta sağda. İkinci parametremiz eğitim veri setimiz.

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])
y_pred

Sınıflandırıcımız her bir kaydın aldı veya almadı sınıflarına ait olasılıklarını hesaplamış. Buna göre büyük olan rakam hangi sınıfta ise tahmin o sınıfa ait olacaktır. Ancak burada şöyle bir sıkıntı var. Biz y_pred değişkenini hata matrisine bu haliyle sokar isek hata alırız. Çünkü hata matrisi gerçek sonuçlar ile tahmin sonuçlarını birebir karşılaştırıp hata matrisini oluşturuyor. Bunu sorunun oluşmasını engellemek için predict() fonksiyonuna bir parametre eklememiz yeterlidir.

y_pred = predict(classifier, newdata = test_set[-3], type = 'class')
y_pred  
2 4 5 9 12 18 19 20 22 29 32 34 35 38 45 46 48 52 66 69 74 75 82 84 85 86 87 89 103 .....
0 0 0 0  0  0  1  1  0  0  1  0  1  0  0  0  0  0  0  0  1  0  0  1  0  1  0  0  1  .....

Hata Matrisini Oluşturmak

cm = table(test_set[, 3], y_pred)
cm
   0  1
 0 53 11
 1 6 30

Toplam 17 hatalı sınıflandırma yapmış Karar Ağacı.

Eğitim Seti Grafik

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, type = 'class')
plot(set[, -3],
 main = 'Karar Ağacı (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'))

Test Seti Grafik

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, type = 'class')
plot(set[, -3], main = 'Karar Ağacı (Test 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'))

Ağaç Çizimi

plot(classifier)
plot(text)

Karar Ağacı ile Sınıflandırma (Classification with Decision Tree): R ile Örnek Uygulama” için 2 yorum

  • 9 Ekim 2017 tarihinde, saat 20:32
    Permalink

    Yazınızda yer alan Hedef niteliğimiz SatinAldiMi niteliğini factor yapalım. başlığı altındaki koda html tagları karışmış galiba.
    birde bu örnek özelinde değil ancak SatinAldiMi değişkeni 2 durumlu değilde likert ölçekli bir konu -değişken olsaydı acaba nasıl bir çözüm olacaktı.
    Örneğin aldığı üründen memnun olma durumu olsaydı (1.Memnun 2.Orta 3.Memnun değil)
    yine karar ağacında nasıl bir çözüm izlenecekti.

    Yanıtla
    • 9 Ekim 2017 tarihinde, saat 23:16
      Permalink

      Merhaba. İkazınız için teşekkürler. Enlighter eklentisi yüklenince dolar işaretlerini farklı algılamaya başlamış o yüzden \ ile önlem almak gerekti. Bu yazımızda hedef değişkenimiz sadece iki değer alabiliyor, satın adı almadı diye, yani binary. Sizin bahsettiğiniz likert ölçekte değişken ikiden fazla değer alabiliyor, yaygın olarak 5. Probleminiz ve veriniz hakkında bilgi sahibi olmadan fazla birşey söylemek zor, ancak Lineer Discriminant analizi olabilir. Ayrıca Hedef değişkeniniz aynı zamanda sıralı değişken muhtemelen bağımlı değişkenleriniz de aynı türdendir. Bunları sürekli değişken olarak kabul edip regresyon analizi de yapabilirsiniz. Kurduğunuz modelde örneğin çıkan değer 2.9 civarında ise siz bu sonucu memnun olarak kabul edebilirsiniz. Saygılarımızla, iyi çalışmalar…

      Yanıtla

Bir cevap yazın

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

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Barkod Etiketi üretimi yapan firmaların işi ciddi bir iştir. Bu anlamda sizin de hangi firmayla çalışma yatığınız çok büyük önem taşır. Kullanım alanı sınırsızdır. Her alanda ve her sektörde bu etiketlere ihtiyaç duyulur. Etiket çeşitleri ve Barkod etiketleri, seri üretimle hazırlanmaktadır. Etiketler ahşap, plastik, metal ya da cam gibi ambalajlı ürünlerin üzerilerine ugulanır.
Mide botoksu midenin belirli yerlerine botoks maddesi enjekte etme suretiyle midedeki kasların çalışmasını sınırlandırmayı ve sayede midenin gıdaları sindirim sürecini yavaşlatarak buna bağlı olan açlık-tokluk hissi süresinin de uzatılmasını amaçlayan ameliyatsız kolay kilo verme tedavisidir. Botoks uygulanırken, midenin detaylı şekilde içerden görüntülenmesini sağlayan endoskopi uygulaması ile gerçekleştirilir. Bu sayede hastaya sadece gastroskpik uygulaması kadar bir rahatsızlık olur. Özellikle diyet programlarına ve düzenli egzersizlere uymakta zorlanan ve buna bağlı olarak da obeziteye yakalanan, bu yüzdende obezitenin sebep olduğu çeşitli sağlık sorunları olan kişiler için mide botoksu bir devrim niteliğindedir ve son yıllarda ülkemizde yaygın olarak kullanılmaktadır.
En güzel cami halısı dış avlusu olup bunun çevresi pencereli duvarlarla çevrilidir. Bu avulya 3 ü cephede olmak üzere, 8 kapıdan girilir. Şadırvan avlusu, 26 adet granit mermer ve porfir sütuna oturtulmuş, 30 kubbeyle çevrili geniş alandır. Mermer döşemeli bu geniş sahanın ortasında 6 mermer sütunlu şadırvan, sahanın azametini gösterir. Şadırvanın kemerleri, kabartma olarak Rumi geçmelerle ve köşebentleri, kabartma, lale ve karanfil motifleriyle bezelidir.
En güzel cami halısı dış avlusu olup bunun çevresi pencereli duvarlarla çevrilidir. Bu avulya 3 ü cephede olmak üzere, 8 kapıdan girilir. Şadırvan avlusu, 26 adet granit mermer ve porfir sütuna oturtulmuş, 30 kubbeyle çevrili geniş alandır. Mermer döşemeli bu geniş sahanın ortasında 6 mermer sütunlu şadırvan, sahanın azametini gösterir. Şadırvanın kemerleri, kabartma olarak Rumi geçmelerle ve köşebentleri, kabartma, lale ve karanfil motifleriyle bezelidir.
Termal Etiket Eco Termal etiket, yüzeyinde hami bir katman bulunmayan miktar çeşididir. Kumbara üzerine termal lamine edilmesi sonucunda oluşmaktadır. Kullanılan barkod yazıcının baş bölgesindeki ısı beraberlik birlikte termal sıvılaşma özelliği gösterir dahi bu şekilde Eco termal etiketin üzerine baskı alınır. Bu termal etiketlere yumruk termal olarak (ısıyla) yapılır ve yerde yüzden ribon kullanılmaz. Ribon kullanımı olmadığı için tahakküm maliyeti sıfıra yakındır.
Dijital Baskı ve baskı etiketi teknolojileri geliştikçe firmaların büyük ebatlı etiket ihtiyaçlarına da dijital çözümler sunulmaya başlamıştır. Böylece, birbirinden canlı renklerin ve kusursuz çizgilerin hakimiyetindeki büyük ebatlı dijital baskı etkileri; kurumsal firmaların reklam kampanyalarındaki en iddialı unsurlarına dönüşmüştür.