Giriş
Günümüzde veri madenciliği uygulamalarının yaygınlaşması ve büyük veri kavramının öne çıkmasıyla birlikte analiz metotları da değişmiştir.
Bugüne kadar genellikle bulut (cloud) veri tabanları üzerindeki veri setleri indirilerek analize konu ediliyordu. Ancak gelişen teknoloji veri madenciliği yöntemlerinde de önemli değişiklikler ve bazı soruları beraberinde getirmiştir. Bu sorulardan bazıları şöyledir:
- Online veya offline olarak dokümanlarda analize konu edilecek veri metin verisi ise nasıl analiz edilecektir?
- Aynı zamanda metin verisiyle birlikte numerik veri içiçe geçmişse, yani hibrit bir veri türüyle karşı karşıya kalınırsa nasıl bir yöntem izlenecektir?
- Ya da xlsx, txt, csv ve diğer uzantılı dokümanlar online bir platform üzerinde ise nasıl analiz edilecektir?
İşte bu soruların cevabı istatistik biliminden de beslenerek ancak ondan öte bilgisayar mühendisliği alanına giren veri madenciliğinde yatmaktadır. Bu soruların arttırılması mümkündür.
Veri madenciliğin temel amacı veriyi analize uygun hale getirmektir. Bu amaçla geliştirilmiş bir çok programlama dili bulunmaktadır. Örnek uygulama yapılacak bu çalışma kapsamında kullanılacak programlama dili R olmakla birlikte Python, Julia gibi diğer programlama dilleri de kullanılabilmektedir.
Karar ağaçları hem sınıflandırma (kategorik veriler) hemde regresyon (numerik veriler) problemlerin çözümünde kullanılabilen veri madenciliği ve makine öğrenme algoritmasıdır. Rastgele Orman algoritmaları gibi çok güçlü algoritmalar olan karar ağaçları kompleks ve büyük veri setlerinin çözümünde oldukça yararlanılan denetimli öğrenme (supervised learning) algoritmaları ailesine aittir. Bunun yanında karar ağaçları rastgele orman (random forests) algoritmalarının temel bileşenleridir.
Karar ağaçları karar destek aracı olması yanında alınan kararların görselleştirilmesine de olanak tanır. Bir karar ağacının mimarisi Şekil 1’de verilmiştir.
Şekil 1: Karar Ağacının Mimarisi (Decision Tree Architecture)

Bir karar ağacı temel olarak 4 ana düğüm (node)’den oluşur. Bunlar sırasıyla kök (root) düğüm, iç düğümler ve yaprak (leaf) düğümlerden oluşur. Bu düğümler dallar aracılığıyla birbirine bağlanır. Şekil 1’deki karar ağacı iki daldan oluşmaktadır. Terminal ve yaprak düğümleri karar düğümleridir. Şekil 1’de kök düğümden sonraki iki kısım dalları, dalların uzantıları ise yaprakları göstermektedir. Biçimsel olarak ağaçtan, işleyiş olarak ise insan karar verme süreçinden ilham almaktadır.
Karar ağaçlarında hedef değişken (target variable) kategorik ise sınıflandırma algoritması, numerik (sürekli veya kesikli) değişken ise regresyon algoritması kullanılır. Karar ağaçları pek çok alanda kullanılmakla birlikte aşağıda belirtilen bir çok alanda kendine uygulama alanı bulmaktadır:
- İmalat sanayi
- Astronomi
- Moleküler biyololoji
- Biyomedikal mühendisliği
- Eczacılık
- Planlama
- Tıp
Karar ağacı algoritmaları hem sınıflandırma (classification) hem de regresyon (regression) problemlerinin çözümünde kullanılan algoritmalardır. Burada aslında sınıflandırma ve regresyondan kasıt tahmin edilecek bağımlı veya hedef değişkenin veri tipi ifade edilmektedir. Sınıflandırma ve regresyon için kullanılan veri tipleri Şekil 2’de sunulmuştur. Cevap değişkeni ya da bağımlı değişken kategorik ise karar ağaçlarında sınıflandırma, bağımlı değişken nicel ise karar ağaçlarında regresyon problemini çözmüş oluyorur.
Şekil 2: Karar Ağaçlarında Problem Sınıfına Göre Veri Türleri

Karar ağaçlarında kurulan modelin veya modellerin performansını değerlendirmede kullanılan hata metrikleri ise genel itibariyle Şekil 3’te verilmiştir. Şekil 3’te yer verilen hata metrikleri gerek makine öğrenme gerekse derin öğrenme modellerinin performansının testinde sıklıkla kullanılmaktadır.
Şekil 3: Hata Metrikleri

Şekil 3’te sınıflandırma problemlerinin çözümünde kullanılan hata metriklerini şimdi de ele alalım. Karışıklık matrisi (confusion matrix) olarak adlandırılan bu matris sınıflandırma problemlerinin çözümünde hata metriklerini ortaya koyarak kurulan modelin veya modellerin hata oranını değerlendirmektedir. Hata matrisinin makine ve derin öğrenme metotlarının değerlendirilmesinde sıklıkla kullanıldığı görülmektedir. Aşağıda yer alan tabloda sınıflandırma problemlerinde hata metriklerinin hesaplanmasına esas teşkil eden tablo verilmiştir. Bu tabloyla sınıflandırma hataları hesaplanabilmektedir. Tabloda yer verilen Tip 1 hata (Type 1 error) istatistikte alfa hatasını göstermektedir. Tip 1 hata H0 hipotezi (null hpypothesis) doğru olduğu halde reddedilmesidir. Tabloda Tip 2 hata (Type II error) olarak adlandırılan hata ise istatistikte Beta hatası olarak da bilinmektedir. Tip 2 hata ise H0 hipotezi (null hpypothesis) yanlış olduğu halde kabul edilmesidir.

Şekil 3’te de yer verildiği üzere literatürde sınıflandırma modellerinin performansını değerlendirmede aşağıdaki metriklerden yaygın bir şekilde yararlanıldığı görülmektedir.
- Doğruluk (Accuracy): TP+TN / TP+TN+FP+FN eşitliği ile hesaplanır. Modelin genel performansını ortaya koyar. Bu sınıflandırma metriği ile aslında biz informal bir şekilde dile getirirsek doğru tahminlerin toplam tahminler içindeki oranını hesaplamış oluyoruz.
- Kesinlik (Precision): TP / TP+FP eşitliği ile hesaplanır. Doğru tahminlerin ne kadar kesin olduğunu gösterir.
- Geri çağırma (Recall): TP / TP+FN eşitliği ile hesaplanır. Gerçek pozitif örneklerin oranını verir.
- Özgünlük (Specificity): TN / TN+FP eşitliği ile hesaplanır. Gerçek negatif örneklerin oranını gösterir.
- F1 skoru : 2TP / 2TP+FP+FN eşitliği ile hesaplanır. Dengesiz sınıflar için yararlı hibrit bir metrik olup, kesinlik (precision) ve geri çağırma (recall) skorlarının ağırlıklı ortalamasını ifade etmektedir.
- ROC (Receiver operating characteristic): Yukarıda karışıklık matrisinde belirtilen parametrelerden yararlanılarak hesaplanır. ROC eğrisi olarak da adlandırılmaktadır. ROC eğrileri, herhangi bir tahmin modelinin doğru pozitifler (TP) ve negatifler (TN) arasında nasıl ayrım yapabileceğini görmenin güzel bir yoludur. Sınıflandırma modellerinin performansını eşik değerler üzerinden hesaplar. ROC iki parametre üzerinden hesaplanır. Doğru Pozitiflerin Oranı (TPR) ve Yanlış Pozitiflerin Oranı (FPR) bu iki parametreyi ifade eder. Burada aslında biz TPR ile Geri Çağırma (Recall), FPR ile ise 1-Özgünlük (Specificity)‘ü belirtiyoruz.
- Cohen Kappa: Kategorik cevap seçenekleri arasındaki tutarlılığı ve uyumu gösterir. Cohen, Kappa sonucunun şu şekilde yorumlanmasını önermiştir: ≤ 0 değeri uyumun olmadığını, 0,01–0,20 çok az uyumu, 0,21-0,40 az uyumu, 0,41-0,60 orta, 0,61-0,80 iyi uyumu ve 0,81–1,00 çok iyi uyumu göstermektedir. 1 değeri ise mükemmel uyum anlamına gelmektedir.
Metodoloji ve Uygulama Sonuçları
Bu kısımda kullanılan veri setine ve adım adım karar ağacı sınıflandırma algoritmalarının uygulamasına yer verilmiştir. Analizde R programlama dili kullanılmıştır. Uygulamaya esas veri seti “iris” bitkisi veri seti olup 150 gözlem ve 6 değişkenden oluşmaktadır. Bu veri seti R’da bulunmaktadır. Veri setindeki değişkenler sırasıyla şöyledir:
- sepal length (cm) : Veri tipi nicel ve süreklidir.
- sepal width (cm) : Veri tipi nicel ve süreklidir.
- petal length (cm) : Veri tipi nicel ve süreklidir.
- petal width (cm) : Veri tipi nicel ve süreklidir.
- species (türler) : Veri tipi nitel ve nominaldir.
— Iris Setosa
— Iris Versicolour
— Iris Virginica
Metodoloji ve uygulama sonuçları başlığı altında yapılan uygulamalar olabilecek en yalın şekilde ele alınmaya çalışılmıştır. Çalışmada amaç species (bitki türleri) hedef değişkenini diğer bağımlı değişkenler kullanılarak tahmin etmektir. Analize başlamadan önce analiz için yüklenecek R kütüphaneleri verelim. Ardından keşifsel veri analizi (EDA) ile veri setini tanıyalım.
Yüklenecek kütüphaneler
kütüphaneler = c("dplyr","tibble","tidyr","ggplot2","formattable","readr","readxl","xlsx", "pastecs","randomForest", "aod", "fpc", "DescTools","factoextra","dendextend", "viridis","ggpurr","psych","writexl","ggfortify", "rattle","caret","yardstick","MASS")
sapply(kütüphaneler, require, character.only = TRUE)
Veri setinin xlsx dosyasına yazdırılması
İhtiyaç duymanız halinde fonksiyonu ile birlikte yeniden kodlanan veri seti aşağıdaki kod yardımıyla xlsx uzantılı olarak excel dosyasına yazdırılmıştır.
#veri setinin xlsx dosyasına yazdırılması
df1<-iris
write_xlsx(df1, "veriseti.xlsx")
Yukarıdaki R kod bloğunun çalıştırılması ile edilen veri seti dosyası xlsx uzantılı olarak aşağıda verilmiştir.
Veri setindeki değişkenlerin tanımlayıcı istatistikleri
df1<-iris
ti<-describe(iris[,-5])
formattable(tibble(Değişken=names(df1[,-5]), Aralık=ti$range, Ort=ti$mean, Medyan=ti$median, Ssapma=ti$sd, Carpıklık=ti$skew, Basıklık=ti$kurtosis) %>% mutate_if(is.numeric, round, 1))
#iris bitki türüne göre tanımlayıcı istatistikler
describe.by(df1, df1$Species)
formattable(head(df1,10))
Yukarıdaki R kod bloğunun çalıştırılmasından sonra elde edilen tanımlayıcı istatistikler aşağıdaki tabloda verilmiştir.

Yukarıdaki R kod bloğunun çalıştırılmasından sonra elde edilen iris bitkisi türlerine göre tanımlayıcı istatistikler detaylı bir şekilde aşağıdaki tabloda verilmiştir.
Descriptive statistics by group
group: setosa
vars n mean sd median trimmed mad min max range skew
Sepal.Length 1 50 5.01 0.35 5.0 5.00 0.30 4.3 5.8 1.5 0.11
Sepal.Width 2 50 3.43 0.38 3.4 3.42 0.37 2.3 4.4 2.1 0.04
Petal.Length 3 50 1.46 0.17 1.5 1.46 0.15 1.0 1.9 0.9 0.10
Petal.Width 4 50 0.25 0.11 0.2 0.24 0.00 0.1 0.6 0.5 1.18
Species* 5 50 1.00 0.00 1.0 1.00 0.00 1.0 1.0 0.0 NaN
kurtosis se
Sepal.Length -0.45 0.05
Sepal.Width 0.60 0.05
Petal.Length 0.65 0.02
Petal.Width 1.26 0.01
Species* NaN 0.00
---------------------------------------------------------
group: versicolor
vars n mean sd median trimmed mad min max range skew
Sepal.Length 1 50 5.94 0.52 5.90 5.94 0.52 4.9 7.0 2.1 0.10
Sepal.Width 2 50 2.77 0.31 2.80 2.78 0.30 2.0 3.4 1.4 -0.34
Petal.Length 3 50 4.26 0.47 4.35 4.29 0.52 3.0 5.1 2.1 -0.57
Petal.Width 4 50 1.33 0.20 1.30 1.32 0.22 1.0 1.8 0.8 -0.03
Species* 5 50 2.00 0.00 2.00 2.00 0.00 2.0 2.0 0.0 NaN
kurtosis se
Sepal.Length -0.69 0.07
Sepal.Width -0.55 0.04
Petal.Length -0.19 0.07
Petal.Width -0.59 0.03
Species* NaN 0.00
---------------------------------------------------------
group: virginica
vars n mean sd median trimmed mad min max range skew
Sepal.Length 1 50 6.59 0.64 6.50 6.57 0.59 4.9 7.9 3.0 0.11
Sepal.Width 2 50 2.97 0.32 3.00 2.96 0.30 2.2 3.8 1.6 0.34
Petal.Length 3 50 5.55 0.55 5.55 5.51 0.67 4.5 6.9 2.4 0.52
Petal.Width 4 50 2.03 0.27 2.00 2.03 0.30 1.4 2.5 1.1 -0.12
Species* 5 50 3.00 0.00 3.00 3.00 0.00 3.0 3.0 0.0 NaN
kurtosis se
Sepal.Length -0.20 0.09
Sepal.Width 0.38 0.05
Petal.Length -0.37 0.08
Petal.Width -0.75 0.04
Species* NaN 0.00
Yukarıdaki R kod bloğunun çalıştırılmasından sonra elde edilen veri setinin ilk 10 satırı aşağıda verilmiştir.

Veri setindeki değişkenlerin özellikleri
str(df1)
Yukarıdaki R kod bloğunun çalıştırılmasından sonra veri setindeki değişkenlerin veri tipi ve faktör (kategori) seviyeleri aşağıda verilmiştir.
'data.frame': 150 obs. of 5 variables:
$ Sepal.Length: num 5.1 4.9 4.7 4.6 5 5.4 4.6 5 4.4 4.9 ...
$ Sepal.Width : num 3.5 3 3.2 3.1 3.6 3.9 3.4 3.4 2.9 3.1 ...
$ Petal.Length: num 1.4 1.4 1.3 1.5 1.4 1.7 1.4 1.5 1.4 1.5 ...
$ Petal.Width : num 0.2 0.2 0.2 0.2 0.2 0.4 0.3 0.2 0.2 0.1 ...
$ Species : Factor w/ 3 levels "setosa","versicolor",..: 1 1 1 1 1 1 1 1 1 1 ...
Veri setindeki eksik gözlemlerin (NAs)’nin tespiti
sapply(df1, function(x) sum(is.na(x)))
Yukarıdaki R kod bloğunun çalıştırılmasından sonra elde edilen çıktı aşağıda verilmiştir. Veri setinde eksik gözlem (missing data) bulunmamaktadır.
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
0 0 0 0 0
Veri setinin eğitilecek veri setine ve test veri setine ayrılması
Bu kısımda basit tekrarsız tesadüfi örnekleme (SRS without replacement) yöntemi kullanılarak veri setindeki gözlemlerin % 70’i eğitilecek veri setine, % 30 ise test edilecek veri setine atanmıştır. Veri setinin eğitilecek veri seti ve test veri setine ayrılmasında genel olarak 70:30 kuralı uygulansa da bu kuralın mutlak olmadığı unutulmamalıdır. Veri setindeki gözlem sayısına göre 70:30 kuralı değişiklik gösterebilmektedir. Veri setindeki gözlem sayısı çok azsa 60:40, veri setindeki gözlem sayısı çok fazla ise 80:20 ve hatta 90:10 olabilmektedir. Şimdi soru burada şu olabilir; neden biz 80:20 veya 90:10 olarak belirliyoruz? Genel olarak buna verilebileceğim cevap şu: Bilgisayar işlemcisine bağlı olarak eğer çok yüksek gözlem sayıları ile çalışıyorsanız bu işlem çok uzun sürmesi kuvvetle muhtemeldir ki bu durumda test veri setinin oranını düşürmek analizinizi hızlandırır ve daha çabuk sonuç alırsınız.
set.seed(111)
orneklem<- sample(1:NROW(df1), NROW(df1)*0.7)
train <- df1[orneklem, ]
test <- df1[-orneklem, ]
Modelin kurulması
model <- rpart(formula = Species ~ .,data = df1, method = "class")
model
Yukarıdaki R kod bloğunun çalıştırılmasından sonra elde edilen model sonuçları aşağıda verilmiştir.
n= 150
node), split, n, loss, yval, (yprob)
* denotes terminal node
1) root 150 100 setosa (0.33333333 0.33333333 0.33333333)
2) Petal.Length< 2.45 50 0 setosa (1.00000000 0.00000000 0.00000000) *
3) Petal.Length>=2.45 100 50 versicolor (0.00000000 0.50000000 0.50000000)
6) Petal.Width< 1.75 54 5 versicolor (0.00000000 0.90740741 0.09259259) *
7) Petal.Width>=1.75 46 1 virginica (0.00000000 0.02173913 0.97826087) *
Kurulan modele ilişkin karar ağacı
rpart.plot(model

Değişkenlerin önem düzeyleri
onem<-model$variable.importance
agirlik<-as_tibble(onem)
onemduzey<-cbind(Değişken= names(onem), "Önem Düzeyleri"=agirlik) %>% as_tibble() %>% rename(Düzey=value)
formattable(onemduzey,
list(formatter(
"span", style = ~ style(color = "grey",font.weight = "bold")),
`Düzey` = color_bar("#00FF7F")
))
Yukarıdaki kod bloğunun çalıştırılmasından sonra elde edilen modeldeki değişkenlerin önem düzeyleri büyükten küçüğe doğru aşağıdaki tabloda verilmiştir.

Karışıklık parametresi (complexity parameter: CP)’nin hesaplanması
printcp(model) # CP sonuçlarını diğer hata metrikleriyle verme
plotcp(model) # CP sonuçları grafiğe taşıma
Yukarıdaki kod bloğunun çalıştırılmasından sonra kurulan modele ilişkin CP değerleri aşağıda verilmiştir.
Classification tree:
rpart(formula = Species ~ ., data = df1, method = "class")
Variables actually used in tree construction:
[1] Petal.Length Petal.Width
Root node error: 100/150 = 0.66667
n= 150
CP nsplit rel error xerror xstd
1 0.50 0 1.00 1.18 0.050173
2 0.44 1 0.50 0.75 0.061237
3 0.01 2 0.06 0.10 0.030551
Yukarıdaki kod bloğunun çalıştırılmasından sonra kurulan modele ilişkin CP değerleri aşağıdaki grafikte verilmiştir.

Tahmin edilen değerler ile gözlem değerlerinin karşılaştırılması
tahmin<- predict(object = model, newdata = test, type = "class")
karsilastirma<-tibble(Gozlem=as.factor(test$Species), Tahmin=tahmin)
#ilk ve son 10 tahmin değerini gözlem değerleriyle karşılaştırma
ilk10<-head(karsilastirma, 10) %>% rename(Gozlemİlk_10=Gozlem, Tahminİlk_10=Tahmin)
son10<-tail(karsilastirma, 10) %>% rename(GozlemSon_10=Gozlem, TahminSon_10=Tahmin)
formattable(cbind(Id=seq(1,10),ilk10, son10))
Yukarıdaki R kod bloğunun çalıştırılmasından sonra 1 nolu modelden elde edilen ilk ve son 10 sınıflandırma tahmini değerleri gözlemlenen sınıflandırma değerleri ile birlikte aşağıdaki tabloda karşılaştırmalı olarak verilmiştir.

Karışıklık matrisi (confusion matrix)’nin oluşturulması
Karışıklık matrisi kurulan model ile tahmin edilen hedef değişken bulgularını gözlemlenen hedef değişken bulguları ile karşılaştırır. Bu matris bir nevi sınıflandırma tablosu olup, gerçekleşen sınıflandırma bulguları ile tahmin edilen sınıflandırma bulgularının frekansı (n)’nı verir.
tahmin<- predict(object = model,
newdata = test, type = "class")
karsilastirma<-tibble(Gozlem=as.factor(test$Species), Tahmin=tahmin)
cm <- karsilastirma %>%
conf_mat(Gozlem, Tahmin)
#karışıklık matrisi (confusion matrix) grafiği
autoplot(cm, type = "heatmap)
Yukarıdaki R kod bloğunun çalıştırılmasından sonra elde edilen karışıklık matrisinin grafiği ise aşağıda verilmiştir.

Hata metrikleri
Kurulan modele ait sınıflandırma hata parametrelerinin elde edilmesine yönelik yazılan R kod bloğu aşağıda verilmiştir.
confusionMatrix(karsilastirma$Gozlem, karsilastirma$Tahmin
Yukarıdaki R kod bloğunun çalıştırılmasından sonra elde edilen hata metrikleri bir bütün olarak hata metrikleri ile birlikte aşağıda verilmiştir. karar ağaçları metoduyla kurulan model iris bitki türlerini yaklaşık % 98 doğruluk (accuracy) oranı ile tahmin etmektedir. Uyumu gösteren Kappa katsayısı ise bu modelde 0,96 olup, tahmin edilen iris bitki türleri ile gözlemlenen bitki türleri arasında mükemmele yakın bir uyum olduğu görülmektedir. Bu bulgu aynı zamanda doğruluk oranını da doğrular niteliktedir.
Confusion Matrix and Statistics
Reference
Prediction setosa versicolor virginica
setosa 15 0 0
versicolor 0 13 0
virginica 0 1 16
Overall Statistics
Accuracy : 0.9778
95% CI : (0.8823, 0.9994)
No Information Rate : 0.3556
P-Value [Acc > NIR] : < 2.2e-16
Kappa : 0.9666
Mcnemar's Test P-Value : NA
Statistics by Class:
Class: setosa Class: versicolor Class: virginica
Sensitivity 1.0000 0.9286 1.0000
Specificity 1.0000 1.0000 0.9655
Pos Pred Value 1.0000 1.0000 0.9412
Neg Pred Value 1.0000 0.9688 1.0000
Prevalence 0.3333 0.3111 0.3556
Detection Rate 0.3333 0.2889 0.3556
Detection Prevalence 0.3333 0.2889 0.3778
Balanced Accuracy 1.0000 0.9643 0.9828
Gözlem ve tahmin sınıflandırma sonuçlarının xlsx dosyasına yazdırılması
tahmin<- predict(object = model, newdata = test, type = "class")
karsilastirma<-tibble(Gozlem=as.factor(test$Species), Tahmin=tahmin)
write_xlsx(karsilastirma, "karsilastirma1.xlsx")
Yukarıdaki R kod bloğunun çalıştırılmasıyla elde edilen tahmin sonuçları gözlem değerleriyle birlikte xlsx uzantılı olarak aşağıdan indirebilirsiniz.
Ağaç budama işlemi (pruning)
Bu işlemde optimal karar ağaçlarına karar vermek için karışıklık parametre (CP) değeri en düşük olan değer alınarak modele sokularak kurulan model iyileştirilir. Kurulan modelin özetinde başta CP değerleri verilmişti. Ancak aşağıda yazılan küçük bir kodla tekrar verebiliriz.
#CP tablosu
cptablo<-as_tibble(model$cptable)
formattable(cptablo,
list(formatter(
"span", style = ~ style(color = "grey",font.weight = "bold")),
`CP` = color_bar("#FF0000")
))
#min CP değeri
model$cptable[which.min(model$cptable[,"xerror"]),"CP"]
Yukarıdaki R kod bloğunun çalıştırılmasından sonra elde edilen CP tablosu aşağıda verilmiştir.

Tabloda görüleceği üzere minimum CP değeri 0,01’dir. Ancak yukarıdaki kod bloğunda belirtildiği üzere doğrudan minimum CP değeri bulunmak istenirse kod bloğunun son satırındaki kodun yazılması yeterlidir.
Minimum CP değerini bulduktan sonra şimdi ağaç budama işlemini yapabiliriz aşağıda yazılan kod bloğu ile.
#minimum CP değeri
minimumcp<-model$cptable[which.min(model$cptable[,"xerror"]),"CP"]
# pruning the tree
budama<- prune(model, cp=minimumcp)
budama
#budanmış karar ağacını çizme
fancyRpartPlot(budama, uniform=TRUE,main="Budanmış Karar Ağacı")
Yukarıdaki R kod bloğu çalıştırıldıktan sonra budama işlemi yapılmış karar ağacı aşağı verilmiştir.

Budama işleminden sonra karışıklık matrisi ve hata metrikleri
Kurulan modelin budanmasından sonra sınıflandırma hata parametrelerinin elde edilmesine yönelik yazılan R kod bloğu aşağıda verilmiştir.
budama<- prune(model, cp=minimumcp)
budamatahmin<- predict(budama, test, type = 'class')
bkarsilastirma<-tibble(Gozlem=as.factor(test$Species), Tahmin=budamatahmin)
cm<-confusionMatrix(bkarsilastirma$Gozlem, bkarsilastirma$Tahmin)
cm
Yukarıdaki R kod bloğunun çalıştırılmasından sonra elde edilen hata metrikleri bir bütün olarak hata metrikleri ile birlikte aşağıda verilmiştir. karar ağaçları metoduyla kurulan model iris bitki türlerini yaklaşık % 98 doğruluk (accuracy) oranı ile tahmin etmektedir. Uyumu gösteren Kappa katsayısı ise bu modelde 0,96 olup, tahmin edilen iris bitki türleri ile gözlemlenen bitki türleri arasında mükemmele yakın bir uyum olduğu görülmektedir. Bu bulgu aynı zamanda doğruluk oranını da doğrular niteliktedir. Budama işleminden sonra ve öncesi elde edilen doğruluk oranı, Kappa katsayı ve karışıklık matrisi değerleri aynıdır. Sonuç olarak budama işlemi (pruning) başlangıçta kurulan modelde ilave bir iyileştirme yapmamıştır.
Confusion Matrix and Statistics
Reference
Prediction setosa versicolor virginica
setosa 15 0 0
versicolor 0 13 0
virginica 0 1 16
Overall Statistics
Accuracy : 0.9778
95% CI : (0.8823, 0.9994)
No Information Rate : 0.3556
P-Value [Acc > NIR] : < 2.2e-16
Kappa : 0.9666
Mcnemar's Test P-Value : NA
Statistics by Class:
Class: setosa Class: versicolor Class: virginica
Sensitivity 1.0000 0.9286 1.0000
Specificity 1.0000 1.0000 0.9655
Pos Pred Value 1.0000 1.0000 0.9412
Neg Pred Value 1.0000 0.9688 1.0000
Prevalence 0.3333 0.3111 0.3556
Detection Rate 0.3333 0.2889 0.3556
Detection Prevalence 0.3333 0.2889 0.3778
Balanced Accuracy 1.0000 0.9643 0.9828
Sonuç
Bu çalışmada sınıflandırma (classification) probleminin çözümüne yönelik karar ağacı algoritmaları kullanılarak ayrıntılı karşılaştırmalı deneysel bir çalışma yapılmıştır. Ortaya konulan bulgular, sınıflandırma probleminin çok başarılı bir şekilde, diğer bir ifadeyle çok yüksek bir doğruluk oranı ve uyumluluk (Kappa katsayısı) ile çözüme kavuşturulduğu görülmektedir.
Yüksek doğruluk oranı elde edilen bir diğer algoritma olan Rastgele Orman (Random Forest) algoritması kullanarak sınıflandırma problemlerinin çözümüne yönelik yaptığım çalışma ile ilgilenenler için de linki aşağıda verilmiştir.
Yapılan bu çalışma ile özellikle veri bilimi (data science) ile ilgilenen akademi ve saha çalışanlarına önemli bir katkı sunulacağı düşünülmektedir.
Faydalı olması ve farkındalık oluşturması dileğiyle.
Bilimle ve teknolojiyle kalınız.
Saygılarımla.
Not: Kaynak gösterilmeden alıntı yapılamaz veya kopyalanamaz.
Note: It can not be cited or copied without referencing.
Yararlanılan Kaynaklar
- https://www.r-project.org/
- https://doi.org/10.1016/j.jag.2020.102051
- https://rstudio-pubs-static.s3.amazonaws.com/293333_2a434ee651164113831a9d2e799f2f68.html
- https://stanford.edu/~shervine/l/tr/teaching/cs-229/cheatsheet-machine-learning-tips-and-tricks
- https://tevfikbulut.com/2020/05/10/ordinal-lojistik-regres-uzerine-bir-vaka-calismasi-a-case-study-on-ordinal-logistic-regression/
- Predicting the protein structure using random forest approach. Charu Kathuria, Deepti Mehrotra, Navnit Kumar Misra. International Conference on Computational Intelligence and Data Science (ICCIDS 2018).
- http://www.cs.toronto.edu/~fidler/teaching/2015/slides/CSC411/tutorial3_CrossVal-DTs.pdf
- McHugh M. L. (2012). Interrater reliability: the kappa statistic. Biochemia medica, 22(3), 276–282.
- https://bradleyboehmke.github.io/HOML/DT.html
- Lange R.T. (2011) Inter-rater Reliability. In: Kreutzer J.S., DeLuca J., Caplan B. (eds) Encyclopedia of Clinical Neuropsychology. Springer, New York, NY
- https://rpubs.com/ryankelly/dtrees
- https://discuss.analyticsvidhya.com/t/how-does-complexity-parameter-cp-work-in-decision-tree/6589/2
- https://www.theanalysisfactor.com/what-is-an-roc-curve/
- https://developers.google.com/machine-learning/crash-course/classification/roc-and-auc
- https://tevfikbulut.com/2019/02/18/kumeleme-analizleri-uzerine-bir-vaka-calismasi-a-case-study-on-cluster-analysis/
- https://tutorials.iq.harvard.edu/R/Rgraphics/Rgraphics.html
- Kaufman, Leonard, and Peter Rousseeuw. (1990). Finding Groups in Data: An Introduction to Cluster Analysis. https://leseprobe.buch.de/images-adb/5c/cc/5ccc031f-49c1-452f-a0ac-22babc5e252e.pdf
- https://archive.ics.uci.edu/ml/datasets/iris
- https://tevfikbulut.com/2020/05/21/r-programlama-diliyle-regresyon-problemlerinin-cozumunde-rastgele-orman-algoritmasi-uzerine-bir-vaka-calismasi-a-case-study-on-random-forest-rf-algorithm-in-solving-regression-problems-with-r-progr/
- https://tevfikbulut.com/2020/05/14/rastgele-orman-algoritmasina-uzerine-bir-vaka-calismasi-a-case-study-on-random-forest-rf-algorithm/
- https://tevfikbulut.com/2019/12/12/karar-agaci-uzerine-bir-vaka-calismasi/
- https://canvas.harvard.edu/courses/12656/files/3076445/download?verifier=wXW3e25IXRFoW4EgRh4FytKpsivgLeMigRkylOTc&wrap=1
- https://www.python-course.eu/Decision_Trees.php