Logo Logo
  • Ana Sayfa
  • Hakkında
  • Kategoriler
    • Genel
    • İstatistik
    • Makine Öğrenme
    • Model Geliştirme
    • Sağlık
    • Teknoloji
  • Tüm Yazılarım
  • İletişim

İletişim

  • Email buluttevfik@gmail.com

Site Haritası

  • Ana Sayfa
  • Hakkında
  • İletişim

Sosyal Medya Adresleri

R Programlama Diliyle Sınıflandırma Problemlerinin Çözümünde Karar Ağacı Algoritmaları Üzerine Bir Vaka Çalışması: A Case Study on Decision Tree Algorithms in Solving Classification Problems with R Programming Language

  • ANA SAYFA
  • Blog Details
Mayıs 25 2020
  • Makine Öğrenme

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:

  1. Online veya offline olarak dokümanlarda analize konu edilecek veri metin verisi ise nasıl analiz edilecektir?
  2. 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?
  3. 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:

  1. İmalat sanayi
  2. Astronomi
  3. Moleküler biyololoji
  4. Biyomedikal mühendisliği
  5. Eczacılık
  6. Planlama
  7. 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.

Kaynak: Stanford Üniversitesi

Ş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:

  1. sepal length (cm) : Veri tipi nicel ve süreklidir.
  2. sepal width (cm) : Veri tipi nicel ve süreklidir.
  3. petal length (cm) : Veri tipi nicel ve süreklidir.
  4. petal width (cm) : Veri tipi nicel ve süreklidir.
  5. 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 setiİndir

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.

Karşılaştırmalı Sonuçlarİndir

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.

R Programlama Diliyle Sınıflandırma Problemlerinin Çözümünde Rastgele Orman Algoritması Üzerine Bir Vaka Çalışması

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
Önceki yazı Sonraki Yazı
AccuracyÇapraz KontrolClusterClusteringComplexity ParameterConfusion MatrixCPCross Validation TestData MainingDecision NodeDecision TreeDenetimli ÖğrenmeDenetimsiz ÖğrenmeDoğrulukDoğruluk OranıEstimateExploratory Data AnalysisF1K-MeansK-medoidlerK-medoidsKarar AğaçlarıKarar DüğümleriKarışıklık ParametresiKeşifsel Veri AnaliziKeskinlikKümeiçi VaryansKümelemeNodeÖzgünlükPrecisionRandom ForestRastgele Orman AlgoritmasıRFSupervised LearningTahminTerminalUnsupervised LearningVerVeri MadenciliğiYeniden Örnekleme

Yorum Yaz Cevabı iptal et

Son Yazılar

  • Kanada Sağlık Sisteminde Bekleme Süreleri
  • Araştırma Metodolojisi Notları-II
  • Araştırma Metodolojisi Notları-I
  • Microsoft Excel’de Bulut Endeks-Beta [BE-β] Simülasyonu
  • R’da Statik ve Dinamik Haritalama Vaka Çalışmaları: Türkiye Örneği

Son Yorumlar

  1. Küresel İnovasyon Endeksi 2021 Yılı Raporu ve Türkiye - winally.com - Küresel İnovasyon Endeksi’nde Türkiye Ne Durumda?
  2. R’da Birliktelik Kuralları | canözkan - Apriori Algoritması Üzerine Bir Vaka Çalışması: A Case Study on Apriori Algorithm
  3. Tevfik BULUT - Python’da Şans Oyunları Perspektifinden Olasılık : Probability from Perspective of the Chance Games in Python
  4. Ahmet Aksoy - Python’da Şans Oyunları Perspektifinden Olasılık : Probability from Perspective of the Chance Games in Python
  5. Tevfik BULUT - Z Tablosuna Göre Güven Aralığının Hesaplanmasına Yönelik Bir Simülasyon Çalışması: A Simulation Study for Calculating Confidence Interval by Z Table

Arşivler

  • Ocak 2023
  • Ekim 2022
  • Eylül 2022
  • Nisan 2022
  • Mart 2022
  • Ekim 2021
  • Eylül 2021
  • Ağustos 2021
  • Temmuz 2021
  • Haziran 2021
  • Mayıs 2021
  • Nisan 2021
  • Şubat 2021
  • Ocak 2021
  • Aralık 2020
  • Kasım 2020
  • Ekim 2020
  • Eylül 2020
  • Ağustos 2020
  • Temmuz 2020
  • Haziran 2020
  • Mayıs 2020
  • Nisan 2020
  • Mart 2020
  • Şubat 2020
  • Ocak 2020
  • Aralık 2019
  • Kasım 2019
  • Ekim 2019
  • Eylül 2019
  • Ağustos 2019
  • Mayıs 2019
  • Şubat 2019
  • Aralık 2018
  • Eylül 2018
  • Ağustos 2018
  • Temmuz 2018
  • Mayıs 2018
  • Nisan 2018
  • Ekim 2017
  • Temmuz 2017
  • Haziran 2017
  • Mayıs 2017
  • Ocak 2017

Kategoriler

  • Genel
  • İstatistik
  • Makine Öğrenme
  • Model Geliştirme
  • Sağlık
  • Teknoloji

Kategoriler

  • Genel
  • İstatistik
  • Makine Öğrenme
  • Model Geliştirme
  • Sağlık
  • Teknoloji

Etiketler

Accuracy Basit Tesadüfi Örnekleme Bernoulli Olasılık Dağılımı Confusion Matrix Coronavirus Doğruluk Doğruluk Oranı Dünya Sağlık Örgütü EDA Epidemi Epidemiyology Epidemiyoloji Exploratory Data Analysis Exploratory Data Analysis (EDA) F1 Forecast Keşifsel Veri Analizi Kitle Olasılık Fonksiyonu Koronavirüs Koronavirüs Salgını Olasılık Olasılıklı Örneklem OSB Pandemi Point Estimation Point Forecast Prevalance Prevalans Probability Sampling R Recall Salgın Sağlık Bakanlığı Simple Random Sampling Tahmin TBATS TURKEY TÜRKİYE Veri Madenciliği WHO World Health Organization Yapay Zeka ÇKKV Örneklem Örneklem Büyüklüğü
Logo

Burada, gazete ve dergilerde yayınlanan çalışmalarımın tamamı çalışmakta olduğum kurumdan bağımsız olarak özel hayatımda yaptığım çalışmalardır. Dolayısıyla, burada yer alan çalışmalardan emeğe saygı adına kaynak gösterilmesi suretiyle azami ölçüde herkes yararlanabilir.

Site Haritası

  • Ana Sayfa
  • Hakkında
  • Blog
  • İletişim

Linkler

  • winally.com

Bana Ulaşın

Bu sayfa, bazı temel bilgilerin ve bir iletişim formunun yer aldığı bir iletişim sayfasıdır. Suç teşkil edecek, yasadışı, tehditkar, rahatsız edici, hakaret ve küfür içeren, aşağılayıcı, küçük düşürücü, kaba, müstehcen, ahlaka aykırı, kişilik haklarına zarar verici ya da benzeri niteliklerde içeriklerden doğan her türlü mali, hukuki, cezai, idari sorumluluk içeriği gönderen Kişilere aittir.

  • Email: buluttevfik@gmail.com

© Copyright 2022 Tevfik Bulut