Topluluk Öğrenme Algoritmalarından Torbalama Algoritması İle Gögüs Kanserinin Tahmini Üzerine Bir Vaka Çalışması: A Case Study on the Prediction of Breast Cancer Using Bagging Algorithm from Ensemble Learning Algorithms
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
R Programlama Diliyle Sınıflandırma Problemlerinin Çözümünde Küme Algoritmaları Üzerine Bir Vaka Çalışması: A Case Study on Cluster Algorithms in Solving Classification Problems with R Programming Language
R Programlama Diliyle Regresyon Problemlerinin Çözümünde Rastgele Orman Algoritması Üzerine Bir Vaka Çalışması: A Case Study on Random Forest (RF) Algorithm in Solving Regression Problems with R Programming Language
R Programlama Diliyle Sınıflandırma Problemlerinin Çözümünde Rastgele Orman Algoritması Üzerine Bir Vaka Çalışması: A Case Study on Random Forest (RF) Algorithm in Solving Classification Problems with R Programming Language
2019 Yılı Yapay Zekâ Endeksi Raporu
An Introduction to Network Analysis (NA or SNA) in R
Approach of Logarithmic Concept [APLOCO]: Logaritmik Konsept Yaklaşımı
Küme Analizleri Üzerine Bir Vaka Çalışması (A Case Study on Cluster Analysis)
Kompleks Ağlarda APLOCO Metodunun Kullanımı Üzerine Bir Vaka Çalışması
Kritik Teknolojiler ve On Birinci Kalkınma Planı
Kuantum Yapay Zekâ
Etiket: Doğruluk Oranı
R’da Poisson ve Negatif Binom Regresyon Yöntemleri Üzerine Bir Vaka Çalışması: A Case Study on Poisson and Negative Binomial Regression Methods in R
Giriş
Regresyon analizi yöntemlerinden biri olan poisson regresyon analiz yöntemi, bağımlı değişkenin ya da cevap değişkeninin
nicel kesikli ve pozitif (sayma sayıları) olduğu bağımlı değişkenler (dependent variables) ile bağımsız değişken veya değişkenler (independent variables) arasındaki ilişkiyi ortaya koyan regresyon analiz yöntemidir.
Genel olarak bağımlı değişkenin veri tipi yapılacak analiz yöntemlerinde belirleyici rol oynamaktadır. Dolayısıyla veri tiplerinin anlaşılması burada önemlidir. Veri tipleri kendi içerisinde Şekil 1’de görüleceği üzere 4 farklı alt sınıfta ele alınabilir.
Şekil 1: Veri Tipleri
Nitel Veri (Qualitative Data)
Şekil 1’de verilen sunulan nitel veri tipi ölçülemeyen ve kategori belirten veri tipi olup, kendi içerisinde temel olarak ikiye ayrılmaktadır. Bu veri tipine alt sınıflandırmalar dikkate alınarak sırasıyla örnek vererek ele alalım.
Nominal veri: İki veya daha fazla cevap kategorisi olan ve sıra düzen içermeyen veri tipi olup, bu veri tipine medeni durum (evli, bekar) ve sosyal güvenlik türü (Bağkur, SSK, Yeşil Kart, Özel Sigorta) örnek gösterilebilir.
Ordinal veri: İki veya daha fazla kategorisi olan ancak sıra düzen belirten veri türüdür. Bu veri tipine örnek olarak eğitim düzeyleri (İlkokul, ortaokul, lise, üniversite ve yüksek lisans), yarışma dereceleri (1. , 2. ve 3.) ve illerin gelişmişlik düzeyleri (1. Bölge, 2. Bölge, 3. Bölge, 4. Bölge, 5. Bölge ve 6. Bölge) verilebilir.
Veri tiplerinden bahsedildikten sonra bu veri tiplerinin cevap değişkeni (bağımlı değişken) olduğu durumlarda seçilecek regresyon analiz yöntemini ele alalım. Temel olarak cevap değişkeni ölçülebilir numerik değişken ise regresyon, değilse sınıflandırma analizi yapıyoruz. Eğer cevap değişkeni nitel ise aslında sınıflandırma problemini çözmek için analizi kullanıyoruz. Cevap değişkeni, diğer bir deyişle bağımlı değişken numerik ise bağımsız değişken veya değişkenlerin çıktı (output) / bağımlı değişken (dependent variable) / hedef değişken (target variable) veya değişkenlerin üzerindeki etkisi tahmin etmeye çalışıyoruz. Buradaki temel felsefeyi anlamak son derece önemlidir. Çünkü bu durum sizin belirleyeceğiniz analiz yöntemi de değiştirecektir. Bağımlı (dependent) değişkenin tipine göre kullanılan regresyon analiz yöntemleri Şekil 2’de genel hatlarıyla verilmiştir.
Şekil 2: Cevap Değişkeninin Veri Tipine Göre Regresyon Analiz Yöntemleri
Modeller oluşturulurken temel amaç, bias ve varyans dengesinin kurulmasıdır. Bu uyumu sağlarsak iyi model uyumu (good-fit) elde etmiş oluruz. Makine öğrenme ve derin öğrenme problemlerinin çözümünde modelleme hatalarına bağlı olarak varyans ve bias değişiklik göstermektedir. Bu iki durum şöyle ele alınabilir:
Eksik model uyumu (under-fitting): Kurulan modelde elde edilen tahmin değerleri gözlem verisine yeterince uyum göstermediğinde ortaya çıkar. Bu durumda varyans düşükken bias yüksektir. Buradan şunu anlamak gerekir: gözlem verisi ile tahmin edilen veri arasındaki fark büyükse, diğer bir deyişle kurulan modelle bağımlı değişken iyi tahmin edilemiyorsa bu durumda under-fitting oluşur. Under-fitting sonraki kısımlarında anlatılan sınıflandırma ve regresyon hata metrikleri ile kolaylıkla ortaya konulabilir.
Aşrı model uyumu (over-fitting): Kurulan modelde eğitilen veri seti (training data set)’yle gözlem verisine aşırı uyum gösterdiğinde ortaya çıkar. Bu durumda varyans yüksekken bias düşüktür.
Bahsedilen bu iki durumu kafamızda daha da canlı tutmak için bias ve varyans ilişkisi Şekil 2’de verilmiştir. Şekil’de biz modeli kurgularken olması gereken durumu gösteren Düşük Varyans-Düşük Bias uyumunu, diğer bir ifadeyle yüksek kesinlik (precision)-yüksek doğruluk (accuracy) hedefliyoruz. Diğer bir deyişle kurguladığımız model (Şekil 2 1 nolu model) ile gözlem değerlerini olabildiğince en yüksek doğruluk oranı ile tahmin ederken aynı zamanda varyansı düşük (yüksek kesinlik (precision)) tutmayı hedefliyoruz. Buna başardığımızda aslında iyi model uyumunu (good-fit) sağlamış ve iyi bir model kurmuş oluyoruz. Eksik model uyumu (under-fitting)’nda ise Şekil 2’de 3 nolu modelde görüleceği üzere elde edilen tahmin değerleri gözlem değerleri (kırmızı alan)’nden uzaklaşmakla birlikte hala tahmin değerleri ile gözlem değerleri arasında farklar, diğer bir deyişle varyans düşüktür. Aşırı model uyumu (over-fitting)’da ise Şekil 2’de 2 nolu modelde görüleceği üzere varyans yüksek iken bias düşüktür. 2 nolu modelde doğru değerler (gözlem değerleri)’i kurulan modelde yüksek doğrulukla (düşük bias=yüksek doğruluk (accuracy) tahmin edilse de gözlem değerleri ile tahmin değerleri arasındaki varyans yüksektir.
Şekil 2: Bias-Varyans İlişkisi
Veri Tipleri
Yükseltme algoritmaları ile sınıflandırma problemi çözüyorsak bağımlı değişkenin ya da cevap değişkeninin veri tipi nitel ve kategoriktir. Ancak, bu yöntem ile regresyon problemini çözüyorsak bağımlı değişkenin ya da cevap değişkeninin veri tipi niceldir. Veri tipleri kendi içerisinde 4 farklı alt sınıfta ele alınabilir. Bu veri tipleri alt sınıflarıyla birlikte Şekil 3’te verilmiştir.
Şekil 3: Veri Tipleri
Nicel Veri (Quantitative Data)
Şekil 3’te sunulan nicel veri tipi ölçülebilen veri tipi olup, kendi içerisinde temel olarak ikiye ayrılmaktadır. Bu veri tipine alt sınıflandırmalar dikkate alınarak sırasıyla örnek verelim.
Sürekli veri (Continous data): Tam sayı ile ifade edilmeyen veri tipi olup, zaman, sıcaklık, beden kitle endeksi, boy ve ağırlık ölçümleri bu veri tipine örnek verilebilir.
Kesikli veri (Discrete Data): Tam sayı ile ifade edilebilen veri tipi olup, bu veri tipine proje sayısı, popülasyon sayısı, öğrenci sayısı örnek verilebilir.
Nitel Veri (Qualitative Data)
Şekil 3’te verilen nitel veri tipi ölçülemeyen ve kategori belirten veri tipi olup, kendi içerisinde temel olarak ikiye ayrılmaktadır. Bu veri tipine alt sınıflandırmalar şöyledir:
Nominal veri: İki veya daha fazla cevap kategorisi olan ve sıra düzen içermeyen veri tipi olup, bu veri tipine medeni durum (evli, bekar) ve sosyal güvenlik türü (Bağkur, SSK, Yeşil Kart, Özel Sigorta) örnek gösterilebilir.
Ordinal veri: İki veya daha fazla kategorisi olan ancak sıra düzen belirten veri türüdür. Bu veri tipine örnek olarak eğitim düzeyleri (İlkokul, ortaokul, lise, üniversite ve yüksek lisans), yarışma dereceleri (1. , 2. ve 3.) ve illerin gelişmişlik düzeyleri (1. Bölge, 2. Bölge, 3. Bölge, 4. Bölge, 5. Bölge ve 6. Bölge) verilebilir.
Veri tiplerinden bahsedildikten sonra bu veri tiplerinin cevap değişkeni (bağımlı değişken) olduğu durumlarda seçilecek analiz yöntemini ele alalım. Temel olarak cevap değişkeni ölçülebilir numerik değişken ise regresyon, değilse sınıflandırma analizi yapıyoruz. Cevap değişkeni, diğer bir deyişle bağımlı değişken numerik ise bağımsız değişken veya değişkenlerin çıktı (output) / bağımlı değişken (dependent variable) / hedef değişken (target variable) veya değişkenlerin üzerindeki etkisini tahmin etmeye çalışıyoruz. Buradaki temel felsefeyi anlamak son derece önemlidir. Çünkü bu durum sizin belirleyeceğiniz analiz yöntemini de değiştirecektir.
Kullanılan analiz yöntemi ile kurulan modelde ya sınıflandırma problemini ya da regresyon problemini çözdüğümüzü ifade etmiştik. Ancak kurulan modellerde çözülen problemin sınıflandırma ya da regresyon oluşuna göre performans değerlendirmesi farklılaşmaktadır. Sınıflandırma problemlerinde kullanılan hata metrikleri ile regresyon hata metrikleri aynı değildir. Bu bağlamda ilk olarak sınıflandırma problemlerinin çözümünde kullanılan hata metriklerini ele alalım.
Sınıflandırma Problemlerinde Hata Metrikleri
Karışıklık matrisi (confusion matrix) olarak 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. Tablo 1’de hata metriklerinin hesaplanmasına esas teşkil eden karışıklık matrisi (confisioun matrix) 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.
Tablo 1: Karışıklık Matrisi (Confusion Matrix)
Kaynak: Stanford Üniversitesi
Tablo 1’de TP: Doğru Pozitifleri, FN: Yanlış Negatifleri, FP: Yanlış Pozitifleri ve TN: Doğru Negatifleri göstermektedir.
Şekil 3’te de yer verildiği üzere literatürde sınıflandırma modellerinin performansını değerlendirmede aşağıdaki hata metriklerinden yaygın bir şekilde yararlanıldığı görülmektedir. Sınıflandırma problemlerinin çözümüne yönelik Yükselme (Boosting: AdaBoost) algoritması kullanarak R’da yapmış olduğum çalışmanın linkini ilgilenenler için aşağıda veriyorum.
Topluluk Öğrenme Algoritmalarından Yükseltme Algoritması İle Gögüs Kanserinin Tahmini Üzerine Bir Vaka Çalışması: A Case Study on the Prediction of Breast Cancer Using Boosting Algorithm from Ensemble Learning Algorithms
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 modellerin perfomansı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.
Sınıflandırma hata metriklerini anlattıktan sonra daha kalıcı olması ve öğrenilmesi adına hazırladığım excel üzerinde bahsedilen bu metriklerin nasıl hesaplandığı gösterilmiştir. Excel dosyasını aşağıdaki linkten indirebilirsiniz.
Sınıflandırma Metrikleri
Regresyon Problemlerinde Hata Metrikleri
Regresyon modellerinin performansını değerlendirmede literatürde aşağıdaki hata metriklerinden yaygın bir şekilde yararlanılmaktadır. Regresyon metrikleri eşitliklerinin verilmesi yerine sade bir anlatımla neyi ifade ettiği anlatılacaktır. Böylece formüllere boğulmamış olacaksınız.
SSE (Sum of Square Error): Tahmin edilen değerler ile gözlem değerleri arasındaki farkların kareleri toplamını ifade eder.
MSE (Mean Square Error): Ortalama kare hatası olarak adlandırılan bu hata tahmin edilen değerler ile gözlem değerleri arasındaki farkların karelerinin ortalamasını ifade eder.
RMSE (Root Mean Square Error): Kök ortalama kare hatası olarak adlandırılan bu hata ortalama kare hatasının karekökünü ifade etmektedir.
MAE (Mean Absolute Error): Ortalama mutlak hata olarak adlandırılan bu hata türü ise tahmin edilen değerler ile gözlem değerleri arasındaki farkların mutlak değerlerinin ortalamasını ifade etmektedir.
MAPE (Mean Absolute Percentage Error): Ortalama mutlak yüzdesel hata olarak adlandırılan bu hata türünde ilk olarak tahmin edilen değerler ile gözlem değerleri arasındaki farkların mutlak değerleri hesaplanır. Daha sonra hesaplanan farkları mutlak değerleri mutlak değerleri alınan gözlem değerlerine bölünür. En son durumda ise elde edilen bu değerlerin ortalaması alınır.
Bias: Tahmin edilen değerler ile gözlem değerleri arasındaki farkların ortalamasıdır. Bu yönüyle ortalama mutlak hata (MAE)’ya benzemektedir.
Regresyon hata metriklerini anlattıktan sonra daha kalıcı olması ve öğrenilmesi adına hazırladığım excel üzerinde bahsedilen bu metriklerin nasıl hesaplandığı gösterilmiştir. Excel dosyasını aşağıdaki linkten indirebilirsiniz.
Regresyon Metrikleri İndir
Çalışma kapsamında R programlama dili içerisinde bulunan “warpbreaks” veri setinde bağımlı değişken olan breaks (mola sayısı) tahmin edilmiştir. Veri seti kullanılarak poisson ve negatif binom regresyon yöntemleriyle regresyon problemi çözülecektir.
Metodoloji ve Uygulama Sonuçları
Poisson Regresyon Yöntemi
Poisson regresyon, lojistik regresyonlar modellerinin genelleştirilmiş şeklidir. Fakat lojistik regresyonda bağımlı değişkenler kategorilerden oluşan belirli cevap seçenekleri ile sınırlıdır.
Regresyon modellerinden poisson ve negatif binom regresyon modelleri regresyon modellerinin özel bir türü olup, bağımlı değişkenin nicel pozitif ve aynı zamanda kesikli olduğu durumlarda kullanılır. Yapılan Covid-19 testlerinin sayısı, vaka sayısı, ölüm sayısı gibi değişken istatistikleri bu modellerde kullanılabilecek değişkenlere örnek verilebilir. Bu modellerde amaç nicel kesikli ve pozitif bağımlı değişkenin bağımsız değişkenlerle tahmin edilmesidir.
Poisson regresyon analizi, bağımlı değişkenin Poisson dağılımı gösterdiğinden hareket etmektedir. Poisson dağılımı Fransız matematikçi Siméon Denis Poisson tarafından geliştirilmiştir. Poisson dağılımı, bir olayın belirli bir zaman veya mekan aralığında kaç kez meydana geldiğini modellemek için kullanılmaktadır.
Poisson dağılımı sağa çarpık (right skew) bir görünüm sergilemekte olup, olasılık dağılım fonksiyonu aşağıdaki eşitlikte verilmiştir. Bu dağılım sürekli dağılımlardan biri olan normal dağılımın aksine kesikli dağılım türlerinden biridir.
Eşitlikte e= Euler’in sabitini ifade etmektedir. Bu katsayı yaklaşık 2,71828’e eşittir. Eşitlikte yer verilen lambda (λ) belirli zaman aralığında meydana gelen vakaların ortalama sayısını göstermektedir. x ise eşitlikte hedeflenen vaka sayısını belirtmektedir. x = 0, 1, 2, …, n > 0 ve 0 < p ≤ 1. Varsayımsal bir örnek vererek konuyu biraz somutlaştıralım.
Örnek: Bir organize sanayi bölgesinde gıda sektöründe üretim yapan firmanın deposunda stoklanan ürünlerin 0,04’nin bozuk olduğu bilinmektedir. Bu depodan tesadüfi seçilen 80 birimden en az 5 tanesinin bozuk olma olasılığını Poisson dağılımından yararlanarak hesaplayalım.
Burada,
p= 0,04
Lambda (λ) = 80*0,04=3,2
Yukarıda belirtilen Poisson kütle olasılık eşitliğinde verilenleri yerine koyarsak
Yapılan işlemi aşağıdaki R kod bloğunda da verelim adım adım hesaplama adımlarını görebilmek açısından.

e<-2.71828 #Euler'in sabiti
sıfır<-(e^-3.2*(3.2)^0)/factorial(0)
bir<-(e^-3.2*(3.2)^1)/factorial(1)
iki<-(e^-3.2*(3.2)^2)/factorial(2)
uc<-(e^-3.2*(3.2)^3)/factorial(3)
dort<-(e^-3.2*(3.2)^4)/factorial(4)
poissonfonksiyon<-sum(sıfır, bir,iki,uc,dort)#f(x): Poisson olasılık dağılım fonksiyonu
round(1-poissonfonksiyon,5)
#Sonuç=0.21939
Lambda (λ) Poisson dağılımı , R’da dpois, ppois ve qpois fonksiyonları ile temsil edilir. dpois yoğunluğu, ppois dağılım fonksiyonunu, qpois çeyreklik fonksiyonu, rpois ise tesadüfi ve tekrarsız atanan sayıları gösterir. İlk olarak rpois fonksiyonunu kullanarak poisson dağılımına uygun lambda değeri 1, popülasyon büyüklüğü (N) 10000 olan gözlem üretelim. Daha sonra poisson regresyon ve dağılımı varsayımlarından biri olan gözlemlerin varyansının gözlemlerin ortalamasına eşit veya yakın olması varsayımını aşağıda yazılan R kod bloğu ile test edip histogramını çizelim.

poisorneklem<-rpois(n=10000, lambda=1)#poisson dağılımına uygun örneklem çekmek
hist(poisorneklem, xlab="", main="Poisson Dağılımı", col="red")
mean(poisorneklem);var(poisorneklem)
Yukarıdaki R kod bloğunun çalıştırılmasından sonra elde edilen Poisson dağılımına ilişkin histogram aşağıdaki grafikte verilmiştir.
Yukarıdaki R kod bloğunun çalıştırılmasından sonra elde edilen Poisson dağılımına ilişkin ortalama 1.0175, varyans ise 1.012895 olup, görüleceği üzere birbirine çok yakındır.
Şimdi de poisson dağılımına uygun olarak aynı popülasyon büyüklüğüne sahip ancak farklı lambda değerleriyle karşılaştırmalı olarak poisson dağılıma grafik üzerinde bakalım. Aşağıda yazılan R kod bloğu ile popülasyon büyüklüğü (N) 1000, lambda düzeyleri ise sırasıyla 1, 1,5, 2, 2,5, 3 ve 3,5 olan poisson eğrileri verilmiştir.

set.seed(61)#Sonuçları sabitlemek için
orneklem<-1000#(N=n)
nd1<-density(rpois(orneklem, lambda=1))
nd2<-density(rpois(orneklem, lambda=1.5))
nd3<-density(rpois(orneklem, lambda=2))
nd4<-density(rpois(orneklem, lambda=2.5))
nd5<-density(rpois(orneklem, lambda=3))
nd6<-density(rpois(orneklem, lambda=3.5))
par(oma = c(0.1, 0.1, 0.1, 0.1))#legendin tablodaki yerini düzenlemek için.
plot(nd1,                                  
     xlim = c(0,8),
     ylim = c(0,0.8),
     cex=0.8,
     lwd = 2,
     main = "Poisson Dağılımı")
lines(nd2, col = "orange", lwd = 2)             
lines(nd3, col = "grey", lwd = 2)             
lines(nd4, col = "brown", lwd = 2)  
lines(nd5, col = "green", lwd = 2)  
lines(nd6, col = "red", lwd = 2)  
legend("topright",                                    
       legend = c("λ= 1",
                  "λ= 1.5",
                  "λ= 2",
                  "λ= 2.5",
                  "λ= 3",
                  "λ= 3.5"),
       col = c("black", "orange", "grey", "brown","green","red" ),
       lty = 1)
Yukarıdaki R kod bloğunun çalıştırılmasından sonra elde edilen farklı lambda değerlerine sahip poisson dağılım eğrileri aşağıdaki grafikte verilmiştir. Genel olarak grafikten düşük lambda değerlerine sahip eğrilerin poisson dağılımının da bir özelliği olarak sağa çarpık (right skew) bir görünüm çizdiği görülmektedir. Ancak lambda değerleri artıkça eğriler normal dağılım eğrisine evrilmektedir.
Poisson eğrilerine daha yakından bakacak olursak eğrilerin izlediği seyri daha da iyi anlayabiliriz. Yazılan R kod bloğu ile Poisson eğrilerine ilişkin grafikler ayrı ayrı verilmiştir.

set.seed(6)
orneklem<-1000
l1<-ggdensity(rpois(orneklem, lambda=1),main="λ=1")
l2<-ggdensity(rpois(orneklem, lambda=1.5),main="λ=1.5", col="orange")
l3<-ggdensity(rpois(orneklem, lambda=2),main="λ=2", col="grey")
l4<-ggdensity(rpois(orneklem, lambda=2.5),main="λ=2.5", col="brown")
l5<-ggdensity(rpois(orneklem, lambda=3),main="λ=3", col="green")
l6<-ggdensity(rpois(orneklem, lambda=3.5),main="λ=3.5", col="red")
ggarrange(l1,l2,l3,l4,l5,l6)
Yukarıdaki R kod bloğunun çalıştırılmasından sonra elde edilen grafikler aşağıda verilmiştir.
Adı geçmişken normal dağılımdan biraz bahsedebilir. Normal dağılım sürekli olasılık dağılımlardan biri olup, eğrisi can eğrisine benzemektedir. Birazdan R’da rnorm fonksiyonu kullanılarak ilk olarak ortalaması 0, standart sapması 1 olan standart normal dağılım eğrisi çizilecektir. Daha sonra rnorm içerisinde yer alan parametreler değiştirilerek normal dağılım eğrilerindeki farklılaşmalar gösterilecektir. Aşağıdaki yazılan R kod bloğu ile ortalaması 0, standart sapması 1 olan normal dağılım eğrisi çizilmiştir.

set.seed(2)
ggdensity(rnorm(orneklem, mean=0, sd=1), main="Standart Normal Dağılım (Ortalama=0 ve Standart Sapma=1)", col="red")+
theme_pander()
Yukarıdaki R kod bloğunun çalıştırılmasından sonra elde edilen standart normal dağılım eğrisi aşağıdaki grafikte verilmiştir. Büyük sayı yasası (Law of large numbers)’na göre popülasyondan çekilen örneklem büyüklüğü artıkça örneklem ortalamaları popülasyon ortalamasına yaklaşır. Sözgelimi yaşları bilinen yaklaşık 83 milyonluk ülke nüfusundan çekilen 10 milyonluk örneklemin ortalama değeri, çekilen 2 milyonluk örneklemin ortalama değerinden popülasyon ortalamasına daha yakındır ve bu aslında bir anlamda 10 milyonluk örneklem 2 milyonluk örnekleme göre popülasyonu daha iyi temsil ediyor demektir.
Şimdi de aşağıda yazılan R kod bloğu ile farklı ortalama (Ort) ve standart sapma (SS) değerlerine sahip normal dağılıma uygun eğriler çizerek normal dağılım dağılım eğrilerindeki farklılaşmaları görelim.

set.seed(61)
orneklem<-1000
nd1<-density(rnorm(orneklem, mean=0, sd=1))
nd2<-density(rnorm(orneklem, mean=1, sd=1))
nd3<-density(rnorm(orneklem, mean=2, sd=3))
nd4<-density(rnorm(orneklem, mean=3, sd=4))
nd5<-density(rnorm(orneklem, mean=4, sd=5))
nd6<-density(rnorm(orneklem, mean=5, sd=6))
plot(nd1,                               
     xlim = c(- 10, 10),
     main = "Normal Dağılım", lwd = 2)
lines(nd2, col = "orange", lwd = 2)             
lines(nd3, col = "grey", lwd = 2)           
lines(nd4, col = "brown", lwd = 2)  
lines(nd5, col = "green", lwd = 2)  
lines(nd6, col = "red", lwd = 2)  
legend("topleft",                                   
       legend = c("Ort = 0; SS = 1",
                  "Ort = 1; SS = 1",
                  "Ort = 2; SS = 3",
                  "Ort = 3; SS = 4",
                  "Ort = 4; SS = 5",
                  "Ort = 5; SS = 6"),
       col = c("black", "orange", "grey", "brown","green","red" ),
       lty = 2)
Yukarıdaki R kod bloğunun çalıştırılmasından sonra farklı ortalama ve standart sapma değerlerine sahip normal dağılım eğrileri aşağıdaki grafikte verilmiştir. Şekilde siyah eğri standart normal dağılım eğrisini göstermektedir. Burada özellikle standart sapma artıkça eğrilerin normal dağılımdan uzaklaştığını görmekteyiz. Bu duruma şöyle bir yorum da getirilebilir, standart sapmanın artması varyansı ve dolayısıyla hatayı da artıracağından eğri sağa ve sola yayılım gösterir. Eğrinin altındaki alanın toplamı her durumda 1’e eşittir.
Normal dağılım eğrilerine daha yakından bakacak olursak eğrilerin izlediği seyri daha da iyi anlayabiliriz. Yazılan R kod bloğu ile normal dağılım eğrilerine ilişkin grafikler ayrı ayrı verilmiştir.

set.seed(16)
orneklem<-1000
l1<-ggdensity(rnorm(orneklem, mean=0, sd=1),main="Ort=0, SS=1")
l2<-ggdensity(rnorm(orneklem, mean=1, sd=1),main="Ort=1, SS=1", col="orange")
l3<-ggdensity(rnorm(orneklem, mean=2, sd=3),main="Ort=2, SS=3", col="grey")
l4<-ggdensity(rnorm(orneklem, mean=3, sd=4),main="Ort=3, SS=4", col="brown")
l5<-ggdensity(rnorm(orneklem, mean=4, sd=5),main="Ort=4, SS=5", col="green")
l6<-ggdensity(rnorm(orneklem, mean=5, sd=6),main="Ort=5, SS=6", col="red")
ggarrange(l1,l2,l3,l4,l5,l6)
Yukarıdaki R kod bloğunun çalıştırılmasından sonra elde edilen normal dağılım grafikleri aşağıda verilmiştir. İlk grafik standart normal dağılım grafiğidir.
Şimdi çizilen bu normal dağılım grafiklerin aşağıda yazılan R kod bloğu ile gerçekten normal dağılıma uyum uymadığını q-q grafikleri ve shapiro wilk testleri ile konrol edelim.

#q-q grafikler
set.seed(16)
q1<-ggqqplot(rnorm(orneklem, mean=0, sd=1), main="Ort=0, SS=1")
q2<-ggqqplot(rnorm(orneklem, mean=1, sd=1), main="Ort=1, SS=1", col="orange")
q3<-ggqqplot(rnorm(orneklem, mean=2, sd=3), main="Ort=2, SS=3", col="grey")
q4<-ggqqplot(rnorm(orneklem, mean=3, sd=4), main="Ort=3, SS=4", col="brown")
q5<-ggqqplot(rnorm(orneklem, mean=4, sd=5), main="Ort=4, SS=5", col="green")
q6<-ggqqplot(rnorm(orneklem, mean=5, sd=6), main="Ort=5, SS=6", col="red")
ggarrange(q1,q2,q3,q4,q5,q6)
#Shapiro Wilk Normalite testleri
s1<-rnorm(orneklem, mean=0, sd=1)
s2<-rnorm(orneklem, mean=1, sd=1)
s3<-rnorm(orneklem, mean=2, sd=3)
s4<-rnorm(orneklem, mean=3, sd=4)
s5<-rnorm(orneklem, mean=4, sd=5)
s6<-rnorm(orneklem, mean=5, sd=6)
st<-tibble(s1,s2,s3,s4,s5,s6)
istatistik<-apply(st, 2, function(x) shapiro.test(x)$statistic)
pdegeri<-apply(st, 2, function(x) shapiro.test(x)$p.value)
round(rbind(istatistik,pdegeri),3)
Yukarıdaki R kod bloğunun çalıştırılmasından sonra elde edilen q-q grafikleri aşağıda verilmiştir. q-q grafiklere bakıldığında örneklem dağılımının teorik normal dağılımın eğrisi boyunca ilerlediği ve bu eğriden sapma göstermediği görülmektedir.
Yukarıdaki R kod bloğunda Shapiro Wilk testlerine ilişkin R kod bloğu çalıştırılmasıyla elde edilen sonuçlar aşağıda verilmiştir. Elde sonuçlara göre bütün dağılım veri setlerinde p >0,05 olduğu için verinin istatistiksel olarak normal dağılım gösterdiğini rahatlıkla söyleyebiliriz. Yukarıdaki q-q grafikleri de bunu doğrular niteliktedir.

              s1    s2    s3    s4    s5    s6
istatistik 0.998 0.998 0.998 0.999 0.999 0.999
pdegeri    0.246 0.418 0.162 0.878 0.900 0.799
Negatif binom regresyon yöntemi
Negatif bir binom dağılımı, Poisson dağılımlarının özel bir türüdür. Poisson olasılık dağılımı gibi kesikli bir olasılık dağılımıdır. Negatif binom dağılımı kitle fonksiyonu aşağıdaki denklemle ifade edilebilir. İkili sonuçları olan Bernoulli deneylerinde geçerli olan varsayımlar negatif binom dağılımı için de geçerlidir. Bağımsız Bernoulli deneylerinde ilk başarı önemliyken, negatif binom dağılımında r tane başarı elde durumu söz konusudur. Negatif binom dağılımı geometrik dağılımının genelleştirilmiş bir şeklidir.
x = 0, 1, 2, …, n > 0 ve 0 < p ≤ 1. Eşitlikte p başarı olasılığını göstermektedir. Varsayımsal bir örnek vererek konuyu biraz somutlaştıralım.
Örnek: Covid-19 hastalığına maruz kalan sigara kullanan 65 yaşındaki bireyin bu hastalığa yakalanma olasılığı 0,70 ise bu hastalığa maruz kalan aynı yaşta 20. bireyin bu hastalığa yakalanan 8. birey olma olasılığı nedir?
Burada,
p=0,70 (hastalığa maruz kalma olasılığı)
x=20 (hastalığa maruz kalan 20. birey)
r=8 (hastalığa yakalanan 8. birey)
Yukarıda belirtilen negatif binom eşitliğinde verilenleri yerine koyarsak
Yapılan işlemi aşağıdaki R kod bloğunda da verelim kullanılan fonksiyonun görülebilmesi açısından.

options(scipen=999)#Sonuçların bilimsel gösterimden eşitliği kurtarmak için
round(choose(19,7)*(1-0.7)^(20-8)*(0.7)^8,5)#burada choose () fonksiyonu kombinasyon hesaplamasında kullanılmıştır.
#Sonuç:0.00154
R’da rnbinom fonksiyonu ile belirtilen negatif binom dağılıma göre rastgele seçilen 1 veya daha fazla sayı üretilmektedir. rnbinom(n, size, prob, mu) fonksiyonu negatif binom dağılımına göre tekrarsız seçilen örneklem büyüklüğünü göstermektedir. Fonksiyondaki size parametresi, diğer bir ifadeyle shape parametresi hedeflenen başarılı denemelerin sayısını, mu ise ortalamasını göstermektedir. İlk olarak rnbinom fonksiyonunu kullanarak negatif binom dağılımına uygun gözlem sayısı 10000, hedeflenen başarılı denemelerin sayısı 20, ortalamanın ise 5 olduğu varsayımından hareketle aşağıda yazılan R kod bloğu ile histogramı çizilmiştir.

nbd<-tibble(Sayi=rnbinom(n=10000, size=20, mu=5))
ggplot(nbd, aes(x=Sayi)) + 
geom_histogram(aes(y=..density..),bins=100,binwidth=.3, fill="red")+
geom_density(alpha=.3, fill="blue")+
xlab("")+
ylab("Yoğunluk")+
ggtitle("Negatif Binom Dağılımı Yoğunluk ve Histogram")
#Alternatif olarak sadece yoğunluk grafiği verecek olursak
ggdensity(rnbinom(n=10000, size=20, mu=5), xlab="",ylab="Yoğunluk", main="Negatif Binom Dağılımı Yoğunluk Grafiği", col="red")+
theme_economist()
Yukarıdaki R kod bloğunun çalıştırılmasından sonra elde edilen Negatif binom dağılımına ilişkin histogram ve yoğunluk aşağıdaki grafik üzerinde verilmiştir.
Alternatif olarak daha net görebilmek adına sadece yoğunluk grafiği verecek olursak R kod bloğundaki ilgili alan çalıştırıldığında aşağıdaki grafik elde edilmiş olacaktır. Burada amaç biraz da grafiği farklı bir temayla sunmak :).
Şimdi de Negatif Binom dağılımına uygun olarak aynı popülasyon büyüklüğü (N) sahip ancak farklı size ve ortalama (mu) değerleriyle karşılaştırmalı olarak negatif binom dağılıma grafik üzerinde bakalım. Aşağıda yazılan R kod bloğu ile popülasyon büyüklüğü (N) 1000 olan
mu = 4, size = 10
mu = 8, size = 20
mu = 12, size = 30
mu = 16, size = 40
mu = 20, size = 50
mu = 24, size = 60
değerlerine sahip negatif binom eğrileri çizilmiştir.

set.seed(61)
orneklem<-1000
nb1<-density(rnbinom(orneklem, mu = 4, size = 10))
nb2<-density(rnbinom(orneklem, mu = 8, size = 20))
nb3<-density(rnbinom(orneklem, mu = 12, size = 30))
nb4<-density(rnbinom(orneklem, mu = 16, size = 40))
nb5<-density(rnbinom(orneklem, mu = 20, size = 50))
nb6<-density(rnbinom(orneklem, mu = 24, size = 60))
par(oma = c(1, 0.1, 0.1, 0.1))
plot(nb1,                               
     xlim = c(0,20),
     ylim = c(0,0.25),
     main = "Negatif Binom Dağılımı")
lines(nb2, col = "orange", lwd = 2)             
lines(nb3, col = "grey", lwd = 2)             
lines(nb4, col = "brown", lwd = 2)  
lines(nb5, col = "green", lwd = 2)  
lines(nb6, col = "red", lwd = 2)  
legend("topright",                                   
       legend = c("Size= 10",
                  "Size= 20",
                  "Size= 30",
                  "Size= 40",
                  "Size= 50",
                  "Size= 60"),
       col = c("black", "orange", "grey", "brown","green","red"),
       lty = 1)
Yukarıdaki R kod bloğunun çalıştırılmasından sonra farklı mu ve size sapma değerlerine sahip negatif binom olasılık dağılım eğrileri aşağıdaki grafikte verilmiştir.
Negatif binom olasılık dağılım eğrilerine daha yakın plandan bakacak olursak eğrilerin izlediği seyri daha da iyi anlayabiliriz. Yazılan R kod bloğu ile Negatif Binom dağılım eğrilerine ilişkin grafikler ayrı ayrı verilmiştir.

set.seed(26)
orneklem<-1000
nby1<-ggdensity(rnbinom(orneklem, mu = 4, size = 10),main="m = 4, s = 10", col="orange")
nby2<-ggdensity(rnbinom(orneklem, mu = 8, size = 20),main="m = 8, s = 20",col="orange")
nby3<-ggdensity(rnbinom(orneklem, mu = 12, size = 30),main="m = 12, s = 30", col="grey")
nby4<-ggdensity(rnbinom(orneklem, mu = 16, size = 40),main="m = 16, s = 40", col="brown")
nby5<-ggdensity(rnbinom(orneklem, mu = 20, size = 50),main="m = 20, s = 50",col="green")
nby6<-ggdensity(rnbinom(orneklem, mu = 24, size = 60),main="m = 24, s = 60", col="red")
ggarrange(nby1,nby2,nby3,nby4,nby5,nby6)
Yukarıdaki R kod bloğunun çalıştırılmasından sonra elde edilen grafikler aşağıda verilmiştir. Elde edilen bulgular mu ve size değerleri yükseldikçe dağılım normal dağılıma evrildiğini göstermektedir.
Poisson regresyon modeli aşağıdaki eşitlikteki gibi ifa edilebilir. Yöntemde regresyon katsayıları maksimum olasılık ya da maksimum olabilirlik yöntemi (MLE) kullanılarak hesaplanır.
Negatif binom regresyon modeli ise aşağıdaki eşitlikteki gibi gösterilebilir. Bu modelde Poisson regresyon yöntemine benzer olarak regresyon katsayıları maksimum olasılık (maksimum likehood) yöntemi kullanılarak tahmin edilir.
Kurulan regresyon analiz modellerinde güvenilir bir regresyon modeli kurmak için örneklem büyüklüğünün asgari şartları karşılaması gerekmektedir. Buna göre;
Kurulan regresyon modelinin tamamını değerlerdirmek için önerilen minimum örneklem büyüklüğü 50 + 8k‘tır. k burada bağımsız değişkenlerin sayısını göstermektedir. Örneğin bağımsız değişkenlerin sayısı 10 ise minimum örneklem büyüklüğü 50 + 8 X 10 eşitliğinden 130’dur.
Eğer bireysel olarak bağımsız değişkenler değerlendirilecek ise minimum örneklem büyüklüğü 104 + k‘tır. Örneğin bağımsız değişkenlerin sayısı 10 ise minimum örneklem büyüklüğü 104 + 8 eşitliğinden 112’dir.
Diğer taraftan örneklem büyüklüğü ve bağımsız değişkenin sayısına göre Cohen’in kriterini kullanarak etki büyüklüğünü hesaplayabiliriz. Cohen’in etki büyüklüğü örneklem büyüklüğü ve bağımsız değişken sayısı artıkça etki büyüklüğü azalış göstermektedir. Bu durum istenen bir durumdur. Cohen’in etki büyüklüğü R= k / (N-1) formülü ile hesaplanmaktadır. k burada bağımsız değişken sayısını, N ise örneklem / popülasyon büyüklüğünü / gözlem sayısını göstermektedir. Yukarıdaki veriler kullanılarak örnek vermek gerekirse 8 / ( 112-1) =0,07‘dir. R katsayısının 0 olması etki olmadığı anlamına gelmektedir ki, bu durumda örneklem büyüklüğünün ve değişken sayısının kurulan regresyon modelinde optimal noktaya ulaştığı anlamına gelir.
Veri seti
“warpbreaks” veri setinde bağımlı değişken olan breaks (mola sayısı) tahmin edilmiştir. Diğer bir ifadeyle, bu çalışmada regresyon problemi çözmüş olacağız. Veri setindeki toplam gözlem sayısı 54, değişken sayısı ise 3’tür. Bu veri setine R programlama yazılımında “warpbreaks” olarak yer verilmiştir. Veri setindeki gözlem sayısı yukarıda verilen asgari örneklem sayılarını karşılamasa da literatürde parametrik testler için önerilen örneklem büyüklüğü ya da gözlem sayısı 30 ve üzeri olduğu için burada kullanılmıştır. Veri setinde değişkenlerin adları anlaşılması adına Türkçe olarak düzenlenmiştir. Veri setinde yer alan değişkenler ve değişkenlerin veri tipleri şöyledir:
molasayisi (breaks): Veri tipi nicel ve kesikli sayma sayılarından oluşmaktadır.
yuntipi (wool): Veri tipi nitel ve kategorik olup, A ve B kategorilerinden oluşmaktadır.
gerginlik (tension): Veri tipi nitel ve kategorik olup, Düşük, Orta ve Yüksek kategorilerinden oluşmaktadır.
Bu kapsamda cevap değişkeni (bağımlı değişken) olan “molasayisi” geri kalan 2 bağımsız değişken kullanılarak tahmin edilecektir. Analizde kullanılan veri setini aşağıdaki linkten indirebilirsiniz.
Veri Seti
Şimdi veri setini tanıdıktan sonra adım adım (step by step) analize başlayabiliriz. Analizde R programlama dili kullanarak analiz adımları R kod bloklarında verilmiştir.
Yüklenecek R kütüphaneleri

rm(list=ls())
kütüphaneler = c("dplyr","tibble","tidyr","ggplot2","formattable","readr","readxl","xlsx", "pastecs","fpc", "DescTools","e1071", "DMwR","caret", "viridis","GGally","ggpurr","effect","psych","writexl","ggfortify","explore","MASS")
 
sapply(kütüphaneler, require, character.only = TRUE)
Ver setinin okunması ve değişkenlerin Türkçe olarak revize edilmesi

veri<-warpbreaks %>% as_tibble() %>% rename(molasayisi=breaks, yuntipi=wool, gerginlik=tension)%>% mutate(gerginlik=recode_factor(gerginlik, L="Dusuk", M="Orta", H="Yuksek"))
Ver setinin xlsx dosyasına yazdırılması

write_xlsx(veri, "veriseti.xlsx")#xlsx dosyası için
Veri setinin görselleştirilmesi ve tanımlayıcı istatistikler

#veri setindeki değişkenlerin görselleştirilmesi
veri %>% explore_all()
 
#veri setindeki ilk 10 gözlem
formattable(head(veri,10))
Yukarıdaki R kod bloğunun çalıştırılmasından sonra veri setindeki değişkenlerin grafiği aşağıda verilmiştir. Grafikte görüleceği üzere eksik gözlem (missing data: NA) bulunmamaktadır.
Yukarıdaki R kod bloğunun çalıştırılmasından sonra veri setindeki ilk 10 gözlem aşağıdaki tabloda verilmiştir.
Kategorik değişkenlere göre mola sayılarının dağılımı

ggplot(veri)+
  geom_col(aes(x = molasayisi, y = yuntipi, fill = gerginlik))+
facet_wrap(~gerginlik)+
  theme(axis.text.x = element_text(angle = 90))
Cevap değişkeni Yukarıdaki R kod bloğunun çalıştırılmasından sonra veri setindeki kategorik değişkenlere göre mola sayısının dağılımı aşağıdaki grafikte verilmiştir. Aşağıdaki grafik değişkenlere bir bütün olarak yaklaşmanıza katkı sağlamış olacaktır.
Nicel değişkenlerin normal dağılıma uyup uymadığının kontrol edilmesi
Bu kısımda normalitenin testinde her ne kadar Shapiro-Wilk testi kullanılsa da Kolmogorow-Smirnov testinin de kullanılabileceğini ifade etmede fayda bulunmaktadır. Ayrıca verinin normal dağılıma uyup uymadığı kutu diyagramlarda uç değerlere bakılarak ve Cook’un mesafesine bakılarak da görülebilir. Diğer taraftan çarpıklık ve basıklık değerleri de verinin normal dağılıma uyup uymadığı noktasında bizlere önemli ipuçları verebilir, bunları hatırlatmakta fayda var.

#Q-Q plot ile molasayisi değişkeninin normal dağılıma uyumu incelenmiştir.
ggqqplot(veri$molasayisi, ylab = "Mola Sayısı", color="red")
#Normalite testi
shapiro.test(veri$molasayisi)
Yukarıdaki R kod bloğunun çalıştırılmasından sonra molasayisi değişkeninin normal dağılıma uyup uymadığını ortaya koymak için çizilen Q-Q grafiği aşağıda verilmiştir.
Yukarıdaki R kod bloğunun çalıştırılmasından sonra bağımlı değişkenin normal dağılıma uyup uymadığını ortaya koymak için çizilen Q-Q grafiği aşağıda verilmiştir.
Normalitenin testi için kullanılan Shapiro-Wilk testi sonuçları ise aşağıda verilmiştir. Elde edilen bulgular, p değeri 0,05’ten küçük olduğu için molasayisi değişkeni normal dağılım göstermemektedir.

	Shapiro-Wilk normality test
data:  veri$molasayisi
W = 0.89251, p-value = 0.0001581
Poisson olasılık dağılımına göre değişkenin ortalaması ve varyansı birbirine eşit veya çok yakın olmalıdır. Aşağıda yazılan R kod bloğunda bağımlı değişken olan mola sayısının ortalama ve varyansların eşit veya birbirine yakın olup olmadığına bakalım. Elde edilen bulgulardan şu anki durumda varyans (174.2041) değerinin ortalama (28.14815) değerinin çok üzerinde olduğunu göstermektedir. Bu durum kurulacak modelde aşırı yayılım (overdispersion) endişesini artırmakla birlikte bağımlı değişkenin poisson dağılımda varyansın ortalamaya eşit veya ona yakın olması kuralını ihlal edilmesi anlamına da gelmektedir.

mean(veri$molasayisi);var(veri$molasayisi)#Ortalama ve Varyans Sırasıyla: 28.14815, 174.2041
Aşağıda yazılan R kod bloğu ile bağımlı değişkenin Poisson ve negatif binom dağılımına uyup uymadığına bakmak için hem histogramını çizelim hem de uyum iyiliği (goodness of fit) testlerini yapalım.

#Bağımlı değişkenin histogramı
ggplot(veri, aes(x=molasayisi))+geom_bar(bins=100,binwidth=.5, fill="red")+
xlab("")+
ylab("Sıklık")+
ggtitle("Mola Sayısı Değişkeni Histogramı")+
theme_replace()
#uyum iyiliği testleri
library(vcd)
#poisson dağılımı uyum iyiliği testi
ozet<-table(veri$molasayisi)
uyum <- goodfit(ozet, type = "poisson", method = "MinChisq")
summary(uyum)
#negatif binom dağılımı uyum iyiliği testi
ozet<-table(veri$molasayisi)
uyum <- goodfit(ozet, type = "nbinomial", method = "MinChisq")
summary(uyum)
Yukarıdaki R kod bloğunun ilgili satırı çalıştırıldığında bağımlı değişken olan mola sayısının histogramı aşağıda verilmiştir. Elde edilen grafik mola sayısının poisson dağılımına çok da uyum göstermemiş görünüyor.
Histogram bize net bilgi vermediği için R kod bloğundaki ilgili satırlarda sırasıyla ilk olarak Poisson dağılımı uyum iyiliği test sonuçları aşağıda verilmiştir. Elde edilen sonuçlar istatistiksel olarak anlamlı olduğu için mola sayısı değişkeni Poisson dağılımına uygun değildir (p<0,05).

 Goodness-of-fit test for poisson distribution
           X^2 df P(> X^2)
Pearson 167868 69        0
Değişkenimizin Poisson dağılıma uyum sağlamadığını biliyoruz. Bu yüzden R kod bloğunda ilgili satırı çalıştırarak değişkenin negatif binom dağılımına uygun olup olmadığını test edelim.Elde edilen bulgular istatistiksel olarak anlamlı olmadığı için mola sayısı değişkeni negatif binom dağılımına uygundur (p>0,05).

	 Goodness-of-fit test for nbinomial distribution
             X^2 df  P(> X^2)
Pearson 50.92181 68 0.9394755
Poisson regresyon modelinin kurulması
Kurulan Poisson regresyon modelinde bağımlı değişken molasayisi, diğer değişkenler ise bağımsız olup, regresyon modeline ilişkin R kod bloğu aşağıda verilmiştir.

model1 <-glm(molasayisi ~., data = veri, family = poisson)
summ(model1)
Yukarıdaki R kod bloğunun çalıştırılmasından sonra elde edilen regresyon model özeti aşağıda verilmiştir. Çıktıda yer verilen AIC (Akaike information criterion) parametresi kurulan tek bir modelin değerlendirilmesinde çok fazla anlam ifade etmemekle birlikte BIC (Akaike information criterion) parametresinde olduğu gibi ne kadar düşük olursa kurulan modelin o kadar gözlem verisine uyum sağladığını göstermektedir. Bu açıdan bakıldığında aslında bu iki parametrenin kurulan birden fazla modelin performansının değerlendirilmesinde kullanılması daha uygundur.

Call:  glm(formula = molasayisi ~ ., family = poisson, data = veri)
Coefficients:
    (Intercept)         yuntipiB    gerginlikOrta  gerginlikYuksek  
         3.6920          -0.2060          -0.3213          -0.5185  
Degrees of Freedom: 53 Total (i.e. Null);  50 Residual
Null Deviance:	    297.4 
Residual Deviance: 210.4 	AIC: 493.1
[1] 1
MODEL INFO:
Observations: 54
Dependent Variable: molasayisi
Type: Generalized linear model
  Family: poisson 
  Link function: log 
MODEL FIT:
χ²(3) = 86.98, p = 0.00
Pseudo-R² (Cragg-Uhler) = 0.80
Pseudo-R² (McFadden) = 0.15
AIC = 493.06, BIC = 501.01 
Standard errors: MLE
----------------------------------------------------
                         Est.   S.E.   z val.      p
--------------------- ------- ------ -------- ------
(Intercept)              3.69   0.05    81.30   0.00
yuntipiB                -0.21   0.05    -3.99   0.00
gerginlikOrta           -0.32   0.06    -5.33   0.00
gerginlikYuksek         -0.52   0.06    -8.11   0.00
----------------------------------------------------
Aşağıda yazılan R kod bloğunda kurulan 1 nolu modelde yayılım (dispersion) olup olmadığına bakalım.

formattable(tibble(Artik_Sapma          = deviance(model1),
     Artik_Serbestlik_Derecesi = df.residual(model1),
     Yayilim_Degeri=deviance(model1)/df.residual(model1),
     Kikare_p_Degeri              = pchisq(deviance(model1), df.residual(model1), lower = F)))
#alternatif adım adım
deger<-deviance(model1)#210.39
sd<-model1$df.residual#artıkların serbestlik derecesi
asiriyayilim<-deger/sd# artıkların serbestlik derecesine bölünmesi sonucu elde edilen değer 1'den büyükse kurulan model veriye uymadığını göstermekte ve aşırı yayılım (overdispersion) olduğunu göstermektedir.
asiriyayilim #4.207838 yani Pearson X2/50 = 4.207838
Yukarıdaki R kod bloğunun çalıştırılmasından sonra elde edilen yayılım (dispersion) değeri aşağıda verilmiştir. Literatürde artıkların serbestlik derecesine bölünmesi sonucu elde edilen değer 1’den büyükse kurulan model veriye uymadığını göstermekte ve aşırı yayılım (overdispersion) olduğunu göstermektedir. Elde edilen bulgulara göre yayılım değeri 1’in çok üzerinde olduğu ve istatistiksel olarak anlamlı olduğu için burada aşırı yayılımın olduğunu söyleyebiliriz (Pearson X2/50 = 4.207838, p<0,05). Bu durumda eğer aşırı yayılım varsa negatif binom regresyon yönteminin denenmesi gerekmektedir.
Negatif binom regresyon modelinin kurulması
1 nolu modelde aşırı yayılım olduğu tespit edilmesinden dolayı yazılan aşağıdaki R kod bloğunda 2 nolu negatif binom regresyon modeli kurulmuştur.

model2 <-glm.nb(molasayisi ~., data = veri)
summary(model2)
Yukarıdaki R kod bloğunun çalıştırılmasından sonra elde edilen negatif binom regresyon model özeti aşağıda verilmiştir.

Call:
glm.nb(formula = molasayisi ~ ., data = veri, init.theta = 9.944385436, 
    link = log)
Deviance Residuals: 
    Min       1Q   Median       3Q      Max  
-2.0144  -0.9319  -0.2240   0.5828   1.8220  
Coefficients:
                Estimate Std. Error z value Pr(>|z|)    
(Intercept)       3.6734     0.0979  37.520  < 2e-16 ***
yuntipiB         -0.1862     0.1010  -1.844   0.0651 .  
gerginlikOrta    -0.2992     0.1217  -2.458   0.0140 *  
gerginlikYuksek  -0.5114     0.1237  -4.133 3.58e-05 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
(Dispersion parameter for Negative Binomial(9.9444) family taken to be 1)
    Null deviance: 75.464  on 53  degrees of freedom
Residual deviance: 53.723  on 50  degrees of freedom
AIC: 408.76
Number of Fisher Scoring iterations: 1
              Theta:  9.94 
          Std. Err.:  2.56 
 2 x log-likelihood:  -398.764 
Şimdi kurulan 2 nolu modelde aşırı yayılım olup olmadığını aşağıda yazılan R kod bloğu ile test edelim.

model2 <-glm.nb(molasayisi ~., data = veri)
formattable(tibble(Artik_Sapma          = deviance(model2),
     Artik_Serbestlik_Derecesi = df.residual(model2),
     Yayilim_Degeri=deviance(model2)/df.residual(model2),
     Kikare_p_Degeri              = pchisq(deviance(model2), df.residual(model2), lower = F)))
Yukarıdaki R kod bloğunun çalıştırılmasından sonra elde edilen yayılım (dispersion) değeri aşağıda verilmiştir. Elde edilen bulgulara göre yayılım değeri yaklaşık 1 ve istatistiksel olarak anlamlı olmadığı için burada aşırı yayılımın olmadığı, aksine eşit yayılım olduğunu söyleyebiliriz.
Model karşılaştırmaları
Kurulan modelleri AIC ve BIC değerleri açısından karşılaştıralım. AIC ve BIC değerlerinin düşük olması tahmin edilen değerlerle gözlem verilerine uyum açısından istenen bir durum olduğu daha önce belirtilmişti. Elde edilen sonuçlar Model 2’nin AIC ve BIC değerleri daha düşük olduğundan Model 1’e göre daha iyi tahmin sonuçları ortaya koyduğu söylenebilir.

model1 <-glm(molasayisi ~., data = veri, family = poisson)
model2 <-glm.nb(molasayisi ~., data = veri)
stargazer(model1,model2, scale=F,  type="text", digits=3)
#alternatif
export_summs(model1, model2, scale = F, results = 'asis')
Yukarıdaki R kod bloğu çalıştırıldıktan sonra kurulan modellere ilişkin karşılaştırmalı raporlar aşağıda tablolarda verilmiştir. Ortaya konulan bulgular AIC ve BIC parametrelerinde olduğu gibi 2 nolu model 1 nolu modele göre daha az hata üretmektedir. Dolayısıyla bu bulgulara bakarak 2 nolu modelin daha iyi olduğu ileri sürülebilir.

==============================================
                      Dependent variable:     
                  ----------------------------
                           molasayisi         
                    Poisson       negative    
                                  binomial    
                      (1)           (2)       
----------------------------------------------
yuntipiB           -0.206***      -0.186*     
                    (0.052)       (0.101)     
                                              
gerginlikOrta      -0.321***      -0.299**    
                    (0.060)       (0.122)     
                                              
gerginlikYuksek    -0.518***     -0.511***    
                    (0.064)       (0.124)     
                                              
Constant           3.692***       3.673***    
                    (0.045)       (0.098)     
                                              
----------------------------------------------
Observations          54             54       
Log Likelihood     -242.528       -200.382    
theta                         9.944*** (2.561)
Akaike Inf. Crit.   493.056       408.764     
==============================================
Note:              *p<0.1; **p<0.05; ***p<0.01

Yukarıdaki R kod kod bloğunda ilgili alan çalıştırılınca BIC değerlerinin ve pseudo R^2 olduğu alternatif bir rapor da üretebiliriz. Bu tamamen karar vericiye bağlıdır.

─────────────────────────────────────────────────────
                       Model 1          Model 2      
                  ───────────────────────────────────
  (Intercept)             3.69 ***         3.67 ***  
                         (0.05)           (0.10)     
  yuntipiB               -0.21 ***        -0.19      
                         (0.05)           (0.10)     
  gerginlikOrta          -0.32 ***        -0.30 *    
                         (0.06)           (0.12)     
  gerginlikYuksek        -0.52 ***        -0.51 ***  
                         (0.06)           (0.12)     
                  ───────────────────────────────────
  N                      54               54         
  AIC                   493.06           408.76      
  BIC                   501.01           418.71      
  Pseudo R2               0.80             0.29      
─────────────────────────────────────────────────────
  *** p < 0.001; ** p < 0.01; * p < 0.05.            
Column names: names, Model 1, Model 2
Kurulan regresyon modellerine göre regresyon katsayıları
Aşağıda yazılan R kod bloğu ile regresyon katsayı büyüklükleri kurulan modellere göre karşılaştırmalı olarak verilmiştir.

#normalize edilmemiş katsayı büyüklükleri
plot_summs(model1, model2, scale = F, exp = TRUE)+
ggtitle("Modellere Göre Regresyon Katsayıları")
#normalize edilmiş katsayı büyüklükleri
plot_summs(model1, model2, scale = F, exp = TRUE) +
ggtitle("Modellere Göre Normalize Edilmiş Regresyon Katsayıları")
Yukarıdaki R kod bloğunun ilk satırının çalıştırılmasından sonra kurulan regresyon modellerine göre elde edilen regresyon katsayıları aşağıdaki grafikte verilmiştir. Burda Model 1 Poisson regresyon modeli, Model 2 ise negatif regresyon modeli olduğunu tekrar hatırlatmakta fayda var.
Yukarıdaki R kod bloğunun ikinci satırının çalıştırılmasından sonra kurulan regresyon modellerine göre elde edilen normalize edilmiş regresyon katsayıları aşağıdaki grafikte verilmiştir.
Bağımsız değişkenler ile bağımlı değişken arasındaki etkileşim düzeyleri
Kurulan 2 nolu model (negatif binom regresyon)’de bağımsız değişkenlerin her birinin bağımlı değişken üzerindeki etkisini ölçümlemeye yönelik aşağıda yazılan R kod bloğu ile karşılaştırmalı olarak verilmiştir.

plot(Effect(focal.predictors = c("gerginlik", "yuntipi"),model2), main="Gerginlik ve Yün Tipi Değişkenlerinin Etkisi")
Yukarıdaki R kod bloğunun çalıştırılmasından sonra elde edilen değişkenlerin etki düzeyleri aşağıdaki grafikte verilmiştir. Burada, yün tipi A olduğu zaman mola sayısındaki artış B’ye göre daha yüksektir. Diğer taraftan, gerginlik seviyesi yükseldikçe mola sayısında düşüş olduğu görülmektedir. Her iki bağımsız değişken birlikte değerlendirildiğinde yün tipinin A ve gerginlik seviyesinin Düşük olduğu durumda mola sayısı en yüksek seviyesine ulaşmıştır.
Yapılan bu çalışma ile özellikle veri bilimi (data science) ile ilgilenen akademi ve saha çalışanlarına bir katkı sunulması amaçlanmıştır.
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://ncss-wpengine.netdna-ssl.com/wp-content/themes/ncss/pdf/Procedures/NCSS/Negative_Binomial_Regression.pdf
https://tevfikbulut.com/2020/07/15/rda-coklu-dogrusal-regresyon-uzerine-bir-vaka-calismasi-a-case-study-on-multiple-linear-regression-mlr-in-r/
Tippett, L. H. C. (1950) Technological Applications of Statistics. Wiley. Page 106.
https://www.rdocumentation.org/packages/vcd/versions/1.4-7/topics/goodfit
https://dergipark.org.tr/tr/download/article-file/548350
https://statistics.laerd.com/spss-tutorials/poisson-regression-using-spss-statistics.php#:~:text=A%20Poisson%20distribution%20assumes%20a,added%20to%20the%20Poisson%20regression.
https://web.stanford.edu/~hastie/TALKS/boost.pdf
https://dergipark.org.tr/en/pub/ijeased/issue/50819/703566
https://iq.opengenus.org/types-of-boosting-algorithms/
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://www.stat.berkeley.edu/~breiman/Using_random_forests_V3.1.pdf
https://www.stat.berkeley.edu/~breiman/RandomForests/
https://stats.idre.ucla.edu/r/library/r-library-introduction-to-bootstrapping/
https://stanford.edu/~shervine/l/tr/teaching/cs-229/cheatsheet-machine-learning-tips-and-tricks
http://uzalcbs.org/wp-content/uploads/2016/11/2012_082.pdf
http://www.ub.edu/stat/docencia/EADB/bagging.html
https://people.cs.pitt.edu/~milos/courses/cs2750-Spring04/lectures/class23.pdf
https://www.google.com/search?q=underfitting+and+overfitting&source=lnms&tbm=isch&sa=X&ved=2ahUKEwiI1onvyNvpAhVSQMAKHfYyC28Q_AUoAXoECBAQAw&biw=1366&bih=604#imgrc=m5WcPcAqdpCwEM
Webb G.I. (2011) Overfitting. In: Sammut C., Webb G.I. (eds) Encyclopedia of Machine Learning. Springer, Boston, MA
https://www.memorial.com.tr/saglik-rehberleri/biyopsi-nedir-ve-nasil-yapilir/
https://archive.ics.uci.edu/ml/datasets/Breast+Cancer+Wisconsin+(Diagnostic)
Andriyas, S. and McKee, M. (2013). Recursive partitioning techniques for modeling irrigation behavior. Environmental Modelling & Software, 47, 207–217.
Chan, J. C. W. and Paelinckx, D. (2008). Evaluation of Random Forest and Adaboost tree-based ensemble classification and spectral band selection for ecotope mapping using airborne hyperspectral imagery. Remote Sensing of Environment, 112(6), 2999–3011.
Chrzanowska, M., Alfaro, E., and Witkowska, D. (2009). The individual borrowers recognition:Single and ensemble trees. Expert Systems with Applications, 36(2), 6409–6414.
De Bock, K. W., Coussement, K., and Van den Poel, D. (2010). Ensemble classification based on generalized additive models. Computational Statistics & Data Analysis, 54(6), 1535–1546.
De Bock, K. W. and Van den Poel, D. (2011). An empirical evaluation of rotation-based ensemble classifiers for customer churn prediction. Expert Systems with Applications, 38(10), 12293–12301.
Fan, Y., Murphy, T.B., William, R. and Watson G. (2009). digeR: GUI tool for analyzing 2D DIGE data. R package version 1.2.
Garcia-Perez-de-Lema, D., Alfaro-Cortes, E., Manzaneque-Lizano, M. and Banegas-Ochovo, R. (2012). Strategy, competitive factors and performance in small and medium enterprise (SMEs).
African Journal of Business Management, 6(26), 7714–7726.
Gonzalez-Rufino, E., Carrion, P., Cernadas, E., Fernandez-Delgado, M. and Dominguez-Petit, R.(2013). Exhaustive comparison of colour texture features and classification methods to discriminate cells categories in histological images of fish ovary. Pattern Recognition, 46, 2391–2407.
Krempl, G. and Hofer, V. (2008). Partitioner trees: combining boosting and arbitrating. In: Okun, O., Valentini, G. (eds.) Proc. 2nd Workshop Supervised and Unsupervised Ensemble Methods and Their Applications, Patras, Greece, 61–66.
Torgo, Luis, Data Mining With R. Second Edition.
https://www.akira.ai/glossary/gradient-boosting/
http://www.ccs.neu.edu/home/vip/teach/MLcourse/4_boosting/slides/gradient_boosting.pdf
Breiman, L. (June 1997). “Arcing The Edge” (PDF). Technical Report 486. Statistics Department, University of California, Berkeley.
http://acikerisim.ktu.edu.tr/jspui/handle/123456789/743
https://dergipark.org.tr/tr/download/article-file/219865
Discovering Statistics Using SPSS (2009), Field, A.
https://www.jmp.com/en_ch/statistics-knowledge-portal/what-is-multiple-regression/fitting-multiple-regression-model.html
https://marcfbellemare.com/
https://www.statisticshowto.com/variance-inflation-factor/
https://www.rdocumentation.org/packages/psych/versions/1.9.12.31/topics/cor.plot
https://www.rdocumentation.org/packages/caret/versions/6.0-86/topics/findCorrelation
https://tevfikbulut.com/2020/07/04/rda-binary-lojistik-regresyon-uzerine-bir-vaka-calismasi-a-case-study-on-binary-logistic-regression-in-r/
https://cran.r-project.org/web/packages/relaimpo/relaimpo.pdf
Bunu paylaş:
Facebook
Twitter
Reddit
Telegram
E-posta
Yazdır
Daha fazla
LinkedIn
Tumblr
Pinterest
Pocket
WhatsApp
Skype
Bunu beğen:
Beğen Yükleniyor...
Tevfik BULUT	Genel	Yorum bırakın 23 Temmuz 2020 31 Ocak 2021 35 Minutes	
R’da Çoklu Doğrusal Regresyon Üzerine Bir Vaka Çalışması: A Case Study on Multiple Linear Regression (MLR) in R
Giriş
Regresyon analizi yöntemlerinden biri olan multiple (çoklu) regresyon analiz (MRA) yöntemi, bağımlı değişkenin ya da cevap değişkeninin
nicel sürekli veya kesikli olduğu bağımlı değişkenler (dependent variables) ile bağımsız değişken veya değişkenler (independent variables) arasındaki ilişkiyi ortaya koyan regresyon analiz yöntemidir. Veri tipleri kendi içerisinde 4 farklı alt sınıfta ele alınabilir. Bu veri tipleri Şekil 1’de verilmiştir.
Şekil 1: Veri Tipleri
Nitel Veri (Qualitative Data)
Şekil 1’de verilen sunulan nitel veri tipi ölçülemeyen ve kategori belirten veri tipi olup, kendi içerisinde temel olarak ikiye ayrılmaktadır. Bu veri tipine alt sınıflandırmalar dikkate alınarak sırasıyla örnek vererek ele alalım.
Nominal veri: İki veya daha fazla cevap kategorisi olan ve sıra düzen içermeyen veri tipi olup, bu veri tipine medeni durum (evli, bekar) ve sosyal güvenlik türü (Bağkur, SSK, Yeşil Kart, Özel Sigorta) örnek gösterilebilir.
Ordinal veri: İki veya daha fazla kategorisi olan ancak sıra düzen belirten veri türüdür. Bu veri tipine örnek olarak eğitim düzeyleri (İlkokul, ortaokul, lise, üniversite ve yüksek lisans), yarışma dereceleri (1. , 2. ve 3.) ve illerin gelişmişlik düzeyleri (1. Bölge, 2. Bölge, 3. Bölge, 4. Bölge, 5. Bölge ve 6. Bölge) verilebilir.
Veri tiplerinden bahsedildikten sonra bu veri tiplerinin cevap değişkeni (bağımlı değişken) olduğu durumlarda seçilecek regresyon analiz yöntemini ele alalım. Temel olarak cevap değişkeni ölçülebilir numerik değişken ise regresyon, değilse sınıflandırma analizi yapıyoruz. Eğer cevap değişkeni nitel ise aslında sınıflandırma problemini çözmek için analizi kullanıyoruz. Cevap değişkeni, diğer bir deyişle bağımlı değişken numerik ise bağımsız değişken veya değişkenlerin çıktı (output) / bağımlı değişken (dependent variable) / hedef değişken (target variable) veya değişkenlerin üzerindeki etkisi tahmin etmeye çalışıyoruz. Buradaki temel felsefeyi anlamak son derece önemlidir. Çünkü bu durum sizin belirleyeceğiniz analiz yöntemi de değiştirecektir. Bağımlı (dependent) değişkenin tipine göre kullanılan regresyon analiz yöntemleri Şekil 2’de genel hatlarıyla verilmiştir.
Şekil 2: Cevap Değişkeninin Veri Tipine Göre Regresyon Analiz Yöntemleri
Modeller oluşturulurken temel amaç, bias ve varyans dengesinin kurulmasıdır. Bu uyumu sağlarsak iyi model uyumu (good-fit) elde etmiş oluruz. Makine öğrenme ve derin öğrenme problemlerinin çözümünde modelleme hatalarına bağlı olarak varyans ve bias değişiklik göstermektedir. Bu iki durum şöyle ele alınabilir:
Eksik model uyumu (under-fitting): Kurulan modelde elde edilen tahmin değerleri gözlem verisine yeterince uyum göstermediğinde ortaya çıkar. Bu durumda varyans düşükken bias yüksektir. Buradan şunu anlamak gerekir: gözlem verisi ile tahmin edilen veri arasındaki fark büyükse, diğer bir deyişle kurulan modelle bağımlı değişken iyi tahmin edilemiyorsa bu durumda under-fitting oluşur. Under-fitting sonraki kısımlarında anlatılan sınıflandırma ve regresyon hata metrikleri ile kolaylıkla ortaya konulabilir.
Aşrı model uyumu (over-fitting): Kurulan modelde eğitilen veri seti (training data set)’yle gözlem verisine aşırı uyum gösterdiğinde ortaya çıkar. Bu durumda varyans yüksekken bias düşüktür.
Bahsedilen bu iki durumu kafamızda daha da canlı tutmak için bias ve varyans ilişkisi Şekil 2’de verilmiştir. Şekil’de biz modeli kurgularken olması gereken durumu gösteren Düşük Varyans-Düşük Bias uyumunu, diğer bir ifadeyle yüksek kesinlik (precision)-yüksek doğruluk (accuracy) hedefliyoruz. Diğer bir deyişle kurguladığımız model (Şekil 2 1 nolu model) ile gözlem değerlerini olabildiğince en yüksek doğruluk oranı ile tahmin ederken aynı zamanda varyansı düşük (yüksek kesinlik (precision)) tutmayı hedefliyoruz. Buna başardığımızda aslında iyi model uyumunu (good-fit) sağlamış ve iyi bir model kurmuş oluyoruz. Eksik model uyumu (under-fitting)’nda ise Şekil 2’de 3 nolu modelde görüleceği üzere elde edilen tahmin değerleri gözlem değerleri (kırmızı alan)’nden uzaklaşmakla birlikte hala tahmin değerleri ile gözlem değerleri arasında farklar, diğer bir deyişle varyans düşüktür. Aşırı model uyumu (over-fitting)’da ise Şekil 2’de 2 nolu modelde görüleceği üzere varyans yüksek iken bias düşüktür. 2 nolu modelde doğru değerler (gözlem değerleri)’i kurulan modelde yüksek doğrulukla (düşük bias=yüksek doğruluk (accuracy) tahmin edilse de gözlem değerleri ile tahmin değerleri arasındaki varyans yüksektir.
Şekil 2: Bias-Varyans İlişkisi
Veri Tipleri
Yükseltme algoritmaları ile sınıflandırma problemi çözüyorsak bağımlı değişkenin ya da cevap değişkeninin veri tipi nitel ve kategoriktir. Ancak, bu yöntem ile regresyon problemini çözüyorsak bağımlı değişkenin ya da cevap değişkeninin veri tipi niceldir. Veri tipleri kendi içerisinde 4 farklı alt sınıfta ele alınabilir. Bu veri tipleri alt sınıflarıyla birlikte Şekil 3’te verilmiştir.
Şekil 3: Veri Tipleri
Nicel Veri (Quantitative Data)
Şekil 3’te sunulan nicel veri tipi ölçülebilen veri tipi olup, kendi içerisinde temel olarak ikiye ayrılmaktadır. Bu veri tipine alt sınıflandırmalar dikkate alınarak sırasıyla örnek verelim.
Sürekli veri (Continous data): Tam sayı ile ifade edilmeyen veri tipi olup, zaman, sıcaklık, beden kitle endeksi, boy ve ağırlık ölçümleri bu veri tipine örnek verilebilir.
Kesikli veri (Discrete Data): Tam sayı ile ifade edilebilen veri tipi olup, bu veri tipine proje sayısı, popülasyon sayısı, öğrenci sayısı örnek verilebilir.
Nitel Veri (Qualitative Data)
Şekil 3’te verilen nitel veri tipi ölçülemeyen ve kategori belirten veri tipi olup, kendi içerisinde temel olarak ikiye ayrılmaktadır. Bu veri tipine alt sınıflandırmalar şöyledir:
Nominal veri: İki veya daha fazla cevap kategorisi olan ve sıra düzen içermeyen veri tipi olup, bu veri tipine medeni durum (evli, bekar) ve sosyal güvenlik türü (Bağkur, SSK, Yeşil Kart, Özel Sigorta) örnek gösterilebilir.
Ordinal veri: İki veya daha fazla kategorisi olan ancak sıra düzen belirten veri türüdür. Bu veri tipine örnek olarak eğitim düzeyleri (İlkokul, ortaokul, lise, üniversite ve yüksek lisans), yarışma dereceleri (1. , 2. ve 3.) ve illerin gelişmişlik düzeyleri (1. Bölge, 2. Bölge, 3. Bölge, 4. Bölge, 5. Bölge ve 6. Bölge) verilebilir.
Veri tiplerinden bahsedildikten sonra bu veri tiplerinin cevap değişkeni (bağımlı değişken) olduğu durumlarda seçilecek analiz yöntemini ele alalım. Temel olarak cevap değişkeni ölçülebilir numerik değişken ise regresyon, değilse sınıflandırma analizi yapıyoruz. Cevap değişkeni, diğer bir deyişle bağımlı değişken numerik ise bağımsız değişken veya değişkenlerin çıktı (output) / bağımlı değişken (dependent variable) / hedef değişken (target variable) veya değişkenlerin üzerindeki etkisini tahmin etmeye çalışıyoruz. Buradaki temel felsefeyi anlamak son derece önemlidir. Çünkü bu durum sizin belirleyeceğiniz analiz yöntemini de değiştirecektir.
Kullanılan analiz yöntemi ile kurulan modelde ya sınıflandırma problemini ya da regresyon problemini çözdüğümüzü ifade etmiştik. Ancak kurulan modellerde çözülen problemin sınıflandırma ya da regresyon oluşuna göre performans değerlendirmesi farklılaşmaktadır. Sınıflandırma problemlerinde kullanılan hata metrikleri ile regresyon hata metrikleri aynı değildir. Bu bağlamda ilk olarak sınıflandırma problemlerinin çözümünde kullanılan hata metriklerini ele alalım.
Sınıflandırma Problemlerinde Hata Metrikleri
Karışıklık matrisi (confusion matrix) olarak 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. Tablo 1’de hata metriklerinin hesaplanmasına esas teşkil eden karışıklık matrisi (confisioun matrix) 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.
Tablo 1: Karışıklık Matrisi (Confusion Matrix)
Kaynak: Stanford Üniversitesi
Tablo 1’de TP: Doğru Pozitifleri, FN: Yanlış Negatifleri, FP: Yanlış Pozitifleri ve TN: Doğru Negatifleri göstermektedir.
Şekil 3’te de yer verildiği üzere literatürde sınıflandırma modellerinin performansını değerlendirmede aşağıdaki hata metriklerinden yaygın bir şekilde yararlanıldığı görülmektedir. Sınıflandırma problemlerinin çözümüne yönelik Yükselme (Boosting: AdaBoost) algoritması kullanarak R’da yapmış olduğum çalışmanın linkini ilgilenenler için aşağıda veriyorum.
Topluluk Öğrenme Algoritmalarından Yükseltme Algoritması İle Gögüs Kanserinin Tahmini Üzerine Bir Vaka Çalışması: A Case Study on the Prediction of Breast Cancer Using Boosting Algorithm from Ensemble Learning Algorithms
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 modellerin perfomansı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.
Sınıflandırma hata metriklerini anlattıktan sonra daha kalıcı olması ve öğrenilmesi adına hazırladığım excel üzerinde bahsedilen bu metriklerin nasıl hesaplandığı gösterilmiştir. Excel dosyasını aşağıdaki linkten indirebilirsiniz.
Sınıflandırma Metrikleriİndir
Regresyon Problemlerinde Hata Metrikleri
Regresyon modellerinin performansını değerlendirmede literatürde aşağıdaki hata metriklerinden yaygın bir şekilde yararlanılmaktadır. Regresyon metrikleri eşitliklerinin verilmesi yerine sade bir anlatımla neyi ifade ettiği anlatılacaktır. Böylece formüllere boğulmamış olacaksınız.
SSE (Sum of Square Error): Tahmin edilen değerler ile gözlem değerleri arasındaki farkların kareleri toplamını ifade eder.
MSE (Mean Square Error): Ortalama kare hatası olarak adlandırılan bu hata tahmin edilen değerler ile gözlem değerleri arasındaki farkların karelerinin ortalamasını ifade eder.
RMSE (Root Mean Square Error): Kök ortalama kare hatası olarak adlandırılan bu hata ortalama kare hatasının karekökünü ifade etmektedir.
MAE (Mean Absolute Error): Ortalama mutlak hata olarak adlandırılan bu hata türü ise tahmin edilen değerler ile gözlem değerleri arasındaki farkların mutlak değerlerinin ortalamasını ifade etmektedir.
MAPE (Mean Absolute Percentage Error): Ortalama mutlak yüzdesel hata olarak adlandırılan bu hata türünde ilk olarak tahmin edilen değerler ile gözlem değerleri arasındaki farkların mutlak değerleri hesaplanır. Daha sonra hesaplanan farkları mutlak değerleri mutlak değerleri alınan gözlem değerlerine bölünür. En son durumda ise elde edilen bu değerlerin ortalaması alınır.
Bias: Tahmin edilen değerler ile gözlem değerleri arasındaki farkların ortalamasıdır. Bu yönüyle ortalama mutlak hata (MAE)’ya benzemektedir.
Regresyon hata metriklerini anlattıktan sonra daha kalıcı olması ve öğrenilmesi adına hazırladığım excel üzerinde bahsedilen bu metriklerin nasıl hesaplandığı gösterilmiştir. Excel dosyasını aşağıdaki linkten indirebilirsiniz.
Regresyon Metrikleri İndir
Çalışma kapsamında R programlama dili içerisinde bulunan “mlbench” paketi içerisinde “BostonHousing” veri seti kullanılarak multiple regresyon yöntemiyle regresyon problemi çözülecektir. Bu amaçla bağımlı değişken olan ABD’nin Boston bölgesindeki konutların medyan fiyatları tahmin edilecektir.
Metodoloji ve Uygulama Sonuçları
Çoklu Doğrusal Regresyon Yöntemi
Regresyon modeli aşağıdaki eşitlikteki gibi ifa edilebilir.
Yi=β0+β1X i1 +β2Xi2+…+βkXik +𝜀𝑖𝑗
Burada i=1,2,…n j=1,2,…k şeklinde tanımlanır.
Eşitlikte;
Yi: Bağımlı değişkeninin gözlenen i.inci
değerini
Xij: j.inci bağımsız değişkenin i.inci
düzeyindeki değerini
βj: j.inci regresyon katsayısını
εij: Hata terimini
k: Bağımsız değişken sayısını göstermektedir
Çoklu Doğrusal Regresyon Yöntemi Varsayımları
Çoklu doğrusal regresyon yöntemi gözlemlere en iyi uyum sağlayan regresyon doğrusunu çizmek için en küçük kareler yöntemini kullanır. Hesaplanan en küçük kareler regresyon denklemi regresyon doğrusu ile gözlemler arasındaki minimum kare hataları toplamına veya sapmalara sahiptir. Söylenenleri kafamızda daha da canlandırmak adına en küçük kareler yöntemi (method of least squares)’nin işleyişi Şekil 4’de verilmiştir.
Şekil 4: En Küçük Kareler Yöntemi (Method Of Least Squares)’nin İşleyişi
Kaynak: https://www.jmp.com
Değişken tipleri: Bütün bağımsız değişkenler nicel veya kategorik olmalıdır. Bağımlı değişken ise nicel kesikli veya süreklidir.
Varyans: Bağımsız değişkenlerin varyansı 0 olmamalıdır.
Çoklu doğrusal ilişki (Multicollinearity): 2 veya daha çok bağımsız değişken arasında mükemmel (r= 1 veya -1) veya mükemmele yakın (-1 veya 1’e yakın) bir ilişki olmamalıdır. Yani değişkenler arasında çok yüksek bir korelasyon bulunmamalıdır. Eğer kurulan regresyon modelinde değişkenler arasında güçlü bir ilişki varsa değişkenlerin bireysel önem düzeyinin belirlenmesi zorlaşacaktır. Bu ilişkiyi belirlemenin bir yolu da değişkenler arasındaki korelasyonun korelasyon matrisi ile ortaya konulmasıdır. Tabi burada belirtilen korelasyon katsayıların 0,80 ve üzerinde olmasıdır. Yaygın olarak kullanılan ilişki belirleme yöntemi varyans enflasyon faktörü (variance inflation factor) kısa adıyla VIF’tir. VIF de korelasyon matrisi gibi bağımsız değişkenler arasındaki ilişkinin gücünü ortaya koymaktadır. VIF değeri 10’dan büyükse kurulan regresyon modelinde endişe kaynağı olarak görülmelidir. VIF 1 / 1-R2 eşitliği ile hesaplanmaktadır. VIF ölçüm parametresine bağlı olarak hesaplanan tolerans (tolerance) seviyesi de çoklu doğrusal ilişkiyi ortaya koymada yardımcı olabilmektedir. Tolerans seviyesi VIF parametresinin çarpmaya göre tersidir. Diğer bir ifadeyle 1 / VIF eşitliği ile hesaplanmaktadır. 0,1’in altındaki tolerans seviyeleri çoklu doğrusal ilişki açısından gözden geçirilmelidir. Çoklu doğrusal ilşkiyi ortaya koymanın bir yolu da kurulan modelden üretilen varyans oranları ve normalize edilmiş özvektör değerlerinin hesaplanmasıdır.
Homoskedastisite (Homoscedasticity): Bağımsız değişkenlerin her seviyesinde artıklar (residuals)’ın varyansı aynı / sabit kalmalıdır, diğer bir ifadeyle varyanslar homojen olmalıdır. Eğer varyanslar eşit değilse heteroskedastisite (heteroscedasticity) durumu ortaya çıkar. Bu iki durum aşağıdaki grafikte karşılaştırmalı olarak verilmiştir.
Şekil 4: Homoskedastisite ve Heteroskedastisite
Kaynak: https://marcfbellemare.com/
Otokorelasyon: Hataların bağımsızlığı anlamına da gelen otokorelasyon bir gözlemle ilişkili hataların, diğer gözlemlerin hataları arasında korelasyon olmaması gerektiğini ileri sürer. Otokorelasyon testi için artıkların hatalarına bakılır. Bu varsayım Durbin-Watson testi test edilebilir. Test istatistiği 0 ile 4 arasında değişmektedir. 2’den büyük bir değer negatif otokorelasyonu, 2’den küçük değer ise pozitif otokorelasyonu göstermektedir.
Doğrusallık (Linearity): Modellenen ilişkinin doğrusal olması gerektiğini öne sürer. Eğer doğrusal olmayan (non-linear) bir ilişki varsa bulguların genellenebilirliği açısından problem oluşturacaktır.
Kurulan regresyon analiz modellerinde güvenilir bir regresyon modeli kurmak için örneklem büyüklüğünün asgari şartları karşılaması gerekmektedir. Buna göre;
Kurulan regresyon modelinin tamamını değerlerdirmek için önerilen minimum örneklem büyüklüğü 50 + 8k‘tır. k burada bağımsız değişkenlerin sayısını göstermektedir. Örneğin bağımsız değişkenlerin sayısı 10 ise minimum örneklem büyüklüğü 50 + 8 X 10 eşitliğinden 130’dur.
Eğer bireysel olarak bağımsız değişkenler değerlendirilecek ise minimum örneklem büyüklüğü 104 + k‘tır. Örneğin bağımsız değişkenlerin sayısı 10 ise minimum örneklem büyüklüğü 104 + 8 eşitliğinden 112’dir.
Diğer taraftan örneklem büyüklüğü ve bağımsız değişkenin sayısına göre Cohen’in kriterini kullanarak etki büyüklüğünü hesaplayabiliriz. Cohen’in etki büyüklüğü örneklem büyüklüğü ve bağımsız değişken sayısı artıkça etki büyüklüğü azalış göstermektedir. Bu durum istenen bir durumdur. Cohen’in etki büyüklüğü R= k / (N-1) formülü ile hesaplanmaktadır. k burada bağımsız değişken sayısını, N ise örneklem / popülasyon büyüklüğünü / gözlem sayısını göstermektedir. Yukarıdaki veriler kullanılarak örnek vermek gerekirse 8 / ( 112-1) =0,07‘dir. R katsayısının 0 olması etki olmadığı anlamına gelmektedir ki, bu durumda örneklem büyüklüğünün ve değişken sayısının kurulan regresyon modelinde optimal noktaya ulaştığı anlamına gelir.
Veri seti
ABD’nin Boston bölgesinde konutların medyan fiyatları (hedef değişken) tahmin edilmiştir. Diğer bir ifadeyle, bu çalışmada regresyon problemi çözmüş olacağız. Analizde kullanılan veri seti ABD Nüfus Bürosu tarafından Boston bölgesindeki konutlarla ilgili olarak toplanan verilerden oluşmaktadır. Veri setindeki toplam gözlem sayısı 506, değişken sayısı ise 14’tür. Bu veri setine R programlama yazılımında “mlbench” paketi içerisinde “BostonHousing” olarak yer verilmiştir. Veri setinde yer alan değişkenler ve değişkenlerin veri tipleri şöyledir:
crim: per capita crime rate by town. Veri tipi nicel ve süreklidir.
zn: proportion of residential land zoned for lots over 25,000 sq.ft. Veri tipi nicel ve kesiklidir.
indus: proportion of non-retail business acres per town. Veri tipi nicel ve süreklidir.
chas: Charles River dummy variable (1 if tract bounds river; 0 otherwise). Veri tipi nitel ve nominal kategoriktir.
nox: nitric oxides concentration (parts per 10 million): Veri tipi nicel ve süreklidir.
rm: average number of rooms per dwelling. Veri tipi nicel ve süreklidir.
age: proportion of owner-occupied units built prior to 1940. Veri tipi nicel ve süreklidir.
dis: weighted distances to five Boston employment centres. Veri tipi nicel ve kesiklidir.
rad: index of accessibility to radial highways. Veri tipi nicel ve süreklidir.
tax: full-value property-tax rate per $10,000. Veri tipi nicel ve kesiklidir.
ptratio: pupil-teacher ratio by town. Veri tipi nicel ve süreklidir.
b: 1000(Bk – 0.63)^2 where Bk is the proportion of blacks by town. Veri tipi nicel ve süreklidir.
lstat: % lower status of the population. Veri tipi nicel ve süreklidir.
medv: Median value of owner-occupied homes in $1000’s. Veri tipi nicel ve süreklidir.
Bu kapsamda cevap değişkeni (bağımlı değişken) olan “medv” yani konut fiyatlarının medyan değeri geri kalan 13 bağımsız değişken kullanılarak çoklu doğrusal regresyon analiz yöntemiyle tahmin edilecektir. Analizde kullanılan veri setini aşağıdaki linkten indirebilirsiniz.
Boston Konut Fiyatları Veri Seti İndir
Şimdi veri setini tanıdıktan sonra adım adım (step by step) analize başlayabiliriz. Analizde R programlama dili kullanarak analiz adımları R kod bloklarında verilmiştir.
Yüklenecek R kütüphaneleri

rm(list=ls())

kütüphaneler = c("dplyr","tibble","tidyr","ggplot2","formattable","readr","readxl","xlsx", "pastecs","fpc", "DescTools","e1071", "DMwR","caret", "viridis","GGally","ggpurr","psych","writexl","ggfortify","explore","MASS","gbm")
 
sapply(kütüphaneler, require, character.only = TRUE)
Ver setinin okunması

data(BostonHousing)
veri<-BostonHousing
Ver setinin xlsx dosyasına yazdırılması

write_xlsx(veri, "Bostonkonutfiyatları.xlsx")#xlsx dosyası için
Yukarıdaki R kod bloğunun çalıştırılmasından sonra veri seti xlsx uzantılı dosyaya yazdırılmıştır. Elde edilen veri seti dosyası xlsx uzantılı olarak aşağıdan indirilebilir.Boston Konut Fiyatları Veri Setiİndir
Veri setinin görselleştirilmesi ve tanımlayıcı istatistikler

#veri setindeki ilk 3 değişkenin görselleştirilmesi
veri[,1:3] %>% explore_all()
#veri setindeki 4,5,6 ve 7. değişkenlerin görselleştirilmesi
veri[,4:7] %>% explore_all()
#veri setindeki 8,9 ve 10. değişkenlerin görselleştirilmesi
veri[,8:10] %>% explore_all()
#veri setindeki 11,12,13 ve 14. değişkenlerin görselleştirilmesi
veri[,11:14] %>% explore_all()
 
#veri setindeki ilk 10 gözlem
formattable(head(veri,10))
Yukarıdaki R kod bloğunun çalıştırılmasından sonra veri setindeki ilk 3 değişkenin grafiği aşağıda verilmiştir. Grafikte görüleceği üzere eksik gözlem (missing data: NA) bulunmamaktadır.
Yukarıdaki R kod bloğunun çalıştırılmasından sonra veri setindeki 4,5,6 ve 7. değişkenlerin grafiği aşağıda verilmiştir. Grafikte görüleceği üzere eksik gözlem (missing data: NA) bulunmamaktadır.
Yukarıdaki R kod bloğunun çalıştırılmasından sonra veri setindeki 8,9 ve 10. değişkenlerin grafiği aşağıda verilmiştir. Grafikte görüleceği üzere eksik gözlem (missing data: NA) bulunmamaktadır.
Yukarıdaki R kod bloğunun çalıştırılmasından sonra veri setindeki 11, 12, 13 ve 14. değişkenlerin grafiği aşağıda verilmiştir. Grafikte görüleceği üzere eksik gözlem (missing data: NA) bulunmamaktadır.
Yukarıdaki R kod bloğunun çalıştırılmasından sonra Boston Konut Fiyatları veri setindeki ilk 10 gözlem aşağıdaki tabloda verilmiştir.
Değişkenler arasındaki korelasyonun hesaplanması
Kategorik değişkenlerin korelasyon katsayılarını hesaplamak için yazılan R kod bloğu aşağıdadır. Değişkenler arasındaki korelasyonu hesaplamak için Kikare ve Anova testleri kullanılmıştır. Korelasyon katsayısı hesaplanacak her iki değişkenin de nitel ve nominal olmasından dolayı Kikare, korelasyon katsayısı hesaplanacak değişkenlerden biri nicel kesikli ve diğeri nominal olduğundan Anova testleri yapılmıştır. Korelasyon katsayısı hesaplanacak değişkenlerden biri ordinal (sıralı) olsaydı bu durumda Spearman korelasyon (SpearmanRho) katsayısının hesaplanması gerekecekti. Diğer taraftan, eğer her iki değişken nicel (sürekli ve kesikli) olsaydı bu durumda Pearson korelasyon katsayısını hesaplayacaktık.

#Pearson korelasyon matrisi 
cor.plot(veri[,-4], main="Korelasyon Matrisi")#grafik formatında
kormatris<-cor(veri[,-4])#matris formatınta
kormatris
findCorrelation(kormatris, cutoff=0.8,names=TRUE, exact = TRUE)
Yukarıdaki R kod bloğunun çalıştırılmasından sonra nicel ve kesikli değişkenlere ait Pearson korelasyon matrisi aşağıdaki şekilde verilmiştir. Değişken çiftleri nicel (sürekli ve kesikli) olduğu için Pearson korelasyon katsayılarını hesapladık.
Yukarıdaki R kod bloğunun çalıştırılmasından sonra elde edilen korelasyon katsayıları matris formatında aşağıda verilmiştir.

              crim         zn      indus        nox         rm        age
crim     1.0000000 -0.2004692  0.4065834  0.4209717 -0.2192467  0.3527343
zn      -0.2004692  1.0000000 -0.5338282 -0.5166037  0.3119906 -0.5695373
indus    0.4065834 -0.5338282  1.0000000  0.7636514 -0.3916759  0.6447785
nox      0.4209717 -0.5166037  0.7636514  1.0000000 -0.3021882  0.7314701
rm      -0.2192467  0.3119906 -0.3916759 -0.3021882  1.0000000 -0.2402649
age      0.3527343 -0.5695373  0.6447785  0.7314701 -0.2402649  1.0000000
dis     -0.3796701  0.6644082 -0.7080270 -0.7692301  0.2052462 -0.7478805
rad      0.6255051 -0.3119478  0.5951293  0.6114406 -0.2098467  0.4560225
tax      0.5827643 -0.3145633  0.7207602  0.6680232 -0.2920478  0.5064556
ptratio  0.2899456 -0.3916785  0.3832476  0.1889327 -0.3555015  0.2615150
b       -0.3850639  0.1755203 -0.3569765 -0.3800506  0.1280686 -0.2735340
lstat    0.4556215 -0.4129946  0.6037997  0.5908789 -0.6138083  0.6023385
medv    -0.3883046  0.3604453 -0.4837252 -0.4273208  0.6953599 -0.3769546
               dis        rad        tax    ptratio          b      lstat
crim    -0.3796701  0.6255051  0.5827643  0.2899456 -0.3850639  0.4556215
zn       0.6644082 -0.3119478 -0.3145633 -0.3916785  0.1755203 -0.4129946
indus   -0.7080270  0.5951293  0.7207602  0.3832476 -0.3569765  0.6037997
nox     -0.7692301  0.6114406  0.6680232  0.1889327 -0.3800506  0.5908789
rm       0.2052462 -0.2098467 -0.2920478 -0.3555015  0.1280686 -0.6138083
age     -0.7478805  0.4560225  0.5064556  0.2615150 -0.2735340  0.6023385
dis      1.0000000 -0.4945879 -0.5344316 -0.2324705  0.2915117 -0.4969958
rad     -0.4945879  1.0000000  0.9102282  0.4647412 -0.4444128  0.4886763
tax     -0.5344316  0.9102282  1.0000000  0.4608530 -0.4418080  0.5439934
ptratio -0.2324705  0.4647412  0.4608530  1.0000000 -0.1773833  0.3740443
b        0.2915117 -0.4444128 -0.4418080 -0.1773833  1.0000000 -0.3660869
lstat   -0.4969958  0.4886763  0.5439934  0.3740443 -0.3660869  1.0000000
medv     0.2499287 -0.3816262 -0.4685359 -0.5077867  0.3334608 -0.7376627
              medv
crim    -0.3883046
zn       0.3604453
indus   -0.4837252
nox     -0.4273208
rm       0.6953599
age     -0.3769546
dis      0.2499287
rad     -0.3816262
tax     -0.4685359
ptratio -0.5077867
b        0.3334608
lstat   -0.7376627
medv     1.0000000
Korelasyon katsayılarının kontrol edilmesi
Bu kısımda pearson korelasyon katsayılarının 0,80 üzerinde olup olmadığı kontrol edilmiş olup, buna ilişkin yazılan R kod bloğuna aşağıda yer verilmiştir.

kormatris<-cor(veri[,-4])
findCorrelation(kormatris, cutoff=0.8,names=TRUE, exact = TRUE)
Yukarıdaki R kod bloğunun run edilmesi ile elde edilen sonuç aşağıda verilmiştir. Tablodan tax değişkeninin korelasyon katsayısının tamamının 0.80’in üzerinde olduğu (r=0,92) olduğu görülmektedir. Bu değişken ilk modelde yer alacaktır ancak kurulacak ikinci modelde yer almayacaktır.

[1] "tax"
Nicel değişkenlerin normal dağılıma uyup uymadığının kontrol edilmesi

#Q-Q plot ile crim değişkeninin normal dağılıma uyumu incelenmiştir.
v1<-ggqqplot(veri$crim, ylab = "crim", color="red")

#Q-Q plot ile zn değişkeninin normal dağılıma uyumu incelenmiştir.
v2<-ggqqplot(veri$zn, ylab = "zn", color="red")

#Q-Q plot ile indus değişkeninin normal dağılıma uyumu incelenmiştir.
v3<-ggqqplot(veri$indus, ylab = "indus", color="red")

#Q-Q plot ile nox değişkeninin normal dağılıma uyumu incelenmiştir.
v4<-ggqqplot(veri$nox, ylab = "crim", color="red")

#Q-Q plot ile rm değişkeninin normal dağılıma uyumu incelenmiştir.
v5<-ggqqplot(veri$rm, ylab = "rm", color="red")

#Q-Q plot ile age değişkeninin normal dağılıma uyumu incelenmiştir.
v6<-ggqqplot(veri$age, ylab = "age", color="red")

#Q-Q plot ile dis değişkeninin normal dağılıma uyumu incelenmiştir.
v7<-ggqqplot(veri$dis, ylab = "dis", color="red")

#Q-Q plot ile rad değişkeninin normal dağılıma uyumu incelenmiştir.
v8<-ggqqplot(veri$rad, ylab = "rad", color="red")

#Q-Q plot ile tax değişkeninin normal dağılıma uyumu incelenmiştir.
v9<-ggqqplot(veri$tax, ylab = "tax", color="red")

#Q-Q plot ile ptratio değişkeninin normal dağılıma uyumu incelenmiştir.
v10<-ggqqplot(veri$ptratio, ylab = "ptratio", color="red")

#Q-Q plot ile b değişkeninin normal dağılıma uyumu incelenmiştir.
v11<-ggqqplot(veri$b, ylab = "b", color="red")

#Q-Q plot ile lstat değişkeninin normal dağılıma uyumu incelenmiştir.
v12<-ggqqplot(veri$lstat, ylab = "lstat", color="red")

#Q-Q plot ile medv değişkeninin normal dağılıma uyumu incelenmiştir.
v13<-ggqqplot(veri$medv, ylab = "medv", color="red")

ggarrange(v1,v2,v3,v4)#ilk dört değişken

ggarrange(v5,v6,v7,v8)#2. ilk dört değişken

ggarrange(v9,v10,v11,v12, v13)#3. ilk beş değişken
Yukarıdaki R kod bloğunun çalıştırılmasından sonra ilk gruba ait dört değişkeninin normal dağılıma uyup uymadığını ortaya koymak için çizilen Q-Q grafiği aşağıda verilmiştir.
Yukarıdaki R kod bloğunun çalıştırılmasından sonra ikinci grup ilk dört değişkeninin normal dağılıma uyup uymadığını ortaya koymak için çizilen Q-Q grafiği aşağıda verilmiştir.
Yukarıdaki R kod bloğunun çalıştırılmasından sonra üçüncü gruba ait ilk beş değişkeninin normal dağılıma uyup uymadığını ortaya koymak için çizilen Q-Q grafiği aşağıda verilmiştir.
Çoklu regresyon modelinin kurulması
Kurulan çoklu regresyon modelinde bağımlı değişken medv, diğer değişkenler ise bağımsız olup, regresyon modeline ilişkin R kod bloğu aşağıda verilmiştir.

model1 <- glm(medv ~. , data = veri)
summ(model1)

#alternatif
model1 <- lm(medv ~. , data = veri)
summary(model1)
Yukarıdaki R kod bloğunun çalıştırılmasından sonra elde edilen regresyon model özeti aşağıda verilmiştir. Çıktıda yer verilen AIC (Akaike information criterion) parametresi kurulan tek bir modelin değerlendirilmesinde çok fazla anlam ifade etmemekle birlikte BIC (Akaike information criterion) parametresinde olduğu gibi ne kadar düşük olursa kurulan modelin o kadar gözlem verisine uyum sağladığını göstermektedir. Bu açıdan bakıldığında aslında bu iki parametrenin kurulan birden fazla modelin performansının değerlendirilmesinde kullanılması daha uygundur.

MODEL INFO:
Observations: 506
Dependent Variable: medv
Type: Linear regression 

MODEL FIT:
χ²(13) = 31637.51, p = 0.00
Pseudo-R² (Cragg-Uhler) = 0.74
Pseudo-R² (McFadden) = 0.19
AIC = 3027.61, BIC = 3091.01 

Standard errors: MLE
-------------------------------------------------
                      Est.   S.E.   t val.      p
----------------- -------- ------ -------- ------
(Intercept)          36.46   5.10     7.14   0.00
crim                 -0.11   0.03    -3.29   0.00
zn                    0.05   0.01     3.38   0.00
indus                 0.02   0.06     0.33   0.74
chas1                 2.69   0.86     3.12   0.00
nox                 -17.77   3.82    -4.65   0.00
rm                    3.81   0.42     9.12   0.00
age                   0.00   0.01     0.05   0.96
dis                  -1.48   0.20    -7.40   0.00
rad                   0.31   0.07     4.61   0.00
tax                  -0.01   0.00    -3.28   0.00
ptratio              -0.95   0.13    -7.28   0.00
b                     0.01   0.00     3.47   0.00
lstat                -0.52   0.05   -10.35   0.00
-------------------------------------------------

Estimated dispersion parameter = 22.52 
Kurulan modelin özetinde eğer güven aralıklarını da verecek olursak aşağıdaki R kod bloğu ile bu mümkündür.

summ(model1, confint = TRUE, digits = 3)
Yukarıdaki R kod bloğunun çalıştırılmasından sonra elde çoklu regresyon model çıktısına güven aralıkları ile birlikte aşağıda yer verilmiştir.

MODEL INFO:
Observations: 506
Dependent Variable: medv
Type: Linear regression 

MODEL FIT:
χ²(13) = 31637.511, p = 0.000
Pseudo-R² (Cragg-Uhler) = 0.741
Pseudo-R² (McFadden) = 0.186
AIC = 3027.609, BIC = 3091.007 

Standard errors: MLE
-----------------------------------------------------------------
                       Est.      2.5%     97.5%    t val.       p
----------------- --------- --------- --------- --------- -------
(Intercept)          36.459    26.457    46.462     7.144   0.000
crim                 -0.108    -0.172    -0.044    -3.287   0.001
zn                    0.046     0.020     0.073     3.382   0.001
indus                 0.021    -0.100     0.141     0.334   0.738
chas1                 2.687     0.998     4.375     3.118   0.002
nox                 -17.767   -25.253   -10.280    -4.651   0.000
rm                    3.810     2.991     4.629     9.116   0.000
age                   0.001    -0.025     0.027     0.052   0.958
dis                  -1.476    -1.866    -1.085    -7.398   0.000
rad                   0.306     0.176     0.436     4.613   0.000
tax                  -0.012    -0.020    -0.005    -3.280   0.001
ptratio              -0.953    -1.209    -0.696    -7.283   0.000
b                     0.009     0.004     0.015     3.467   0.001
lstat                -0.525    -0.624    -0.425   -10.347   0.000
-----------------------------------------------------------------

Estimated dispersion parameter = 22.518 
Regresyon denkleminin yazılması
Değişkenlerin coefficient (katsayı) tahminlerinden yola çıkarak 1 nolu çoklu doğrusal regresyon modelimizin denklemini yazalım.
Medv (y)= intercept + crim*x1 + zn*x2 + indus*x3 + chas1*x4 + nox*x5 + rm*x6 + age*x7 + dis*x8 + rad*x9 + tax*x10 + ptratio*x11 + b*x12 + lstat*x13
Şimdi yukarıda hesaplanan katsayıları denklemde yerine yazalım. Ancak denkleme sadece istatistiksel olarak anlamlı çıkan değişkenleri dahil edelim.
Medv (y)= 36.459 – 0.108*X1 + 0.046*x2 + 2.687*x4 – 17.767*x5 + 3.810*x6 – 1.476*x8 + 0.306*x9 – 0.012*x10 – 0.953*x11 + 0.009*x12 – 0.525*x13
Elde edilen denkleme göre çoklu doğrusal regresyon modelini şöyle yorumlayabiliriz.
1. crim değişkenindeki bir birimlik değişim bağımlı değişken olan medv (medyan ev fiyatlarını) değişkenini 0,108 kat azaltmaktadır.
2. zn değişkenindeki bir birimlik değişim bağımlı değişken olan medv (medyan ev fiyatlarını) değişkenini 0.046 kat artırmaktadır. Etkisi bağımlı değişken üzerinde yok denecek kadar azdır
3. chas katogorik değişkenindeki bir birimlik değişim 0 kategorisine göre bağımlı değişken olan medv (medyan ev fiyatlarını) değişkenini 2.687 kat artırmaktadır.
5. nox değişkenindeki bir birimlik değişim bağımlı değişken olan medv (medyan ev fiyatlarını) değişkenini -17.767 kat azaltmaktadır.
6. rm değişkenindeki bir birimlik değişim bağımlı değişken olan medv (medyan ev fiyatlarını) değişkenini 3.810 kat artırmaktadır.
7. dis değişkenindeki bir birimlik değişim bağımlı değişken olan medv (medyan ev fiyatlarını) değişkenini -1.476 kat azaltmaktadır.
8. rad değişkenindeki bir birimlik değişim bağımlı değişken olan medv (medyan ev fiyatlarını) değişkenini 0.306 kat artırmaktadır.
9. tax değişkenindeki bir birimlik değişim bağımlı değişken olan medv (medyan ev fiyatlarını) değişkenini -0.012 kat azaltmaktadır. Etkisi bağımlı değişken üzerinde yok denecek kadar azdır.
10. ptratio değişkenindeki bir birimlik değişim bağımlı değişken olan medv (medyan ev fiyatlarını) değişkenini -0.953 kat azaltmaktadır.
11. b değişkenindeki bir birimlik değişim bağımlı değişken olan medv (medyan ev fiyatlarını) değişkenini 0.009 kat artırmaktadır. Etkisi bağımlı değişken üzerinde yok denecek kadar azdır.
12. lstat değişkenindeki bir birimlik değişim bağımlı değişken olan medv (medyan ev fiyatlarını) değişkenini -0.525 kat azaltmaktadır.
13. zn değişkenindeki bir birimlik değişim ise medv (medyan ev fiyatlarını) değişkenini 0.046 artırmaktadır.
Regresyon modelinin raporlanması
Regresyon modelini kurduk ve özetini aldık. Şimdi de kurduğum bu regresyon modelini aşağıda yazdığım R kod bloğu yardımıyla raporlayalım ve xlsx uzantılı bir dosyaya yazdıralım.

export_summs(model1, scale = FALSE, to.file = "xlsx", file.name = "model1.xlsx")#aynı zamanda xlsx uzantılı dosyaya yazdırmak için

export_summs(model1, scale = FALSE, to.file = "docx", file.name = "model1.docx")
Yukarıdaki R kod bloğu çalıştırılması ile hem model xlsx dosyasına yazdırılmış hem de R konsolunda sonuçlarına ulaştık. Model rapor çıktısı aşağıda verilmiştir. Raporda parantez içinde yer alanlar standart hata (S.E)’yı göstermektedir.

─────────────────────────────────────────────────
                                 Model 1         
                        ─────────────────────────
  (Intercept)                         36.46 ***  
                                      (5.10)     
  crim                                -0.11 **   
                                      (0.03)     
  zn                                   0.05 ***  
                                      (0.01)     
  indus                                0.02      
                                      (0.06)     
  chas1                                2.69 **   
                                      (0.86)     
  nox                                -17.77 ***  
                                      (3.82)     
  rm                                   3.81 ***  
                                      (0.42)     
  age                                  0.00      
                                      (0.01)     
  dis                                 -1.48 ***  
                                      (0.20)     
  rad                                  0.31 ***  
                                      (0.07)     
  tax                                 -0.01 **   
                                      (0.00)     
  ptratio                             -0.95 ***  
                                      (0.13)     
  b                                    0.01 ***  
                                      (0.00)     
  lstat                               -0.52 ***  
                                      (0.05)     
                        ─────────────────────────
  N                                  506         
  AIC                               3027.61      
  BIC                               3091.01      
  Pseudo R2                            0.74      
─────────────────────────────────────────────────
  *** p < 0.001; ** p < 0.01; * p < 0.05.       
Şimdi de aynı kod bloğunun çalıştırılması ile raporun xlsx dosyasına yazdırılmış versiyonunu verelim. Aşağıdaki linkten raporun xlsx uzantılı versiyonunu indirebilirsiniz.
Modelin Raporuİndir
Kurulan modelin özeti alternatif olarak aşağıda yazılan R kod bloğunun çalıştırılması ile de elde edilebilir.

stargazer(model1, scale=F,  type="text", digits=2)#fonksiyon içerisine out="....txt" yazarsınız özeti txt uzantılı olarak kaydetmek de mümkündür.
Yukarıdaki R kod bloğunun çalıştırılması ile elde edilen model özeti aşağıda verilmiştir.

===============================================
                        Dependent variable:    
                    ---------------------------
                               medv            
-----------------------------------------------
crim                         -0.11***          
                              (0.03)           
                                               
zn                            0.05***          
                              (0.01)           
                                               
indus                          0.02            
                              (0.06)           
                                               
chas1                         2.69***          
                              (0.86)           
                                               
nox                          -17.77***         
                              (3.82)           
                                               
rm                            3.81***          
                              (0.42)           
                                               
age                            0.001           
                              (0.01)           
                                               
dis                          -1.48***          
                              (0.20)           
                                               
rad                           0.31***          
                              (0.07)           
                                               
tax                          -0.01***          
                              (0.004)          
                                               
ptratio                      -0.95***          
                              (0.13)           
                                               
b                             0.01***          
                              (0.003)          
                                               
lstat                        -0.52***          
                              (0.05)           
                                               
Constant                     36.46***          
                              (5.10)           
                                               
-----------------------------------------------
Observations                    506            
R2                             0.74            
Adjusted R2                    0.73            
Residual Std. Error       4.75 (df = 492)      
F Statistic          108.08*** (df = 13; 492)  
===============================================
Note:               *p<0.1; **p<0.05; ***p<0.01

======
110.24
------
Değişkenlerin modeldeki nispi önem düzeyleri
Kurulan regresyon modelinde nispi önem ağrlıklarını (relative importances) hesaplamak için iki yöntem kullanılmış ve karşılaştırmalı olarak sunulmuştur. Kullanılan yöntemlerinden ilki lmg olup, regresörler arasındaki sıralamalara göre ortalama R ^ 2 katkısını ifade etmektedir. Diğer yöntem ise betasq olup, normalize edilmiş kare katsayını göstermektedir. Nispi önem ağırlıklarını hesaplamak için yazılan R kod bloğu aşağıda verilmiştir.

nispionem<-calc.relimp(model1, type = c("lmg","betasq"), rela = TRUE)
nispionem#lmg ve betasq yöntemleri kullanarak karşılaştırmalı olarak nispi önem ağırlıklarını vermek için
Yukarıdaki R kod bloğunun son satırı çalıştırılmasından sonra lmg ve betasq yöntemlerine göre bağımsız değişkenlerin nispi önem ağırlıkları aşağıda verilmiştir. Elde edilen bulgular en yüksek nispi önem ağırlığına sahip değişkenin lstat değişkeni olduğunu göstermektedir. Bu değişkeni sırasıyla rm ve ptratio değişkenleri izlemiştir.

Response variable: medv 
Total response variance: 84.58672 
Analysis based on 506 observations 

13 Regressors: 
crim zn indus chas nox rm age dis rad tax ptratio b lstat 
Proportion of variance explained by model: 74.06%
Metrics are normalized to sum to 100% (rela=TRUE). 

Relative importance metrics: 

               lmg       betasq
crim    0.03669197 1.597789e-02
zn      0.03349910 2.169676e-02
indus   0.05101231 3.682211e-04
chas    0.02139033 8.620330e-03
nox     0.04511571 7.845783e-02
rm      0.25259867 1.326430e-01
age     0.02975151 7.028187e-06
dis     0.04087946 1.787074e-01
rad     0.03190385 1.314540e-01
tax     0.04967225 7.999602e-02
ptratio 0.10602348 7.875477e-02
b       0.03093651 1.337755e-02
lstat   0.27052485 2.599392e-01

Average coefficients for different model sizes: 

                  1X          2Xs          3Xs           4Xs          5Xs
crim     -0.41519028  -0.27876734  -0.21102769  -0.172845863  -0.14899982
zn        0.14213999   0.09177589   0.06926785   0.058187805   0.05208479
indus    -0.64849005  -0.49907219  -0.39245035  -0.312711078  -0.25044986
chas      6.34615711   6.13625177   5.79137684   5.378363951   4.96039109
nox     -33.91605501 -23.64184669 -17.74630522 -14.537764121 -12.99734886
rm        9.10210898   8.07541798   7.46905711   7.011233964   6.61054979
age      -0.12316272  -0.07450317  -0.04834524  -0.033245015  -0.02390811
dis       1.09161302   0.10952005  -0.47255267  -0.833695790  -1.06499158
rad      -0.40309540  -0.20593927  -0.08194586   0.001678813   0.06198805
tax      -0.02556810  -0.02017034  -0.01665270  -0.014304609  -0.01271040
ptratio  -2.15717530  -1.74062066  -1.52445277  -1.389315454  -1.29154159
b         0.03359306   0.02243776   0.01743324   0.014808955   0.01324295
lstat    -0.95004935  -0.90871002  -0.86922333  -0.830576846  -0.79243771
                 6Xs          7Xs          8Xs           9Xs          10Xs
crim     -0.13318972  -0.12244878  -0.11518841  -0.110479262  -0.107740227
zn        0.04841098   0.04611642   0.04473486   0.044039341   0.043909618
indus    -0.19989046  -0.15740182  -0.12065007  -0.088070978  -0.058531713
chas      4.56663532   4.20812708   3.88683375   3.600046913   3.342756614
nox     -12.49075417 -12.61748098 -13.12577086 -13.860628817 -14.730291533
rm        6.23447431   5.87015426   5.51253464   5.160160375   4.813205720
age      -0.01774178  -0.01339689  -0.01012959  -0.007506479  -0.005261198
dis      -1.21554565  -1.31379414  -1.37739662  -1.417937166  -1.443287731
rad       0.10808364   0.14515543   0.17645934   0.204220581   0.230033618
tax      -0.01163317  -0.01094108  -0.01056128  -0.010452258  -0.010588444
ptratio  -1.21468054  -1.15187362  -1.09982518  -1.056675250  -1.021201281
b         0.01221866   0.01149901   0.01096173   0.010537971   0.010185605
lstat    -0.75484432  -0.71798862  -0.68210391  -0.647421018  -0.614154947
                 11Xs          12Xs          13Xs
crim     -0.106584888  -0.106741334 -1.080114e-01
zn        0.044279575   0.045117684  4.642046e-02
indus    -0.031119628  -0.005017834  2.055863e-02
chas      3.108982366   2.892438686  2.686734e+00
nox     -15.684182425 -16.698441350 -1.776661e+01
rm        4.472316347   4.137922082  3.809865e+00
age      -0.003220995  -0.001266585  6.922246e-04
dis      -1.458920162  -1.468724058 -1.475567e+00
rad       0.255062878   0.280176177  3.060495e-01
tax      -0.010953167  -0.011536415 -1.233459e-02
ptratio  -0.992503316  -0.969873098 -9.527472e-01
b         0.009876605   0.009590626  9.311683e-03
lstat    -0.582502652  -0.552645344 -5.247584e-01
Marjinal etki düzeylerinin hesaplanması
Marjinal etki düzeyi, tahmincilerin (bağımsız değişkenlerin) sonuç değişkeni üzerindeki etkisini tanımlamak için kullanılabilecek alternatif bir metriktir. Marjinal etkiler, bağımsız değişkendeki bir birim artışın oluşturduğu değişim olasılığını göstermektedir.

#Marjinal etki düzeyleri tablosu
margineffect= margins(model1)
# Summary of marginal effect
margineffect=summary(margineffect) %>% mutate_at(2:7, round, 3) %>% arrange(desc(AME))
formattable(margineffect)
 
#Marjinal etki düzeylerinin grafiği
mgrafik= margins(model1)
plot(mgrafik, main="Ortalama Marjinal Etki (AME) Düzeyleri Grafiği", ylab="AME", xlab="Faktörler")
Yukarıdaki R kod bloğunun çalıştırılmasından sonra elde edilen ortalama marjinal etki düzeyleri (AME) aşağıdaki tabloda verilmiştir.
Yukarıdaki R kod bloğunun çalıştırılmasından sonra elde edilen ortalama marjinal etki (AME) düzeylerinin grafiği ise aşağıda verilmiştir.
Alternatif: Değişkenlerin önem düzeyleri

n<-varImp(model1)
n<-rownames(n)
n<-n %>% as_tibble()
varImp(model1) %>% as_tibble() %>% rename("Onem_Duzeyi"=Overall) %>% add_column("Değişken"=n$value,.before="Onem_Duzeyi") %>% mutate_if(is.numeric, round, 3) %>% arrange(desc(Onem_Duzeyi)) %>% formattable()
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.
Tahmin edilen değerler ile test veri setindeki gözlem değerlerinin karşılaştırılması

tahmin<-predict(model1, veri)
 
karsilastirma<-tibble("Gözlem"=veri$medv, Tahmin=tahmin)
 
#ilk ve son 10 tahmin değerini gerçek değerle karşılaştırma 
ilk10<-head(karsilastirma, 10) %>% rename("Gözlemİlk_10"="Gözlem", Tahminİlk_10=Tahmin) %>% mutate_if(is.numeric, round, 1)
 
son10<-tail(karsilastirma, 10) %>% rename("GözlemSon_10"="Gözlem", TahminSon_10=Tahmin) %>% mutate_if(is.numeric, round, 1)
 
formattable(cbind(Sıra=seq(1,10),ilk10, son10))

#sonuçların xlsx dokümanına yazdırılması
write_xlsx(karsilastirma, "karsilatirmasonuc.xlsx.")
Yukarıdaki R kod bloğunun çalıştırılmasından sonra çoklu regresyon modelinden elde edilen ilk ve son 10 tahmin değerleri gözlem değerleri ile birlikte aşağıdaki tabloda karşılaştırmalı olarak verilmiştir.
Yukarıdaki R kod bloğundaki son kod satırının çalıştırılması ile kurulan modelden elde edilen elde edilen tahmin sonuçları ile veri setindeki gözlem değerleri karşılaştırmalı olarak xlsx dokümanında verilmiş olup, aşağıdaki linkten indirebilirsiniz.
Karşılaştırmalı Sonuçlarİndir
Regresyon Hata parametreleri
Kurulan modele ait regresyon hata metriklerinin elde edilmesine yönelik yazılan R kod bloğu aşağıda verilmiştir.

tahmin<-predict(model1, veri)
regresyonmetrik<-tibble("Gözlem"=veri$medv, Tahmin=tahmin) %>% summarise(SSE=sse(Gözlem, Tahmin),MSE=mse(Gözlem, Tahmin),RMSE=rmse(Gözlem, Tahmin), MAE=mae(Gözlem, Tahmin), MAPE=mape(Gözlem, Tahmin)) %>% mutate_if(is.numeric, round, 1)
formattable(regresyonmetrik)
Yukarıdaki R kod bloğunun çalıştırılmasından sonra kurulan modele ait hata parametre değerleri aşağıda verilmiştir.
2 Nolu Çoklu Regresyon Modelinin Kurulması
Daha önce belirtildiği üzere tax değişkenine ait korelasyon katsayısının 0,80’in üzerinde çıktığını bahsetmiştik. İki nolu modelde bu değişkeni çıkararak medyan konu fiyatları (medv) değişkenini tahmin edelim. Kurulan regresyon modeline ilişkin R kod bloğu aşağıda verilmiştir.

model2 <- glm(medv ~. , data = veri)

summ(model2)
Yukarıdaki R kod bloğunun çalıştırılmasından sonra elde edilen regresyon model özeti aşağıda verilmiştir.

MODEL INFO:
Observations: 506
Dependent Variable: medv
Type: Linear regression 

MODEL FIT:
χ²(12) = 31395.25, p = 0.00
Pseudo-R² (Cragg-Uhler) = 0.74
Pseudo-R² (McFadden) = 0.18
AIC = 3036.55, BIC = 3095.73 

Standard errors: MLE
-------------------------------------------------
                      Est.   S.E.   t val.      p
----------------- -------- ------ -------- ------
(Intercept)          34.63   5.12     6.76   0.00
crim                 -0.11   0.03    -3.22   0.00
zn                    0.04   0.01     2.69   0.01
indus                -0.07   0.06    -1.21   0.23
chas1                 3.03   0.86     3.51   0.00
nox                 -18.70   3.85    -4.86   0.00
rm                    3.91   0.42     9.29   0.00
age                  -0.00   0.01    -0.05   0.96
dis                  -1.49   0.20    -7.39   0.00
rad                   0.13   0.04     3.26   0.00
ptratio              -0.99   0.13    -7.48   0.00
b                     0.01   0.00     3.52   0.00
lstat                -0.52   0.05   -10.20   0.00
-------------------------------------------------

Estimated dispersion parameter = 22.96 
Model karşılaştırmaları
İlk olarak modelleri AIC ve BIC değerleri açısından karşılaştıralım. AIC ve BIC değerlerinin düşük olması tahmin edilen değerlerle gözlem verilerine uyum açısından istenen bir durum olduğu daha önce belirtilmişti. Elde edilen sonuçlar Model 1’in AIC ve BIC değerleri daha düşük olduğundan Model 2’ye göre daha iyi tahmin sonuçları ortaya koyduğu söylenebilir.
Şimdide R kod bloğu yazarak her iki modelin regresyon metriklerine birlikte bakalım.

tahmin<-predict(model1, veri)

regresyonmetrik<-tibble("Gözlem"=veri$medv, Tahmin=tahmin) %>% summarise(SSE=sse(Gözlem, Tahmin),MSE=mse(Gözlem, Tahmin),RMSE=rmse(Gözlem, Tahmin), MAE=mae(Gözlem, Tahmin), MAPE=mape(Gözlem, Tahmin)) %>% mutate_if(is.numeric, round, 2) %>% add_column(Model="Model 1", .before="SSE")


tahmin2<-predict(model2, veri[,-10])

regresyonmetrik2<-tibble("Gözlem"=veri$medv, Tahmin=tahmin2) %>% summarise(SSE=sse(Gözlem, Tahmin),MSE=mse(Gözlem, Tahmin),RMSE=rmse(Gözlem, Tahmin), MAE=mae(Gözlem, Tahmin), MAPE=mape(Gözlem, Tahmin)) %>% mutate_if(is.numeric, round, 2)%>% add_column(Model="Model 2", .before="SSE")


formattable(rbind(regresyonmetrik, regresyonmetrik2))
Yukarıdaki R kod bloğu çalıştırıldıktan sonra kurulan modellere ilişkin karşılatırmalı hata metrikleri aşağıdaki tabloda verilmiştir. Ortaya konulan bulgular AIC ve BIC parametrelerinde olduğu gibi 1 nolu model 2 nolu modele göre daha az hata üretmektedir. Dolayısıyla bu bulgulara bakarak 1 nolu modelin daha iyi olduğu ileri sürülebilir.
Anova testi ile her iki modeli karşılaştırma
Anova testi kullanılarak her iki model karşılaştırarak model performansları ortaya konulmuştur. Aşağıdaki R kod bloğu ile her iki model anova test edilerek modellerdeki iyileşmeler verilmiştir.

model1<-lm(medv ~. , data = veri)
model2<-lm(medv ~. , data = veri [,-10])
anova(model2, model1)
Yukarıdaki R kod bloğu çalıştırıldıktan sonra elde edilen model performansları aşağıda verilmiştir. Elde edilen bulgular istatistiksel olarak 1. modelin 2. modele göre daha iyi olduğunu göstermektedir. Anova testinde F rasyosu bize bu iyileşmeyi göstermektedir. Aşağıdaki raporda 1. modelde elde edilen toplam hata (RSS) 11079, 2. modelde elde edilen hata (RSS) ise 11321’dir. Görüleceği üzere 2. modelde hata da yüksektir. Sum of Sq ifadesi 11079-11321=-242.26 göstermektedir.

AAnalysis of Variance Table

Model 1: medv ~ crim + zn + indus + chas + nox + rm + age + dis + rad + 
    tax + ptratio + b + lstat
Model 2: medv ~ crim + zn + indus + chas + nox + rm + age + dis + rad + 
    ptratio + b + lstat
  Res.Df   RSS Df Sum of Sq      F   Pr(>F)   
1    492 11079                                
2    493 11321 -1   -242.26 10.758 0.001112 **
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Her iki modelin birlikte raporlanması
Her iki model yazılan aşağıdaki R kod bloğu birlikte karşılaştırma sağlanabilmesi adına raporlanabilir. Kurulan her iki modelde bağımsız değişkenler bağımlı değişken olan medyan ev fiyatlarındaki varyansın % 74’ünü açıklamaktadır.

export_summs(model1,model2 scale = FALSE, results = 'asis')
Yukarıdaki R kod bloğu çalıştırılarak kurulan modellere ilişkin elde edilen karşılaştırmalı rapor aşağıda verilmiştir.

────────────────────────────────────────────────────
                      Model 1          Model 2      
                 ───────────────────────────────────
  (Intercept)           36.46 ***        34.63 ***  
                        (5.10)           (5.12)     
  crim                  -0.11 **         -0.11 **   
                        (0.03)           (0.03)     
  zn                     0.05 ***         0.04 **   
                        (0.01)           (0.01)     
  indus                  0.02            -0.07      
                        (0.06)           (0.06)     
  chas1                  2.69 **          3.03 ***  
                        (0.86)           (0.86)     
  nox                  -17.77 ***       -18.70 ***  
                        (3.82)           (3.85)     
  rm                     3.81 ***         3.91 ***  
                        (0.42)           (0.42)     
  age                    0.00            -0.00      
                        (0.01)           (0.01)     
  dis                   -1.48 ***        -1.49 ***  
                        (0.20)           (0.20)     
  rad                    0.31 ***         0.13 **   
                        (0.07)           (0.04)     
  tax                   -0.01 **                    
                        (0.00)                      
  ptratio               -0.95 ***        -0.99 ***  
                        (0.13)           (0.13)     
  b                      0.01 ***         0.01 ***  
                        (0.00)           (0.00)     
  lstat                 -0.52 ***        -0.52 ***  
                        (0.05)           (0.05)     
                 ───────────────────────────────────
  N                    506              506         
  AIC                 3027.61          3036.55      
  BIC                 3091.01          3095.73      
  Pseudo R2              0.74             0.74      
────────────────────────────────────────────────────
  *** p < 0.001; ** p < 0.01; * p < 0.05.           

Column names: names, Model 1, Model 2
Diagnostik Testler
Bu kısımda kurulan 1 nolu modelin regresyon varsayımları gözden geçirilecektir.
Artıkların normal dağılım gösterdiği varsayımı

library(broom)
diagnostiktest <- augment(model1)
plot(model1, 2)

#alternatif
ggqqplot(diagnostiktest$.resid, ylab = "Std. deviance residuals", color="red")

#alternatif
ggqqplot(model1$residuals, ylab = "Std. deviance residuals", color="blue")
Yukarıdaki R kod bloğunun çalıştırılmasından sonra elde edilen artıkların grafiği aşağıda verilmiştir. Grafikte normal dağılımı bozan değerler olduğu görülmektedir.
Yukarıdaki R kod bloğunun çalıştırılmasından sonra elde edilen artıkların alternatif grafiği aşağıda verilmiştir.
Çoklu doğrusallık varsayımı
Bu kısımda aşağıda yazdığım R kod bloğu ile varyans enflasyon faktörü (VIF) ve tolerans seviyeleri hesaplanmıştır.

varyanseflasyonfaktoru<-VIF(model1)
vif<-tibble(Değişken=names(VIF(model1)), VIF=varyanseflasyonfaktoru) %>% arrange(desc(VIF)) %>% add_column(sıra=1:13, .before="Değişken") %>% mutate(Tolerans=1/VIF) %>% mutate_if(is.numeric, round,2)

formattable(vif, 
            list(formatter(
              "span", style = ~ style(color = "grey",font.weight = "bold")),
`VIF` = color_bar("#00CED1"),
`Tolerans` = color_bar("#00FF7F")
))
Yukarıdaki R kod bloğunun çalıştırılması ile hesaplanan varyans enflasyon faktörü (VIF) ve tolerans seviyeleri aşağıdaki tabloda verilmiştir. Daha önce VIF değerinin 10’dan büyük olmaması ve tolerans seviyesinin ise 0,1’in altına düşmemesi gerektiğini söylemiştir. Elde edilen bulgular VIF ve tolerans değerlerinin kabul edilebilir sınırlar içerisinde kaldığını göstermektedir.
Etkin değerlerin bulunması
Burada etkin değerlerden kasıt Cook’un mesafesi kullanılarak uç (extreme) değerlerin bulunmasıdır. Aşağıda yazılan R kod bloğu ile normal dağılıma uymayan 10 değer Cook’un mesafesi kullanılarak grafiğe yansıtılmıştır.

plot(model1, 4, id.n = 10)
#değerleri de verecek olursak satırlarla birlikte
top10<-diagnostiktest[, -c(15:19,21)] %>%
  top_n(10, wt = .cooksd) %>% mutate_if(is.numeric, round,3)
as.matrix(top10)
Yukarıdaki R kod bloğunun çalıştırılmasından sonra Cook’un mesafesini gösteren grafik en yüksek 10 değeri ile birlikte aşağıda verilmiştir.
Yukarıdaki R kod bloğunun çalıştırılmasından sonra Cook’un mesafesini gösteren tablo matris formatında en yüksek 10 gözlem değeri ile birlikte aşağıda verilmiştir.

  medv   crim     zn  indus   chas nox     rm      age     dis     rad 
 [1,] "23.7" " 0.290" "0" "10.59" "0"  "0.489" "5.412" "  9.8" "3.587" " 4"
 [2,] "21.9" " 3.474" "0" "18.10" "1"  "0.718" "8.780" " 82.9" "1.905" "24"
 [3,] "27.5" " 4.556" "0" "18.10" "0"  "0.718" "3.561" " 87.9" "1.613" "24"
 [4,] "23.1" "13.522" "0" "18.10" "0"  "0.631" "3.863" "100.0" "1.511" "24"
 [5,] "50.0" " 4.898" "0" "18.10" "0"  "0.631" "4.970" "100.0" "1.332" "24"
 [6,] "50.0" " 5.670" "0" "18.10" "1"  "0.631" "6.683" " 96.8" "1.357" "24"
 [7,] "50.0" " 6.539" "0" "18.10" "1"  "0.631" "7.016" " 97.5" "1.202" "24"
 [8,] "50.0" " 9.232" "0" "18.10" "0"  "0.631" "6.216" "100.0" "1.169" "24"
 [9,] "50.0" " 8.267" "0" "18.10" "1"  "0.668" "5.875" " 89.6" "1.130" "24"
[10,] "17.9" "18.811" "0" "18.10" "0"  "0.597" "4.628" "100.0" "1.554" "24"
      tax   ptratio b        lstat   .cooksd
 [1,] "277" "18.6"  "348.93" "29.55" "0.043"
 [2,] "666" "20.2"  "354.55" " 5.29" "0.069"
 [3,] "666" "20.2"  "354.70" " 7.12" "0.067"
 [4,] "666" "20.2"  "131.42" "13.33" "0.045"
 [5,] "666" "20.2"  "375.52" " 3.26" "0.166"
 [6,] "666" "20.2"  "375.33" " 3.73" "0.055"
 [7,] "666" "20.2"  "392.05" " 2.96" "0.044"
 [8,] "666" "20.2"  "366.15" " 9.53" "0.043"
 [9,] "666" "20.2"  "347.88" " 8.88" "0.094"
[10,] "666" "20.2"  " 28.79" "34.37" "0.050"
Alternatif olarak aşağıdaki R kod bloğunda car paketini kullanarak da uç değerleri (outliers) belirleyebiliriz. Burada Bonferroni düzeltilmiş outlier test’ini kullanıyoruz.

library(car)
outlierTest(model1,10)
Yukarıdaki R kod bloğunun çalıştırılmasından sonra elde edilen uç değerler aşağıda verilmiştir. Bu uç değerler modelden çıkarılırsa daha iyi sonuçlar elde edilmesi mümkündür. Aşağıda solda yer alan numaralar veri setindeki satır numaralarını göstermektedir.

     rstudent unadjusted p-value Bonferroni p
369  5.907411         6.4998e-09   3.2889e-06
372  5.491079         6.4185e-08   3.2478e-05
373  5.322247         1.5617e-07   7.9020e-05
370  3.807609         1.5808e-04   7.9987e-02
413  3.546859         4.2724e-04   2.1618e-01
365 -3.457995         5.9153e-04   2.9932e-01
371  3.367841         8.1712e-04   4.1346e-01
187  3.032720         2.5518e-03           NA
366  2.956763         3.2586e-03           NA
162  2.859666         4.4214e-03           NA
Modelden uç değerlerler çıkarılarak tekrar kurulmuştur. Aşağıda yazılan kod bloğu ile düzeltilmiş R karenin yükseldiği görülmektedir. Bu da bize bağımsız değişkenlerin bağımlı değişkendeki varyansı açıklama oranının yükseldiği göstermektedir.

n<-outlierTest(model1,10)
#küçükten büyüğe doğru satır numaralarını sıralayacak olursak
satir<-sort(names(n$rstudent))#satırlar küçükten büyüğe doğru
#sonuçlar:[1] 162 187 365 366 369 370 371 372 373 413
mmodelucyok<-lm(medv ~. , data = veri[-satir, ])
summary(mmodelucyok)
Yukarıdaki R kod bloğunun çalıştırılması ile uç değerlerin çıkarılmasından sonra elde edilen yeni model özeti aşağıda verilmiştir. Elde edilen bulgular uç değerler çıkartıldığında modelin bağımlı değişkendeki varyansları açıklama gücünün % 73’ten % 81’e çıktığını göstermektedir.

Call:
lm(formula = medv ~ ., data = veri[-satir, ])

Residuals:
     Min       1Q   Median       3Q      Max 
-10.2400  -2.2328  -0.5165   1.7342  18.8761 

Coefficients:
              Estimate Std. Error t value Pr(>|t|)    
(Intercept)  20.430819   4.299288   4.752 2.66e-06 ***
crim         -0.093021   0.026329  -3.533 0.000450 ***
zn            0.033153   0.011037   3.004 0.002806 ** 
indus         0.014326   0.049452   0.290 0.772175    
chas1         1.532408   0.728125   2.105 0.035844 *  
nox         -11.953077   3.091782  -3.866 0.000126 ***
rm            5.467502   0.366377  14.923  < 2e-16 ***
age          -0.026620   0.010737  -2.479 0.013506 *  
dis          -1.175980   0.160622  -7.321 1.04e-12 ***
rad           0.203448   0.053560   3.799 0.000164 ***
tax          -0.012625   0.003014  -4.189 3.33e-05 ***
ptratio      -0.895774   0.105524  -8.489 2.60e-16 ***
b             0.010020   0.002170   4.617 5.01e-06 ***
lstat        -0.303462   0.044016  -6.894 1.70e-11 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 3.793 on 482 degrees of freedom
Multiple R-squared:  0.8142,	Adjusted R-squared:  0.8092 
F-statistic: 162.5 on 13 and 482 DF,  p-value: < 2.2e-16

Her iki modeli, model 1 ile uç değerlerinin çıkarılarak kurgulandığı yeni modeli karşılaştırmalı olarak aşağıda yazılan R kod bloğu ile de vererek resmi daha yakından görmüş oluruz.

stargazer(model1,mmodelucyok, scale=F,  type="text", digits=2)
Yukarıdaki R kod bloğunun çalıştırılmasından sonra bahsedilen her iki karşılaştırmalı olarak aşağıda verilmiştir.

=====================================================================
                                   Dependent variable:               
                    -------------------------------------------------
                                          medv                       
                              (1)                      (2)           
---------------------------------------------------------------------
crim                        -0.11***                 -0.09***        
                             (0.03)                   (0.03)         
                                                                     
zn                          0.05***                  0.03***         
                             (0.01)                   (0.01)         
                                                                     
indus                         0.02                     0.01          
                             (0.06)                   (0.05)         
                                                                     
chas1                       2.69***                   1.53**         
                             (0.86)                   (0.73)         
                                                                     
nox                        -17.77***                -11.95***        
                             (3.82)                   (3.09)         
                                                                     
rm                          3.81***                  5.47***         
                             (0.42)                   (0.37)         
                                                                     
age                          0.001                   -0.03**         
                             (0.01)                   (0.01)         
                                                                     
dis                         -1.48***                 -1.18***        
                             (0.20)                   (0.16)         
                                                                     
rad                         0.31***                  0.20***         
                             (0.07)                   (0.05)         
                                                                     
tax                         -0.01***                 -0.01***        
                            (0.004)                  (0.003)         
                                                                     
ptratio                     -0.95***                 -0.90***        
                             (0.13)                   (0.11)         
                                                                     
b                           0.01***                  0.01***         
                            (0.003)                  (0.002)         
                                                                     
lstat                       -0.52***                 -0.30***        
                             (0.05)                   (0.04)         
                                                                     
Constant                    36.46***                 20.43***        
                             (5.10)                   (4.30)         
                                                                     
---------------------------------------------------------------------
Observations                  506                      496           
R2                            0.74                     0.81          
Adjusted R2                   0.73                     0.81          
Residual Std. Error     4.75 (df = 492)          3.79 (df = 482)     
F Statistic         108.08*** (df = 13; 492) 162.46*** (df = 13; 482)
=====================================================================
Note:                                     *p<0.1; **p<0.05; ***p<0.01

======
110.24
------
Hataların bağımsızlığı testi
Kurulan regresyon modelinde hataların bağımsızlığını testi için literatürde genellikle Durbin Watson istatistiğinin kullanıldığı görülmektedir. Regresyon modellerinde hatalar bağımsız olması gerekli olup, Durbin Watson değerinin 1 ile 3 arasında olması istenmektedir. Aşağıda yazılan R kod bloğu ile 1 nolu modelin Durbin Watson istatistiği verilmiştir.

lmtest::dwtest(model1)
Yukarıdaki R kod bloğunun çalıştırılmasından sonra elde edilen Durbin Watson istatistiği aşağıdaki verilmiştir. Elde edilen bulgular Durbin-Watson test istatistiği değerinin referans değerler aralığında kaldığını ve bu sonucun istatistiksel olarak anlamlı olduğunu göstermektedir.

	Durbin-Watson test

data:  model1
DW = 1.0784, p-value < 2.2e-16
alternative hypothesis: true autocorrelation is greater than 0
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://web.stanford.edu/~hastie/TALKS/boost.pdf
https://iq.opengenus.org/types-of-boosting-algorithms/
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://www.stat.berkeley.edu/~breiman/Using_random_forests_V3.1.pdf
https://www.stat.berkeley.edu/~breiman/RandomForests/
https://stats.idre.ucla.edu/r/library/r-library-introduction-to-bootstrapping/
https://stanford.edu/~shervine/l/tr/teaching/cs-229/cheatsheet-machine-learning-tips-and-tricks
http://uzalcbs.org/wp-content/uploads/2016/11/2012_082.pdf
http://www.ub.edu/stat/docencia/EADB/bagging.html
https://people.cs.pitt.edu/~milos/courses/cs2750-Spring04/lectures/class23.pdf
https://www.google.com/search?q=underfitting+and+overfitting&source=lnms&tbm=isch&sa=X&ved=2ahUKEwiI1onvyNvpAhVSQMAKHfYyC28Q_AUoAXoECBAQAw&biw=1366&bih=604#imgrc=m5WcPcAqdpCwEM
Webb G.I. (2011) Overfitting. In: Sammut C., Webb G.I. (eds) Encyclopedia of Machine Learning. Springer, Boston, MA
https://www.memorial.com.tr/saglik-rehberleri/biyopsi-nedir-ve-nasil-yapilir/
https://archive.ics.uci.edu/ml/datasets/Breast+Cancer+Wisconsin+(Diagnostic)
Andriyas, S. and McKee, M. (2013). Recursive partitioning techniques for modeling irrigation behavior. Environmental Modelling & Software, 47, 207–217.
Chan, J. C. W. and Paelinckx, D. (2008). Evaluation of Random Forest and Adaboost tree-based ensemble classification and spectral band selection for ecotope mapping using airborne hyperspectral imagery. Remote Sensing of Environment, 112(6), 2999–3011.
Chrzanowska, M., Alfaro, E., and Witkowska, D. (2009). The individual borrowers recognition:Single and ensemble trees. Expert Systems with Applications, 36(2), 6409–6414.
De Bock, K. W., Coussement, K., and Van den Poel, D. (2010). Ensemble classification based on generalized additive models. Computational Statistics & Data Analysis, 54(6), 1535–1546.
De Bock, K. W. and Van den Poel, D. (2011). An empirical evaluation of rotation-based ensemble classifiers for customer churn prediction. Expert Systems with Applications, 38(10), 12293–12301.
Fan, Y., Murphy, T.B., William, R. and Watson G. (2009). digeR: GUI tool for analyzing 2D DIGE data. R package version 1.2.
Garcia-Perez-de-Lema, D., Alfaro-Cortes, E., Manzaneque-Lizano, M. and Banegas-Ochovo, R. (2012). Strategy, competitive factors and performance in small and medium enterprise (SMEs).
African Journal of Business Management, 6(26), 7714–7726.
Gonzalez-Rufino, E., Carrion, P., Cernadas, E., Fernandez-Delgado, M. and Dominguez-Petit, R.(2013). Exhaustive comparison of colour texture features and classification methods to discriminate cells categories in histological images of fish ovary. Pattern Recognition, 46, 2391–2407.
Krempl, G. and Hofer, V. (2008). Partitioner trees: combining boosting and arbitrating. In: Okun, O., Valentini, G. (eds.) Proc. 2nd Workshop Supervised and Unsupervised Ensemble Methods and Their Applications, Patras, Greece, 61–66.
Torgo, Luis, Data Mining With R. Second Edition.
https://www.akira.ai/glossary/gradient-boosting/
http://www.ccs.neu.edu/home/vip/teach/MLcourse/4_boosting/slides/gradient_boosting.pdf
Breiman, L. (June 1997). “Arcing The Edge” (PDF). Technical Report 486. Statistics Department, University of California, Berkeley.
https://machinelearningmastery.com/gentle-introduction-gradient-boosting-algorithm-machine-learning/
https://dergipark.org.tr/tr/download/article-file/219865
Discovering Statistics Using SPSS (2009), Field, A.
https://www.jmp.com/en_ch/statistics-knowledge-portal/what-is-multiple-regression/fitting-multiple-regression-model.html
https://marcfbellemare.com/
https://www.statisticshowto.com/variance-inflation-factor/
https://www.rdocumentation.org/packages/psych/versions/1.9.12.31/topics/cor.plot
https://www.rdocumentation.org/packages/caret/versions/6.0-86/topics/findCorrelation
https://tevfikbulut.com/2020/07/04/rda-binary-lojistik-regresyon-uzerine-bir-vaka-calismasi-a-case-study-on-binary-logistic-regression-in-r/
https://cran.r-project.org/web/packages/relaimpo/relaimpo.pdf
Bunu paylaş:
Facebook
Twitter
Reddit
Telegram
E-posta
Yazdır
Daha fazla
LinkedIn
Tumblr
Pinterest
Pocket
WhatsApp
Skype
Bunu beğen:
Beğen Yükleniyor...
Tevfik BULUT	Genel	Yorum bırakın 15 Temmuz 2020 26 Mayıs 2021 38 Minutes	
Topluluk Öğrenme Algoritmalarından Gradyan Yükseltme Algoritması İle Gögüs Kanserinin Tahmini Üzerine Bir Vaka Çalışması: A Case Study on the Prediction of Breast Cancer Using Gradient Boosting Algorithm from Ensemble Learning Algorithms
Giriş
Topluluk (ensemble) öğrenme algoritmaları tahmine dayalı analitik çalışmalarda en başarılı yaklaşımlardan biridir. Bu algoritmalar somut bir problemi çözmek için bir araya gelen modeller setinden oluşmaktadır. Amaç modeller setinin ürettiği tahminleri birleştirerek doğruluğu (accuracy) artırmaktır. Topluluk algoritmaları kendi içerisinde üç grupta ele alınır.
Torbalama (Bagging: Bootsrap Aggregating)
Yükseltme (Boosting)
AdaBoost
Gradient Boosting
XGBoost
LightGBM
İstif (Stacking)
Topluluk (ensemble) öğrenme ve yükseltme algoritmalarından biri olan gradyan yükseltme, ingilizce ifadeyle gradient boosting, temel olarak Leo Breiman tarafından 1997 yılında geliştirilen sınıflandırma, regresyon ve sıralama problemlerinin çözümünde kullanılan makine öğrenmesine dayanan topluluk algoritmasıdır. Gradyan yükseltme algoritmaları yinelemeli olarak çalışır. Bu yöntemde her bir yinelemede yeni bir zayıf öğrenici ilave edilerek güçlü bir öğrenici oluşturulur. Diğer bir ifadeyle, zayıf öğrenicilerin bir araya gelmesiyle güçlü bir öğrenici oluşturulur. Bu yöntemde her ağaç bir öncekinden ardışık düzende öğrenerek sığ ağaçlardan oluşan bir topluluk oluşturulur. Bu topluluk oluşturmak için yeni modellerin eklendiği yinelemeli (iteratif) bir süreçten oluşur. Bu bir anlamda adaptiftir. Algoritmanın her yeni yinelenmesinde, yeni modeller önceki yinelemelerde yapılan hataların üstesinden gelmek için inşa edilir. Bu yöntemde, sonraki her bir modelin önceki modeldeki hataları düzeltmeye çalıştığı sıralı (sequential) bir işlem yapılır. Yani sonraki modeller önceki modele bağımlıdır. Bu yöntem çok çeşitli sorunlara en uygun çözümleri bulabilen çok genel bir optimizasyon algoritmasıdır. Gradyan algortimasının temel fikri, maliyet fonksiyonunu en aza indirmek için parametreleri tekrarlamaktır. Ağaç eklerken kaybı en aza indirmek için gradyan iniş prosedürü kullanılır. Gradyan yükseltme üç unsur içerir:
Optimize edilecek bir kayıp (loss) fonksiyonu.
Tahmin yapmak için zayıf bir öğrenici.
Kayıp fonksiyonu en aza indirmek için zayıf öğrenicilere eklenecek için bir katkı modeli.
Yükseltme algoritmasının işleyiş süreci Şekil 1’de verilmiştir.
Şekil 1: Gradyan Yükseltme (Gradient Boosting) Algoritmasının İşleyiş Süreci
Kaynak: https://www.akira.ai
Yükseltme algoritmaları topluluk üyelerinin her biri birbirine bağımlıdır. Torbalama algoritmaları paralel düzende, yükseltme algoritmaları ise ardışık (sequential) düzende çalışmaktadır.
Modeller oluşturulurken temel amaç, bias ve varyans dengesinin kurulmasıdır. Bu uyumu sağlarsak iyi model uyumu (good-fit) elde etmiş oluruz. Makine öğrenme ve derin öğrenme problemlerinin çözümünde modelleme hatalarına bağlı olarak varyans ve bias değişiklik göstermektedir. Bu iki durum şöyle ele alınabilir:
Eksik model uyumu (under-fitting): Kurulan modelde elde edilen tahmin değerleri gözlem verisine yeterince uyum göstermediğinde ortaya çıkar. Bu durumda varyans düşükken bias yüksektir. Buradan şunu anlamak gerekir: gözlem verisi ile tahmin edilen veri arasındaki fark büyükse, diğer bir deyişle kurulan modelle bağımlı değişken iyi tahmin edilemiyorsa bu durumda under-fitting oluşur. Under-fitting sonraki kısımlarında anlatılan sınıflandırma ve regresyon hata metrikleri ile kolaylıkla ortaya konulabilir.
Aşrı model uyumu (over-fitting): Kurulan modelde eğitilen veri seti (training data set)’yle gözlem verisine aşırı uyum gösterdiğinde ortaya çıkar. Bu durumda varyans yüksekken bias düşüktür.
Bahsedilen bu iki durumu kafamızda daha da canlı tutmak için bias ve varyans ilişkisi Şekil 2’de verilmiştir. Şekil’de biz modeli kurgularken olması gereken durumu gösteren Düşük Varyans-Düşük Bias uyumunu, diğer bir ifadeyle yüksek kesinlik (precision)-yüksek doğruluk (accuracy) hedefliyoruz. Diğer bir deyişle kurguladığımız model (Şekil 2 1 nolu model) ile gözlem değerlerini olabildiğince en yüksek doğruluk oranı ile tahmin ederken aynı zamanda varyansı düşük (yüksek kesinlik (precision)) tutmayı hedefliyoruz. Buna başardığımızda aslında iyi model uyumunu (good-fit) sağlamış ve iyi bir model kurmuş oluyoruz. Eksik model uyumu (under-fitting)’nda ise Şekil 2’de 3 nolu modelde görüleceği üzere elde edilen tahmin değerleri gözlem değerleri (kırmızı alan)’nden uzaklaşmakla birlikte hala tahmin değerleri ile gözlem değerleri arasında farklar, diğer bir deyişle varyans düşüktür. Aşırı model uyumu (over-fitting)’da ise Şekil 2’de 2 nolu modelde görüleceği üzere varyans yüksek iken bias düşüktür. 2 nolu modelde doğru değerler (gözlem değerleri)’i kurulan modelde yüksek doğrulukla (düşük bias=yüksek doğruluk (accuracy) tahmin edilse de gözlem değerleri ile tahmin değerleri arasındaki varyans yüksektir.
Şekil 2: Bias-Varyans İlişkisi
Veri Tipleri
Yükseltme algoritmaları ile sınıflandırma problemi çözüyorsak bağımlı değişkenin ya da cevap değişkeninin veri tipi nitel ve kategoriktir. Ancak, bu yöntem ile regresyon problemini çözüyorsak bağımlı değişkenin ya da cevap değişkeninin veri tipi niceldir. Veri tipleri kendi içerisinde 4 farklı alt sınıfta ele alınabilir. Bu veri tipleri alt sınıflarıyla birlikte Şekil 3’te verilmiştir.
Şekil 3: Veri Tipleri
Nicel Veri (Quantitative Data)
Şekil 3’te sunulan nicel veri tipi ölçülebilen veri tipi olup, kendi içerisinde temel olarak ikiye ayrılmaktadır. Bu veri tipine alt sınıflandırmalar dikkate alınarak sırasıyla örnek verelim.
Sürekli veri (Continous data): Tam sayı ile ifade edilmeyen veri tipi olup, zaman, sıcaklık, beden kitle endeksi, boy ve ağırlık ölçümleri bu veri tipine örnek verilebilir.
Kesikli veri (Discrete Data): Tam sayı ile ifade edilebilen veri tipi olup, bu veri tipine proje sayısı, popülasyon sayısı, öğrenci sayısı örnek verilebilir.
Nitel Veri (Qualitative Data)
Şekil 3’te verilen nitel veri tipi ölçülemeyen ve kategori belirten veri tipi olup, kendi içerisinde temel olarak ikiye ayrılmaktadır. Bu veri tipine alt sınıflandırmalar şöyledir:
Nominal veri: İki veya daha fazla cevap kategorisi olan ve sıra düzen içermeyen veri tipi olup, bu veri tipine medeni durum (evli, bekar) ve sosyal güvenlik türü (Bağkur, SSK, Yeşil Kart, Özel Sigorta) örnek gösterilebilir.
Ordinal veri: İki veya daha fazla kategorisi olan ancak sıra düzen belirten veri türüdür. Bu veri tipine örnek olarak eğitim düzeyleri (İlkokul, ortaokul, lise, üniversite ve yüksek lisans), yarışma dereceleri (1. , 2. ve 3.) ve illerin gelişmişlik düzeyleri (1. Bölge, 2. Bölge, 3. Bölge, 4. Bölge, 5. Bölge ve 6. Bölge) verilebilir.
Veri tiplerinden bahsedildikten sonra bu veri tiplerinin cevap değişkeni (bağımlı değişken) olduğu durumlarda seçilecek analiz yöntemini ele alalım. Temel olarak cevap değişkeni ölçülebilir numerik değişken ise regresyon, değilse sınıflandırma analizi yapıyoruz. Cevap değişkeni, diğer bir deyişle bağımlı değişken numerik ise bağımsız değişken veya değişkenlerin çıktı (output) / bağımlı değişken (dependent variable) / hedef değişken (target variable) veya değişkenlerin üzerindeki etkisini tahmin etmeye çalışıyoruz. Buradaki temel felsefeyi anlamak son derece önemlidir. Çünkü bu durum sizin belirleyeceğiniz analiz yöntemini de değiştirecektir.
Kullanılan analiz yöntemi ile kurulan modelde ya sınıflandırma problemini ya da regresyon problemini çözdüğümüzü ifade etmiştik. Ancak kurulan modellerde çözülen problemin sınıflandırma ya da regresyon oluşuna göre performans değerlendirmesi farklılaşmaktadır. Sınıflandırma problemlerinde kullanılan hata metrikleri ile regresyon hata metrikleri aynı değildir. Bu bağlamda ilk olarak sınıflandırma problemlerinin çözümünde kullanılan hata metriklerini ele alalım.
Sınıflandırma Problemlerinde Hata Metrikleri
Karışıklık matrisi (confusion matrix) olarak 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. Tablo 1’de hata metriklerinin hesaplanmasına esas teşkil eden karışıklık matrisi (confisioun matrix) 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.
Tablo 1: Karışıklık Matrisi (Confusion Matrix)
Kaynak: Stanford Üniversitesi
Tablo 1’de TP: Doğru Pozitifleri, FN: Yanlış Negatifleri, FP: Yanlış Pozitifleri ve TN: Doğru Negatifleri göstermektedir.
Şekil 3’te de yer verildiği üzere literatürde sınıflandırma modellerinin performansını değerlendirmede aşağıdaki hata metriklerinden yaygın bir şekilde yararlanıldığı görülmektedir. Sınıflandırma problemlerinin çözümüne yönelik Yükselme (Boosting: AdaBoost) algoritması kullanarak R’da yapmış olduğum çalışmanın linkini ilgilenenler için aşağıda veriyorum.
Topluluk Öğrenme Algoritmalarından Yükseltme Algoritması İle Gögüs Kanserinin Tahmini Üzerine Bir Vaka Çalışması: A Case Study on the Prediction of Breast Cancer Using Boosting Algorithm from Ensemble Learning Algorithms
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 modellerin perfomansı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.
Sınıflandırma hata metriklerini anlattıktan sonra daha kalıcı olması ve öğrenilmesi adına hazırladığım excel üzerinde bahsedilen bu metriklerin nasıl hesaplandığı gösterilmiştir. Excel dosyasını aşağıdaki linkten indirebilirsiniz.
Sınıflandırma Metrikleriİndir
Regresyon Problemlerinde Hata Metrikleri
Regresyon modellerinin performansını değerlendirmede literatürde aşağıdaki hata metriklerinden yaygın bir şekilde yararlanılmaktadır. Regresyon metrikleri eşitliklerinin verilmesi yerine sade bir anlatımla neyi ifade ettiği anlatılacaktır. Böylece formüllere boğulmamış olacaksınız.
SSE (Sum of Square Error): Tahmin edilen değerler ile gözlem değerleri arasındaki farkların kareleri toplamını ifade eder.
MSE (Mean Square Error): Ortalama kare hatası olarak adlandırılan bu hata tahmin edilen değerler ile gözlem değerleri arasındaki farkların karelerinin ortalamasını ifade eder.
RMSE (Root Mean Square Error): Kök ortalama kare hatası olarak adlandırılan bu hata ortalama kare hatasının karekökünü ifade etmektedir.
MAE (Mean Absolute Error): Ortalama mutlak hata olarak adlandırılan bu hata türü ise tahmin edilen değerler ile gözlem değerleri arasındaki farkların mutlak değerlerinin ortalamasını ifade etmektedir.
MAPE (Mean Absolute Percentage Error): Ortalama mutlak yüzdesel hata olarak adlandırılan bu hata türünde ilk olarak tahmin edilen değerler ile gözlem değerleri arasındaki farkların mutlak değerleri hesaplanır. Daha sonra hesaplanan farkları mutlak değerleri mutlak değerleri alınan gözlem değerlerine bölünür. En son durumda ise elde edilen bu değerlerin ortalaması alınır.
Bias: Tahmin edilen değerler ile gözlem değerleri arasındaki farkların ortalamasıdır. Bu yönüyle ortalama mutlak hata (MAE)’ya benzemektedir.
Regresyon hata metriklerini anlattıktan sonra daha kalıcı olması ve öğrenilmesi adına hazırladığım excel üzerinde bahsedilen bu metriklerin nasıl hesaplandığı gösterilmiştir. Excel dosyasını aşağıdaki linkten indirebilirsiniz.
Regresyon Metrikleri İndir
Çalışma kapsamında gradyan yükseltme algoritmasıyla sınıflandırma problemi çözülecektir. Bu amaçla Wisconsin Üniversitesi Hastanesinden alınan Meme Kanseri veri seti kullanılarak bağımlı değişken olan meme kanserinin tipi tahmin edilecektir.
Metodoloji ve Uygulama Sonuçları
Bu bölümde gradyan algoritması kullanılarak meme kanserinin türü (iyi huylu: benign, kötü huylu: malign) tahmin edilmiştir. Diğer bir ifadeyle, bu çalışmada sınıflandırma problemi çözmüş olacağız. Analizde kullanılan veri seti Wisconsin Üniversitesi Hastanelerinde 15 Temmuz 1992 tarihine kadar tedavi görmüş hastalardan alınan meme biyopsi verilerini içermektedir. Biyopsi’den bahsetmişken ne anlama geldiğini de açıklayalım. Biyopsi, vücudun farklı bölgelerinden mikroskop yardımıyla inceleme ve farklı tetkikler yaparak hastalık şüphesi bulunan bölgeden tanı amaçlı hücre ya da doku alma işlemidir. Veri setinde 15 Temmuz 1992’ye kadar 699 hastaya ait meme tümör biyopsi gözlemleri bulunmaktadır. Veri setindeki toplam gözlem sayısı 699, değişken sayısı ise 10 (ID numarası hariç)’dur. Bu veri setine R programlama yazılımında “MASS” paketi içerisinde “biopsy” olarak yer verilmiştir. Ancak veri setinde değişkenlerin adları tam olarak yazılmadığı için R programlama dilinde revize edilmiş ve R programlama dili kullanılarak gradyan yükseltme (gradient boosting) algoritmasıyla analiz edilmiştir.
Cl.thickness: Kitlenin kalınlığını (clump thickness) göstermektedir. Cevap değişkenleri 1’den 10’a kadar bir ölçekte puanlanmıştır. Veri tipi nicel ve kesiklidir.
Cell.size: Hücre büyüklüğünün homojenliğini (uniformity of cell size) göstermektedir. Cevap değişkenleri 1’den 10’a kadar bir ölçekte puanlanmıştır. Veri tipi nicel ve kesiklidir.
Cell.shape: Hücre şeklinin bütünlüğünü (uniformity of cell shape) göstermektedir. Cevap değişkenleri 1’den 10’a kadar bir ölçekte puanlanmıştır. Veri tipi nicel ve kesiklidir.
Marg.adhesion: Marjinal yapışmayı göstermektedir. Cevap değişkenleri 1’den 10’a kadar bir ölçekte puanlanmıştır. Veri tipi nicel ve kesiklidir.
Epith.c.size Epitel hücre büyüklüğünü (single epithelial cell size) göstermektedir. Cevap değişkenleri 1’den 10’a kadar bir ölçekte puanlanmıştır. Veri tipi nicel ve kesiklidir.
Bare.nuclei: Sitoplazma (hücrenin geri kalanı) ile çevrili olmayan çekirdekler için kullanılan bir terimdir. Bunlar tipik olarak iyi huylu tümörlerde görülür. Cevap değişkenleri 1’den 10’a kadar bir ölçekte puanlanmıştır. Veri tipi nicel ve kesiklidir.
Bl.cromatin: Benign (iyi huylu) hücrelerde görülen çekirdeğin muntazam bir “dokusunu” açıklar (bland chromatin). Kanser hücrelerinde kromatin daha kaba olma eğilimindedir. Cevap değişkenleri 1’den 10’a kadar bir ölçekte puanlanmıştır. Veri tipi nicel ve kesiklidir.
Normal.nucleoli: Nükleoller, çekirdekte görülen küçük yapılardır. Kanser hücrelerinde nükleoller daha belirgin hale gelir. Cevap değişkenleri 1’den 10’a kadar bir ölçekte puanlanmıştır. Veri tipi nicel ve kesiklidir.
Mitoses: Mitotik aktivite, hücrelerin ne kadar hızlı bölündüğünün bir ölçüsüdür. Yüksek mitotik aktivite tipik olarak malign tümörlerde görülür. Cevap değişkenleri 1’den 10’a kadar bir ölçekte puanlanmıştır. Veri tipi nicel ve kesiklidir.
Class: Meme kanserinin tipini (iyi huylu mu yoksa kötü huylu mu) göstermektedir. Değişken kategorileri “benign” ve “malignant“, diğer bir deyişle iyi ve kötü huyludur.Veri tipi nitel ve nominal kategoriktir.
Bu kapsamda cevap değişkeni (bağımlı değişken) olan “Class” yani meme kanserinin türü geri kalan 9 bağımsız değişken kullanılarak yükseltme (boosting) algoritmasıyla tahmin edilecektir. Analizde kullanılan veri setini aşağıdaki linkten indirebilirsiniz.
Göğüs Kanseri Veri Setiİndir
Şimdi veri setini tanıdıktan sonra adım adım (step by step) analize başlayabiliriz. Analizde R programlama dili kullanarak analiz adımları R kod bloklarında verilmiştir.
Yüklenecek R kütüphaneleri

rm(list=ls())

kütüphaneler = c("dplyr","tibble","tidyr","ggplot2","formattable","readr","readxl","xlsx", "pastecs","fpc", "DescTools","e1071", "DMwR","caret", "viridis","GGally","ggpurr","psych","writexl","ggfortify","explore","MASS","gbm")
 
sapply(kütüphaneler, require, character.only = TRUE)
Ver setinin okunması ve değişkenlerin adlandırılması

veri<-biopsy %>% rename(Cl.thickness=V1, Cell.size=V2, Cell.shape=V3, Marg.adhesion=V4,  Epith.c.size=V5, Bare.nuclei=V6, Bl.cromatin=V7, Normal.nucleoli=V8, Mitoses=V9, Class=class)
veri<-veri[,-1]
Ver setinin xlsx ve csv uzantılı dosyalara yazdırılması

write.csv(veri, "gögüskanseriveriseti.csv")#csv dosyası için
write_xlsx(veri, "gögüskanseriveriseti.xlsx")#xlsx dosyası için
Yukarıdaki R kod bloğunun çalıştırılmasından sonra veri seti xlsx ve csv uzantılı dosyalara yazdırılmıştır. Elde edilen veri seti dosyası sadece xlsx uzantılı olarak aşağıdan indirilebilir. Sitem csv dosya yüklemesini desteklemediği için csv uzantılı dosya aşağıda verilememiştir. Ancak yukarıdaki R kod bloğu çalıştırabilir ve csv uzatılı dosya rmd dosyasının bulunduğu klasör içine otomatik olarak kaydedilebilir.
Göğüs Kanseri Veri Seti (xlsx)İndir
Veri setinin görselleştirilmesi ve tanımlayıcı istatistikler

#veri setindeki ilk 3 değişkenin görselleştirilmesi
veri[,1:3] %>% explore_all()
#veri setindeki 4,5,6 ve 7. değişkenlerin görselleştirilmesi
veri[,4:7] %>% explore_all()
#veri setindeki 8,9 ve 10. değişkenlerin görselleştirilmesi
veri[,8:10] %>% explore_all()

#veri setindeki ilk 10 gözlem
formattable(head(veri,10))

#Eksik gözlemler çıkarıldıktan sonra Pearson korelasyon matrisi 
tamveri<-na.omit(veri)
cor.plot(tamveri[,-10], main="Korelasyon Matrisi")
Yukarıdaki R kod bloğunun çalıştırılmasından sonra veri setindeki ilk 3 değişkenin grafiği aşağıda verilmiştir. Grafikte görüleceği üzere eksik gözlem (missing data: NA) bulunmamaktadır.
Yukarıdaki R kod bloğunun çalıştırılmasından sonra veri setindeki 4,5,6 ve 7. değişkenlerin grafiği aşağıda verilmiştir. Grafikte görüleceği üzere sadece Bare.nuclei değişkende 16 eksik gözlem (missing data: NA) bulunmaktadır.
Yukarıdaki R kod bloğunun çalıştırılmasından sonra veri setindeki 8,9 ve 10. değişkenlerin grafiği aşağıda verilmiştir. Grafikte görüleceği üzere eksik gözlem (missing data: NA) bulunmamaktadır.
Yukarıdaki R kod bloğunun çalıştırılmasından sonra meme kanseri veri setindeki ilk 10 gözlem aşağıdaki tabloda verilmiştir.
Yukarıdaki R kod bloğunun çalıştırılmasından sonra meme kanseri veri setindeki eksik gözlemlerin olduğu 16 satır çıkarılmış, ardından nicel ve kesikli değişkenlere ait Pearson korelasyon matrisi aşağıdaki şekilde verilmiştir. Bağımlı değişken dışındaki değişken çiftleri nicel (sürekli ve kesikli) olduğu için Pearson korelasyon katsayısını hesapladık.
Bağımlı değişken olan tümörün tipi (Class)’ne görer değişkenler arasındaki ilişki

tamveri %>% ggplot(aes(x = Cl.thickness, y = Cell.size, color = Class))+
        geom_point(position = position_dodge(0.9)) +
        facet_grid( ~Class)

tamveri %>% ggplot(aes(x = Cell.shape, y = Marg.adhesion, color = Class))+
        geom_point(position = position_dodge(0.9)) +
        facet_grid( ~Class)

tamveri %>% ggplot(aes(x = Epith.c.size, y = Bare.nuclei, color = Class))+
        geom_point(position = position_dodge(0.9)) +
        facet_grid( ~Class)

tamveri %>% ggplot(aes(x = Bl.cromatin, y = Normal.nucleoli, color = Class))+
        geom_point(position = position_dodge(0.9)) +
        facet_wrap(Mitoses~Class )
Yukarıdaki R kod bloğunun çalıştırılmasından sonra ilk iki değişkenin tümörün tipine göre kendi aralarındaki ilişki aşağıdaki grafikte verilmiştir.
Yukarıdaki R kod bloğunun çalıştırılmasından sonra 3. ve 4. değişkenin tümörün tipine göre kendi aralarındaki ilişki aşağıdaki grafikte verilmiştir.
Yukarıdaki R kod bloğunun çalıştırılmasından sonra 5. ve 6. değişkenin tümörün tipine göre kendi aralarındaki ilişki aşağıdaki grafikte verilmiştir.
Yukarıdaki R kod bloğunun çalıştırılmasından sonra 7, 8 ve 9. değişkenlerin tümörün tipine göre kendi aralarındaki ilişki aşağıdaki grafikte verilmiştir.
Veri setinin eğitilecek veri setine ve test veri setine ayrılması
Bu kısımda aşağıdaki R kod bloğunda 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: Eğer çok yüksek gözlem sayıları ile çalışıyorsanız bilgisayar işlemcisine bağlı olarak bu işlemin ç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(1461)
orneklem<- sample(1:NROW(tamveri), NROW(tamveri)*0.7)
train <- tamveri[orneklem, ]  
test <- tamveri[-orneklem, ]
Gradyan Yükseltme (Gradient Boosting) modelinin kurulması

model <- gbm(Class ~., data=train, shrinkage=0.01, distribution="multinomial", cv.folds=3, n.trees=5000)
print(model)
Değişkenlerin önem düzeyleri

onem0<-summary(model)

onemduzey0<-tibble("Değişken"=onem0$var,"Önem Düzeyi"=as.numeric(round(onem0$rel.inf,2)))

formattable(onemduzey0, 
            list(formatter(
              "span", style = ~ style(color = "grey",font.weight = "bold")),
`Önem Düzeyi` = color_bar("#00FF00")
))
Yukarıdaki kod bloğunun çalıştırılmasından sonra elde edilen modeldeki değişkenlerin nispi önem düzeyleri (%) değerleriyle birlikte büyükten küçüğe doğru aşağıdaki tabloda verilmiştir.
Tahmin edilen değerler ile test veri setindeki gözlem değerlerinin karşılaştırılması

#en iyi parametre değerine göre tahmin sonuçlarını elde etme
(eniyi <- gbm.perf(model, plot.it=FALSE, method="cv"))
tahmin<-predict(model, test, n.trees=eniyi, type="response")[,,1]
tahmin<-as.factor(colnames(tahmin)[max.col(tahmin)])

karsilastirmatest<-tibble("Gözlem"=test$Class, Tahmin=tahmin)
#ilk ve son 10 tahmin değerini gerçek değerle karşılaştırma 
ilk10<-head(karsilastirmatest, 10) %>% rename(Gozlemİlk_10=Gözlem, Tahminİlk_10=Tahmin)
son10<-tail(karsilastirmatest, 10) %>% rename(GozlemSon_10=Gözlem, TahminSon_10=Tahmin)
formattable(cbind("Sıra"=seq(1,10),ilk10, son10))

#sonuçların xlsx dokümanına yazdırılması
karsilatirmasonuctest<-tibble("Gözlem"=test$Class, Tahmin=tahmin)
write_xlsx(karsilatirmasonuctest, "karsilatirmasonuctest.xlsx.")
Yukarıdaki R kod bloğunun çalıştırılmasından sonra gradyan yükseltme modelinden elde edilen ilk ve son 10 tahmin sınıflandırma değerleri gözlem sınıflandırma değerleri ile birlikte aşağıdaki tabloda karşılaştırmalı olarak verilmiştir.
Yukarıdaki R kod bloğundaki son kod satırının çalıştırılması ile kurulan modelden elde edilen elde edilen sınıflandırma tahmin sonuçları ile test veri setindeki sınıflandırma sonuçları karşılaştırmalı olarak xlsx dokümanında verilmiş olup, aşağıdaki linkten indirebilirsiniz.
Test Veri Setine Göre Karşılaştırmalı Sonuçlarİndir
Karışıklık matrisi (confusion matrix)’nin oluşturulması

(eniyi <- gbm.perf(model, plot.it=FALSE, method="cv"))
tahmin<-predict(model, test, n.trees=eniyi, type="response")[,,1]

tahmin<-as.factor(colnames(tahmin)[max.col(tahmin)])

(cm <- table(tahmin, test$Class))

#Doğruluk (Acccuracy) oranı (%)
paste("Doğruluk Oranı: %", round(100*(sum(diag(cm))/sum(cm)),1)) 
Yukarıdaki R kod bloğunun çalıştırılmasından sonra elde edilen karışıklık matrisi aşağıda verilmiştir.

tahmin      benign malignant
  benign       139         7
  malignant      0        59
Yukarıdaki R kod bloğunun çalıştırılmasından sonra elde edilen doğruluk oranı % 96,6 olup aşağıda verilmiştir. Burada model test verisi ile karşılaştırılmış olup elde edilen sonuçlar test verisine ilişkin sonuçlardır.

"Doğruluk Oranı: % 96.6"
Sınıflandırma Hata parametreleri
Kurulan modele ait hata parametrelerinin elde edilmesine yönelik yazılan R kod bloğu aşağıda verilmiştir.

cm0<-confusionMatrix(tahmin, test$Class)

cm0
Yukarıdaki R kod bloğunun çalıştırılmasından sonra elde edilen hata metrikleri bir bütün olarak aşağıda verilmiştir. Gradyan yükseltme algoritmasıyla kurulan model meme kanseri türlerini yaklaşık % 97 doğruluk (accuracy) oranı ile tahmin etmektedir. Hata oranı ise 100-97 eşitliğinden yola çıkarak % 3 buluruz. Uyumu gösteren Kappa katsayısı ise bu modelde yaklaşık % 92 (0,92) olup, tahmin edilen tümör türleri ile gözlemlenen tümör türleri arasında mükemmele yakın bir uyum olduğu görülmektedir. Bu bulgu aynı zamanda doğruluk oranını da destekler niteliktedir.

Confusion Matrix and Statistics

           Reference
Prediction  benign malignant
  benign       139         7
  malignant      0        59
                                          
               Accuracy : 0.9659          
                 95% CI : (0.9309, 0.9862)
    No Information Rate : 0.678           
    P-Value [Acc > NIR] : < 2e-16         
                                          
                  Kappa : 0.9195          
                                          
 Mcnemar's Test P-Value : 0.02334         
                                          
            Sensitivity : 1.0000          
            Specificity : 0.8939          
         Pos Pred Value : 0.9521          
         Neg Pred Value : 1.0000          
             Prevalence : 0.6780          
         Detection Rate : 0.6780          
   Detection Prevalence : 0.7122          
      Balanced Accuracy : 0.9470          
                                          
       'Positive' Class : benign    
Çapraz performans testi (Cross validation test)
Burada modelin performansı çapraz performans testi yapılarak tüm veri seti üzerinde test edilir ve doğruluk oranı verilir. Bu işleme ilişkin yazılan R kod bloğu aşağıda verilmiştir. Bu kısım Bilgisayar işlemcisine bağlı olarak biraz uzun sürebilmektedir. Bu yüzden sabırlı olmakta fayda var 🙂 . Çapraz performans testinde aşağıdaki fonksiyonda görüleceği üzere v=10 yerine v=3 olarak alınmasının nedeni performans testinin kısa sürmesinin sağlanmak istenmesinden kaynaklanmaktadır. Yukarıda karışıklık matrisine göre verilen metrikler test verisine göre elde edilen hata metrikleridir. Yani yukarıda eğitim verisine göre kurulan model test verisi ile karşılaştırılmıştır. Buradaki ayrımı iyi yapmak gerekir.

per<-gbm(Class ~., data=tamveri, shrinkage=0.01, distribution="multinomial", cv.folds=3, n.trees=5000)
bestiter<-gbm.perf(per, method = "cv")

tamveritahmin<-predict(model, tamveri, n.trees=bestiter, type="response")[,,1]

tamveritahmin<-as.factor(colnames(tamveritahmin)[max.col(tamveritahmin)])

tamverikarsilastirma<-tibble("Sıra"=seq(1, NROW(tamveri)), "Gözlem"=tamveri$Class,Tahmin=tamveritahmin)
tamverikarsilastirma

confusionMatrix(tamverikarsilastirma$Gözlem, tamverikarsilastirma$Tahmin)

##tüm veri seti tahminlerini gözlem değerleriyle birlikte xlsx dokümanına yazdırılması
write_xlsx(tamverikarsilastirma, "tumverisetikarsilatirma.xlsx")
Yukarıdaki R kod bloğunun çalıştırılmasından sonra model tüm veri seti üzerinde test edilmiş ve performans parametre değerleri karışıklık matrisi ile birlikte aşağıda verilmiştir. Bulgular, gradyan yükseltme algoritmasının tüm veri seti üzerinde test edildiğinde meme kanseri türlerini % 96,2 doğruluk oranı ve % 3,8 hata oranı ile tahmin ettiğini göstermektedir. Uyumu gösteren Kappa katsayı ise yaklaşık % 92 olup, mükemmele yakın bir uyum elde edildiğini göstermektedir.

             Confusion Matrix and Statistics

           Reference
Prediction  benign malignant
  benign       434        10
  malignant     16       223
                                         
               Accuracy : 0.9619         
                 95% CI : (0.9447, 0.975)
    No Information Rate : 0.6589         
    P-Value [Acc > NIR] : <2e-16         
                                         
                  Kappa : 0.9158         
                                         
 Mcnemar's Test P-Value : 0.3268         
                                         
            Sensitivity : 0.9644         
            Specificity : 0.9571         
         Pos Pred Value : 0.9775         
         Neg Pred Value : 0.9331         
             Prevalence : 0.6589         
         Detection Rate : 0.6354         
   Detection Prevalence : 0.6501         
      Balanced Accuracy : 0.9608         
                                         
       'Positive' Class : benign      
Yukarıdaki R kod bloğunun son satırı çalıştırılmasından sonra tüm veri seti tahminlerini gözlem değerleriyle birlikte xlsx dokümanına yazdırılmıştır. Gözlem ve tahmin sınıflandırma değerlerine karşılaştırmalı olarak aşağıdaki xlsx dokümanını indirerek ulaşabilirsiniz.
Tüm Veri Seti Karşılaştırma Sonuçlarıİndir
Sonuç
Bu çalışmada sınıflandırma (classification) probleminin çözümüne yönelik topluluk öğrenme algoritmalarından biri olan gradyan yükseltme (gradient boosting) algoritması kullanılarak ayrıntılı deneysel bir çalışma yapılmıştır. Ortaya konulan bulgular, sınıflandırma probleminin gradyan yükseltme (gradient boosting) algoritması tarafından çok başarılı bir şekilde, diğer bir ifadeyle çok yüksek bir doğruluk (accuracy) oranıyla çözüme kavuşturulduğu görülmektedir.
Gradyan yükseltme algoritması test verisi üzerinde test edildiğinde meme kanseri türlerini yaklaşık % 96,6 doğruluk (accuracy) oranı ile tahmin etmektedir. Diğer taraftan tüm veri seti üzerinde test edildiğinde ise meme kanseri türlerini yaklaşık % 96,2 doğruluk (accuracy) oranı ile tahmin etmektedir. Hata oranı (error rate) 1-Doğruluk Oranı eşitliğinden tüm verisi setinde % 3,8’dir . Bu hata sınıflandırma hatası (classification error) olarak da nitelendirilebilir.
Yapılan bu çalışmanın özellikle veri bilimi (data science) ile ilgilenen akademi ve saha çalışanlarına önemli bir katkı sunacağı 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://web.stanford.edu/~hastie/TALKS/boost.pdf
https://iq.opengenus.org/types-of-boosting-algorithms/
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://www.stat.berkeley.edu/~breiman/Using_random_forests_V3.1.pdf
https://www.stat.berkeley.edu/~breiman/RandomForests/
https://stats.idre.ucla.edu/r/library/r-library-introduction-to-bootstrapping/
https://stanford.edu/~shervine/l/tr/teaching/cs-229/cheatsheet-machine-learning-tips-and-tricks
http://uzalcbs.org/wp-content/uploads/2016/11/2012_082.pdf
http://www.ub.edu/stat/docencia/EADB/bagging.html
https://people.cs.pitt.edu/~milos/courses/cs2750-Spring04/lectures/class23.pdf
https://www.google.com/search?q=underfitting+and+overfitting&source=lnms&tbm=isch&sa=X&ved=2ahUKEwiI1onvyNvpAhVSQMAKHfYyC28Q_AUoAXoECBAQAw&biw=1366&bih=604#imgrc=m5WcPcAqdpCwEM
Webb G.I. (2011) Overfitting. In: Sammut C., Webb G.I. (eds) Encyclopedia of Machine Learning. Springer, Boston, MA
https://www.memorial.com.tr/saglik-rehberleri/biyopsi-nedir-ve-nasil-yapilir/
https://archive.ics.uci.edu/ml/datasets/Breast+Cancer+Wisconsin+(Diagnostic)
Andriyas, S. and McKee, M. (2013). Recursive partitioning techniques for modeling irrigation behavior. Environmental Modelling & Software, 47, 207–217.
Chan, J. C. W. and Paelinckx, D. (2008). Evaluation of Random Forest and Adaboost tree-based ensemble classification and spectral band selection for ecotope mapping using airborne hyperspectral imagery. Remote Sensing of Environment, 112(6), 2999–3011.
Chrzanowska, M., Alfaro, E., and Witkowska, D. (2009). The individual borrowers recognition:Single and ensemble trees. Expert Systems with Applications, 36(2), 6409–6414.
De Bock, K. W., Coussement, K., and Van den Poel, D. (2010). Ensemble classification based on generalized additive models. Computational Statistics & Data Analysis, 54(6), 1535–1546.
De Bock, K. W. and Van den Poel, D. (2011). An empirical evaluation of rotation-based ensemble classifiers for customer churn prediction. Expert Systems with Applications, 38(10), 12293–12301.
Fan, Y., Murphy, T.B., William, R. and Watson G. (2009). digeR: GUI tool for analyzing 2D DIGE data. R package version 1.2.
Garcia-Perez-de-Lema, D., Alfaro-Cortes, E., Manzaneque-Lizano, M. and Banegas-Ochovo, R. (2012). Strategy, competitive factors and performance in small and medium enterprise (SMEs).
African Journal of Business Management, 6(26), 7714–7726.
Gonzalez-Rufino, E., Carrion, P., Cernadas, E., Fernandez-Delgado, M. and Dominguez-Petit, R.(2013). Exhaustive comparison of colour texture features and classification methods to discriminate cells categories in histological images of fish ovary. Pattern Recognition, 46, 2391–2407.
Krempl, G. and Hofer, V. (2008). Partitioner trees: combining boosting and arbitrating. In: Okun, O., Valentini, G. (eds.) Proc. 2nd Workshop Supervised and Unsupervised Ensemble Methods and Their Applications, Patras, Greece, 61–66.
Torgo, Luis, Data Mining With R. Second Edition.
https://www.akira.ai/glossary/gradient-boosting/
http://www.ccs.neu.edu/home/vip/teach/MLcourse/4_boosting/slides/gradient_boosting.pdf
Breiman, L. (June 1997). “Arcing The Edge” (PDF). Technical Report 486. Statistics Department, University of California, Berkeley.
https://machinelearningmastery.com/gentle-introduction-gradient-boosting-algorithm-machine-learning/
Bunu paylaş:
Facebook
Twitter
Reddit
Telegram
E-posta
Yazdır
Daha fazla
LinkedIn
Tumblr
Pinterest
Pocket
WhatsApp
Skype
Bunu beğen:
Beğen Yükleniyor...
Tevfik BULUT	Genel	Yorum bırakın 27 Haziran 2020 27 Haziran 2020 23 Minutes	
Topluluk Öğrenme Algoritmalarından Yükseltme Algoritması İle Gögüs Kanserinin Tahmini Üzerine Bir Vaka Çalışması: A Case Study on the Prediction of Breast Cancer Using Boosting Algorithm from Ensemble Learning Algorithms
Giriş
Topluluk (ensemble) öğrenme algoritmaları tahmine dayalı analitik çalışmalarda en başarılı yaklaşımlardan biridir. Bu algoritmalar somut bir problemi çözmek için bir araya gelen modeller setinden oluşmaktadır. Amaç modeller setinin ürettiği tahminleri birleştirerek doğruluğu (accuracy) artırmaktır. Topluluk algoritmaları kendi içerisinde üç grupta ele alınır.
Torbalama (Bagging: Bootsrap Aggregating)
Yükseltme (Boosting)
AdaBoost
Gradient Boosting
XGBoost
LightGBM
İstif (Stacking)
Topluluk (ensemble) öğrenme algoritmalarından biri olan yükseltme, ingilizce ifadeyle boosting, Schapire tarafından 1990 yılında geliştirilen hem sınıflandırma hem de regresyon problemlerinin çözümünde kullanılan makine öğrenmesine dayanan topluluk algoritmasıdır. Yükseltme algoritmaları temel olarak şu soruya cevap bulmak için geliştirilmiştir: bir zayıf öğrenici setinden tek bir güçlü öğrenici oluşturabilir mi? Bu algoritmalar yinelemeli olarak çalışır. Bu yöntemde her bir yinelemede yeni bir zayıf öğrenici ilave edilerek güçlü bir öğrenici oluşturulur. Diğer bir ifadeyle, zayıf öğrenicilerin bir araya gelmesiyle güçlü bir öğrenici oluşturulur. Bireysel modeller, tüm veri kümesinde iyi performans göstermez, ancak veri kümesinin bir kısmı için iyi çalışır. Bu nedenle, her model aslında topluluğun performansını artırır.
En iyi bilinen ve en başarılı yükseltme algoritmalarından biri Freund ve Shapire tarafından 1996 yılında geliştirilen AdaBoost (Adaptive Boosting) algoritmasıdır. Bir topluluk oluşturmak için yeni modellerin eklendiği yinelemeli (iteratif) bir süreçten oluşur. Bu bir anlamda adaptiftir. Algoritmanın her yeni yinelenmesinde, yeni modeller önceki yinelemelerde yapılan hataların üstesinden gelmek için inşa edilir. Bu yöntemde, sonraki her bir modelin önceki modeldeki hataları düzeltmeye çalıştığı sıralı (sequential) bir işlem yapılır. Yani sonraki modeller önceki modele bağımlıdır. AdaBoost algoritması temel olarak sınıflandırma problemlerinin çözümü için geliştirilse de regresyon problemlerinin çözümünde de kullanılabilir. Yükseltme algoritmasının nasıl çalıştığını aşağıda adım adım verelim.
Orijinal veri kümesinden bir alt küme oluşturulur.
Başlangıçta, tüm veri noktalarına eşit ağırlık verilir.
Bu alt kümede bir baz model oluşturulur.
Bu model, tüm veri kümesi üzerinde tahminler yapmak için kullanılır.
Hatalar, gözlem ve tahmin değerleri kullanılarak hesaplanır.
Yanlış tahmin edilen gözlemlere daha yüksek ağırlık verilir.
Başka bir model oluşturulur ve veri kümesinde tahminler yapılır.
Benzer şekilde, her biri bir önceki modelin hatalarını düzelten birden çok model oluşturulur.
Nihai model (güçlü öğrenen) tüm modellerin (zayıf öğrenenler) ağırlıklı ortalamasıdır.
Yukarıdaki adımları özetlemesi açısından Yükseltme algoritmasının işleyiş süreci Şekil 1’de verilmiştir.
Şekil 1: Yükseltme (Boosting) Algoritmasının İşleyiş Süreci
Kaynak: https://iq.opengenus.org
Yükseltme algoritmaları topluluk üyelerinin her biri birbirine bağımlıdır. Torbalama algoritmaları paralel düzende, yükseltme algoritmaları ise ardışık (sequential) düzende çalışmaktadır.
Modeller oluşturulurken temel amaç, bias ve varyans dengesinin kurulmasıdır. Bu uyumu sağlarsak iyi model uyumu (good-fit) elde etmiş oluruz. Makine öğrenme ve derin öğrenme problemlerinin çözümünde modelleme hatalarına bağlı olarak varyans ve bias değişiklik göstermektedir. Bu iki durum şöyle ele alınabilir:
Eksik model uyumu (under-fitting): Kurulan modelde elde edilen tahmin değerleri gözlem verisine yeterince uyum göstermediğinde ortaya çıkar. Bu durumda varyans düşükken bias yüksektir. Buradan şunu anlamak gerekir: gözlem verisi ile tahmin edilen veri arasındaki fark büyükse, diğer bir deyişle kurulan modelle bağımlı değişken iyi tahmin edilemiyorsa bu durumda under-fitting oluşur. Under-fitting sonraki kısımlarında anlatılan sınıflandırma ve regresyon hata metrikleri ile kolaylıkla ortaya konulabilir.
Aşrı model uyumu (over-fitting): Kurulan modelde eğitilen veri seti (training data set)’yle gözlem verisine aşırı uyum gösterdiğinde ortaya çıkar. Bu durumda varyans yüksekken bias düşüktür.
Bahsedilen bu iki durumu kafamızda daha da canlı tutmak için bias ve varyans ilişkisi Şekil 2’de verilmiştir. Şekil’de biz modeli kurgularken olması gereken durumu gösteren Düşük Varyans-Düşük Bias uyumunu, diğer bir ifadeyle yüksek kesinlik (precision)-yüksek doğruluk (accuracy) hedefliyoruz. Diğer bir deyişle kurguladığımız model (Şekil 2 1 nolu model) ile gözlem değerlerini olabildiğince en yüksek doğruluk oranı ile tahmin ederken aynı zamanda varyansı düşük (yüksek kesinlik (precision)) tutmayı hedefliyoruz. Buna başardığımızda aslında iyi model uyumunu (good-fit) sağlamış ve iyi bir model kurmuş oluyoruz. Eksik model uyumu (under-fitting)’nda ise Şekil 2’de 3 nolu modelde görüleceği üzere elde edilen tahmin değerleri gözlem değerleri (kırmızı alan)’nden uzaklaşmakla birlikte hala tahmin değerleri ile gözlem değerleri arasında farklar, diğer bir deyişle varyans düşüktür. Aşırı model uyumu (over-fitting)’da ise Şekil 2’de 2 nolu modelde görüleceği üzere varyans yüksek iken bias düşüktür. 2 nolu modelde doğru değerler (gözlem değerleri)’i kurulan modelde yüksek doğrulukla (düşük bias=yüksek doğruluk (accuracy) tahmin edilse de gözlem değerleri ile tahmin değerleri arasındaki varyans yüksektir.
Şekil 2: Bias-Varyans İlişkisi
Veri Tipleri
Yükseltme algoritması ile sınıflandırma problemi çözüyorsak bağımlı değişkenin ya da cevap değişkeninin veri tipi nitel ve kategoriktir. Ancak, bu yöntem ile regresyon problemini çözüyorsak bağımlı değişkenin ya da cevap değişkeninin veri tipi niceldir. Veri tipleri kendi içerisinde 4 farklı alt sınıfta ele alınabilir. Bu veri tipleri alt sınıflarıyla birlikte Şekil 3’te verilmiştir.
Şekil 3: Veri Tipleri
Nicel Veri (Quantitative Data)
Şekil 3’te sunulan nicel veri tipi ölçülebilen veri tipi olup, kendi içerisinde temel olarak ikiye ayrılmaktadır. Bu veri tipine alt sınıflandırmalar dikkate alınarak sırasıyla örnek verelim.
Sürekli veri (Continous data): Tam sayı ile ifade edilmeyen veri tipi olup, zaman, sıcaklık, beden kitle endeksi, boy ve ağırlık ölçümleri bu veri tipine örnek verilebilir.
Kesikli veri (Discrete Data): Tam sayı ile ifade edilebilen veri tipi olup, bu veri tipine proje sayısı, popülasyon sayısı, öğrenci sayısı örnek verilebilir.
Nitel Veri (Qualitative Data)
Şekil 3’te verilen nitel veri tipi ölçülemeyen ve kategori belirten veri tipi olup, kendi içerisinde temel olarak ikiye ayrılmaktadır. Bu veri tipine alt sınıflandırmalar şöyledir:
Nominal veri: İki veya daha fazla cevap kategorisi olan ve sıra düzen içermeyen veri tipi olup, bu veri tipine medeni durum (evli, bekar) ve sosyal güvenlik türü (Bağkur, SSK, Yeşil Kart, Özel Sigorta) örnek gösterilebilir.
Ordinal veri: İki veya daha fazla kategorisi olan ancak sıra düzen belirten veri türüdür. Bu veri tipine örnek olarak eğitim düzeyleri (İlkokul, ortaokul, lise, üniversite ve yüksek lisans), yarışma dereceleri (1. , 2. ve 3.) ve illerin gelişmişlik düzeyleri (1. Bölge, 2. Bölge, 3. Bölge, 4. Bölge, 5. Bölge ve 6. Bölge) verilebilir.
Veri tiplerinden bahsedildikten sonra bu veri tiplerinin cevap değişkeni (bağımlı değişken) olduğu durumlarda seçilecek analiz yöntemini ele alalım. Temel olarak cevap değişkeni ölçülebilir numerik değişken ise regresyon, değilse sınıflandırma analizi yapıyoruz. Cevap değişkeni, diğer bir deyişle bağımlı değişken numerik ise bağımsız değişken veya değişkenlerin çıktı (output) / bağımlı değişken (dependent variable) / hedef değişken (target variable) veya değişkenlerin üzerindeki etkisini tahmin etmeye çalışıyoruz. Buradaki temel felsefeyi anlamak son derece önemlidir. Çünkü bu durum sizin belirleyeceğiniz analiz yöntemini de değiştirecektir.
Kullanılan analiz yöntemi ile kurulan modelde ya sınıflandırma problemini ya da regresyon problemini çözdüğümüzü ifade etmiştik. Ancak kurulan modellerde çözülen problemin sınıflandırma ya da regresyon oluşuna göre performans değerlendirmesi farklılaşmaktadır. Sınıflandırma problemlerinde kullanılan hata metrikleri ile regresyon hata metrikleri aynı değildir. Bu bağlamda ilk olarak sınıflandırma problemlerinin çözümünde kullanılan hata metriklerini ele alalım.
Sınıflandırma Problemlerinde Hata Metrikleri
Karışıklık matrisi (confusion matrix) olarak 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. Tablo 1’de hata metriklerinin hesaplanmasına esas teşkil eden karışıklık matrisi (confisioun matrix) 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.
Tablo 1: Karışıklık Matrisi (Confusion Matrix)
Kaynak: Stanford Üniversitesi
Tablo 1’de TP: Doğru Pozitifleri, FN: Yanlış Negatifleri, FP: Yanlış Pozitifleri ve TN: Doğru Negatifleri göstermektedir.
Şekil 3’te de yer verildiği üzere literatürde sınıflandırma modellerinin performansını değerlendirmede aşağıdaki hata metriklerinden yaygın bir şekilde yararlanıldığı görülmektedir. Sınıflandırma problemlerinin çözümüne yönelik Rastgele Orman Algoritması (RF) kullanarak R’da yapmış olduğum çalışmanın linkini ilgilenenler için aşağıda veriyorum.
R Programlama Diliyle Sınıflandırma Problemlerinin Çözümünde Rastgele Orman Algoritması Üzerine Bir Vaka Çalışması: A Case Study on Random Forest (RF) Algorithm in Solving Classification Problems with R Programming Language
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 modellerin perfomansı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.
Sınıflandırma hata metriklerini anlattıktan sonra daha kalıcı olması ve öğrenilmesi adına hazırladığım excel üzerinde bahsedilen bu metriklerin nasıl hesaplandığı gösterilmiştir. Excel dosyasını aşağıdaki linkten indirebilirsiniz.
Sınıflandırma Metrikleriİndir
Regresyon Problemlerinde Hata Metrikleri
Regresyon modellerinin performansını değerlendirmede literatürde aşağıdaki hata metriklerinden yaygın bir şekilde yararlanılmaktadır. Regresyon metrikleri eşitliklerinin verilmesi yerine sade bir anlatımla neyi ifade ettiği anlatılacaktır. Böylece formüllere boğulmamış olacaksınız.
SSE (Sum of Square Error): Tahmin edilen değerler ile gözlem değerleri arasındaki farkların kareleri toplamını ifade eder.
MSE (Mean Square Error): Ortalama kare hatası olarak adlandırılan bu hata tahmin edilen değerler ile gözlem değerleri arasındaki farkların karelerinin ortalamasını ifade eder.
RMSE (Root Mean Square Error): Kök ortalama kare hatası olarak adlandırılan bu hata ortalama kare hatasının karekökünü ifade etmektedir.
MAE (Mean Absolute Error): Ortalama mutlak hata olarak adlandırılan bu hata türü ise tahmin edilen değerler ile gözlem değerleri arasındaki farkların mutlak değerlerinin ortalamasını ifade etmektedir.
MAPE (Mean Absolute Percentage Error): Ortalama mutlak yüzdesel hata olarak adlandırılan bu hata türünde ilk olarak tahmin edilen değerler ile gözlem değerleri arasındaki farkların mutlak değerleri hesaplanır. Daha sonra hesaplanan farkları mutlak değerleri mutlak değerleri alınan gözlem değerlerine bölünür. En son durumda ise elde edilen bu değerlerin ortalaması alınır.
Bias: Tahmin edilen değerler ile gözlem değerleri arasındaki farkların ortalamasıdır. Bu yönüyle ortalama mutlak hata (MAE)’ya benzemektedir.
Regresyon hata metriklerini anlattıktan sonra daha kalıcı olması ve öğrenilmesi adına hazırladığım excel üzerinde bahsedilen bu metriklerin nasıl hesaplandığı gösterilmiştir. Excel dosyasını aşağıdaki linkten indirebilirsiniz.
Regresyon Metrikleri İndir
Çalışma kapsamında yükseltme algoritmasıyla sınıflandırma problemi çözülecektir. Bu amaçla Wisconsin Üniversitesi Hastanesinden alınan Meme Kanseri veri seti kullanılarak bağımlı değişken olan meme kanserinin tipi tahmin edilecektir.
Metodoloji ve Uygulama Sonuçları
Bu bölümde torpalama algoritması kullanılarak meme kanserinin türü (iyi huylu: benign, kötü huylu: malign) tahmin edilmiştir. Diğer bir ifadeyle, bu çalışmada sınıflandırma problemi çözmüş olacağız. Analizde kullanılan veri seti Wisconsin Üniversitesi Hastanelerinde 15 Temmuz 1992 tarihine kadar tedavi görmüş hastalardan alınan meme biyopsi verilerini içermektedir. Biyopsi’den bahsetmişken ne anlama geldiğini de açıklayalım. Biyopsi, vücudun farklı bölgelerinden mikroskop yardımıyla inceleme ve farklı tetkikler yaparak hastalık şüphesi bulunan bölgeden tanı amaçlı hücre ya da doku alma işlemidir. Veri setinde 15 Temmuz 1992’ye kadar 699 hastaya ait meme tümör biyopsi gözlemleri bulunmaktadır. Veri setindeki toplam gözlem sayısı 699, değişken sayısı ise 10 (ID numarası hariç)’dur. Bu veri setine R programlama yazılımında “MASS” paketi içerisinde “biopsy” olarak yer verilmiştir. Ancak veri setinde değişkenlerin adları tam olarak yazılmadığı için R programlama dilinde revize edilmiş ve R programlama dili kullanılarak yükseltme (boosting) algoritmasıyla analiz edilmiştir.
Cl.thickness: Kitlenin kalınlığını (clump thickness) göstermektedir. Cevap değişkenleri 1’den 10’a kadar bir ölçekte puanlanmıştır. Veri tipi nicel ve kesiklidir.
Cell.size: Hücre büyüklüğünün homojenliğini (uniformity of cell size) göstermektedir. Cevap değişkenleri 1’den 10’a kadar bir ölçekte puanlanmıştır. Veri tipi nicel ve kesiklidir.
Cell.shape: Hücre şeklinin bütünlüğünü (uniformity of cell shape) göstermektedir. Cevap değişkenleri 1’den 10’a kadar bir ölçekte puanlanmıştır. Veri tipi nicel ve kesiklidir.
Marg.adhesion: Marjinal yapışmayı göstermektedir. Cevap değişkenleri 1’den 10’a kadar bir ölçekte puanlanmıştır. Veri tipi nicel ve kesiklidir.
Epith.c.size Epitel hücre büyüklüğünü (single epithelial cell size) göstermektedir. Cevap değişkenleri 1’den 10’a kadar bir ölçekte puanlanmıştır. Veri tipi nicel ve kesiklidir.
Bare.nuclei: Sitoplazma (hücrenin geri kalanı) ile çevrili olmayan çekirdekler için kullanılan bir terimdir. Bunlar tipik olarak iyi huylu tümörlerde görülür. Cevap değişkenleri 1’den 10’a kadar bir ölçekte puanlanmıştır. Veri tipi nicel ve kesiklidir.
Bl.cromatin: Benign (iyi huylu) hücrelerde görülen çekirdeğin muntazam bir “dokusunu” açıklar (bland chromatin). Kanser hücrelerinde kromatin daha kaba olma eğilimindedir. Cevap değişkenleri 1’den 10’a kadar bir ölçekte puanlanmıştır. Veri tipi nicel ve kesiklidir.
Normal.nucleoli: Nükleoller, çekirdekte görülen küçük yapılardır. Kanser hücrelerinde nükleoller daha belirgin hale gelir. Cevap değişkenleri 1’den 10’a kadar bir ölçekte puanlanmıştır. Veri tipi nicel ve kesiklidir.
Mitoses: Mitotik aktivite, hücrelerin ne kadar hızlı bölündüğünün bir ölçüsüdür. Yüksek mitotik aktivite tipik olarak malign tümörlerde görülür. Cevap değişkenleri 1’den 10’a kadar bir ölçekte puanlanmıştır. Veri tipi nicel ve kesiklidir.
Class: Meme kanserinin tipini (iyi huylu mu yoksa kötü huylu mu) göstermektedir. Değişken kategorileri “benign” ve “malignant“, diğer bir deyişle iyi ve kötü huyludur.Veri tipi nitel ve nominal kategoriktir.
Bu kapsamda cevap değişkeni (bağımlı değişken) olan “Class” yani meme kanserinin türü geri kalan 9 bağımsız değişken kullanılarak yükseltme (boosting) algoritmasıyla tahmin edilecektir. Analizde kullanılan veri setini aşağıdaki linkten indirebilirsiniz.
Göğüs Kanseri Veri Setiİndir
Şimdi veri setini tanıdıktan sonra adım adım (step by step) analize başlayabiliriz. Analizde R programlama dili kullanarak analiz adımları R kod bloklarında verilmiştir.
Yüklenecek R kütüphaneleri

rm(list=ls())

kütüphaneler = c("dplyr","tibble","tidyr","ggplot2","formattable","readr","readxl","xlsx", "pastecs","fpc", "DescTools","e1071", "DMwR","caret", "viridis","GGally","ggpurr","psych","writexl","ggfortify","explore","MASS", "adabag", "rpart")
 
sapply(kütüphaneler, require, character.only = TRUE)
Ver setinin okunması ve değişkenlerin adlandırılması

veri<-biopsy %>% rename(Cl.thickness=V1, Cell.size=V2, Cell.shape=V3, Marg.adhesion=V4,  Epith.c.size=V5, Bare.nuclei=V6, Bl.cromatin=V7, Normal.nucleoli=V8, Mitoses=V9, Class=class)
veri<-veri[,-1]
Ver setinin xlsx ve csv uzantılı dosyalara yazdırılması

write.csv(veri, "gögüskanseriveriseti.csv")#csv dosyası için
write_xlsx(veri, "gögüskanseriveriseti.xlsx")#xlsx dosyası için
Yukarıdaki R kod bloğunun çalıştırılmasından sonra veri seti xlsx ve csv uzantılı dosyalara yazdırılmıştır. Elde edilen veri seti dosyası sadece xlsx uzantılı olarak aşağıdan indirilebilir. Sitem csv dosya yüklemesini desteklemediği için csv uzantılı dosya aşağıda verilememiştir. Ancak yukarıdaki R kod bloğu çalıştırabilir ve csv uzatılı dosya rmd dosyasının bulunduğu klasör içine otomatik olarak kaydedilebilir.
Göğüs Kanseri Veri Seti (xlsx)İndir
Veri setinin görselleştirilmesi ve tanımlayıcı istatistikler

#veri setindeki ilk 3 değişkenin görselleştirilmesi
veri[,1:3] %>% explore_all()
#veri setindeki 4,5,6 ve 7. değişkenlerin görselleştirilmesi
veri[,4:7] %>% explore_all()
#veri setindeki 8,9 ve 10. değişkenlerin görselleştirilmesi
veri[,8:10] %>% explore_all()

#veri setindeki ilk 10 gözlem
formattable(head(veri,10))

#Eksik gözlemler çıkarıldıktan sonra Pearson korelasyon matrisi 
tamveri<-na.omit(veri)
cor.plot(tamveri[,-10], main="Korelasyon Matrisi")
Yukarıdaki R kod bloğunun çalıştırılmasından sonra veri setindeki ilk 3 değişkenin grafiği aşağıda verilmiştir. Grafikte görüleceği üzere eksik gözlem (missing data: NA) bulunmamaktadır.
Yukarıdaki R kod bloğunun çalıştırılmasından sonra veri setindeki 4,5,6 ve 7. değişkenlerin grafiği aşağıda verilmiştir. Grafikte görüleceği üzere sadece Bare.nuclei değişkende 16 eksik gözlem (missing data: NA) bulunmaktadır.
Yukarıdaki R kod bloğunun çalıştırılmasından sonra veri setindeki 8,9 ve 10. değişkenlerin grafiği aşağıda verilmiştir. Grafikte görüleceği üzere eksik gözlem (missing data: NA) bulunmamaktadır.
Yukarıdaki R kod bloğunun çalıştırılmasından sonra meme kanseri veri setindeki ilk 10 gözlem aşağıdaki tabloda verilmiştir.
Yukarıdaki R kod bloğunun çalıştırılmasından sonra meme kanseri veri setindeki eksik gözlemlerin olduğu 16 satır çıkarılmış, ardından nicel ve kesikli değişkenlere ait Pearson korelasyon matrisi aşağıdaki şekilde verilmiştir. Bağımlı değişken dışındaki değişken çiftleri nicel (sürekli ve kesikli) olduğu için Pearson korelasyon katsayısını hesapladık.
Bağımlı değişken olan tümörün tipi (Class)’ne görer değişkenler arasındaki ilişki

tamveri %>% ggplot(aes(x = Cl.thickness, y = Cell.size, color = Class))+
        geom_point(position = position_dodge(0.9)) +
        facet_grid( ~Class)

tamveri %>% ggplot(aes(x = Cell.shape, y = Marg.adhesion, color = Class))+
        geom_point(position = position_dodge(0.9)) +
        facet_grid( ~Class)

tamveri %>% ggplot(aes(x = Epith.c.size, y = Bare.nuclei, color = Class))+
        geom_point(position = position_dodge(0.9)) +
        facet_grid( ~Class)

tamveri %>% ggplot(aes(x = Bl.cromatin, y = Normal.nucleoli, color = Class))+
        geom_point(position = position_dodge(0.9)) +
        facet_wrap(Mitoses~Class )
Yukarıdaki R kod bloğunun çalıştırılmasından sonra ilk iki değişkenin tümörün tipine göre kendi aralarındaki ilişki aşağıdaki grafikte verilmiştir.
Yukarıdaki R kod bloğunun çalıştırılmasından sonra 3. ve 4. değişkenin tümörün tipine göre kendi aralarındaki ilişki aşağıdaki grafikte verilmiştir.
Yukarıdaki R kod bloğunun çalıştırılmasından sonra 5. ve 6. değişkenin tümörün tipine göre kendi aralarındaki ilişki aşağıdaki grafikte verilmiştir.
Yukarıdaki R kod bloğunun çalıştırılmasından sonra 7, 8 ve 9. değişkenlerin tümörün tipine göre kendi aralarındaki ilişki aşağıdaki grafikte verilmiştir.
Veri setinin eğitilecek veri setine ve test veri setine ayrılması
Bu kısımda aşağıdaki R kod bloğunda 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: Eğer çok yüksek gözlem sayıları ile çalışıyorsanız bilgisayar işlemcisine bağlı olarak bu işlemin ç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(1461)
orneklem<- sample(1:NROW(tamveri), NROW(tamveri)*0.7)
train <- tamveri[orneklem, ]  
test <- tamveri[-orneklem, ]
Yükseltme (Boosting) modelinin kurulması

model <- boosting(Class ~., data=tamveri, mfinal=500)
Değişkenlerin önem düzeyleri

#önem düzeyi grafiği
importanceplot(model)
önem düzeyi değerleri tablosu
onem<-model$importance
degisken<-names(onem)
agirlik<-as_tibble(as.numeric(onem))
onemduzey<-tibble("Değişken"=degisken, "Önem Düzeyi"=round(agirlik$value,2))

formattable(onemduzey, 
            list(formatter(
              "span", style = ~ style(color = "grey",font.weight = "bold")),
`Önem Düzeyi` = color_bar("#FF6347")
))
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 grafikte verilmiştir.
Yukarıdaki kod bloğunun çalıştırılmasından sonra elde edilen modeldeki değişkenlerin önem düzeyleri değerleriyle birlikte aşağıdaki tabloda verilmiştir. Aşağıdaki tablo yukarıdaki grafiğe göre daha anlamlı olduğu söylenebilir.
Tahmin edilen değerler ile test veri setindeki gözlem değerlerinin karşılaştırılması

model <- boosting(Class ~., data=tamveri, mfinal=500)
tahmin<-predict(model, test)
karsilastirma<-tibble(Gozlem=test$Class, Tahmin=tahmin$class)
#ilk ve son 10 tahmin değerini gerçek değerle 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("Sıra"=seq(1,10),ilk10, son10))
Yukarıdaki R kod bloğunun çalıştırılmasından sonra yükseltme (boosting) modelinden elde edilen ilk ve son 10 tahmin sınıflandırma değerleri gözlem 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ı

cm<-tahmin$confusion
plot(cm, type = "heatmap", main="Karışıklık Matrisi")
Yukarıdaki R kod bloğunun çalıştırılmasından sonra elde edilen karışıklık matrisi aşağıda verilmiştir.

               Observed Class
Predicted Class benign malignant
      benign       128         4
      malignant      3        70
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.
Sınıflandırma Hata parametreleri
Kurulan modele ait hata parametrelerinin elde edilmesine yönelik yazılan R kod bloğu aşağıda verilmiştir.

cm<-confusionMatrix(karsilastirma$Tahmin, karsilastirma$Gozlem)
cm
Yukarıdaki R kod bloğunun çalıştırılmasından sonra elde edilen hata metrikleri bir bütün olarak aşağıda verilmiştir. Yükseltme (Boosting) algoritmasıyla kurulan model meme kanseri türlerini yaklaşık % 97 doğruluk (accuracy) oranı ile tahmin etmektedir. Hata oranı ise 100-97 eşitliğinden yola çıkarak % 3 buluruz. Uyumu gösteren Kappa katsayısı ise bu modelde yaklaşık % 93 (0,93) olup, tahmin edilen tümör türleri ile gözlemlenen tümör türleri arasında mükemmele yakın bir uyum olduğu görülmektedir. Bu bulgu aynı zamanda doğruluk oranını da destekler niteliktedir.

Confusion Matrix and Statistics

           Reference
Prediction  benign malignant
  benign       128         4
  malignant      3        70
                                          
               Accuracy : 0.9659          
                 95% CI : (0.9309, 0.9862)
    No Information Rate : 0.639           
    P-Value [Acc > NIR] : <2e-16          
                                          
                  Kappa : 0.9258          
                                          
 Mcnemar's Test P-Value : 1               
                                          
            Sensitivity : 0.9771          
            Specificity : 0.9459          
         Pos Pred Value : 0.9697          
         Neg Pred Value : 0.9589          
             Prevalence : 0.6390          
         Detection Rate : 0.6244          
   Detection Prevalence : 0.6439          
      Balanced Accuracy : 0.9615          
                                          
       'Positive' Class : benign  
Çapraz performans testi (Cross validation test)
Burada modelin performansı çapraz performans testi yapılarak tüm veri seti üzerinde test edilir ve doğruluk oranı verilir. Bu işleme ilişkin yazılan R kod bloğu aşağıda verilmiştir. Bu kısım Bilgisayar işlemcisine bağlı olarak biraz uzun sürebilmektedir. Bu yüzden sabırlı olmakta fayda var 🙂 . Çapraz performans testinde aşağıdaki fonksiyonda görüleceği üzere v=10 yerine v=2 olarak alınmasının nedeni performans testinin kısa sürmesinin sağlanmak istenmesinden kaynaklanmaktadır. v=10 olarak alınsaydı performans testi işlemi 1 günümüzü alabilirdi. Yukarıda karışıklık matrisine göre verilen metrikler test verisine göre elde edilen hata metrikleridir. Yani yukarıda eğitim verisine göre kurulan model test verisi ile karşılaştırılmıştır. Buradaki ayrımı iyi yapmak gerekir.

cv<-boosting.cv(Class ~., v=2, data=tamveri, mfinal=500)

#tüm veri seti sınıflandırma tablosu (karışıklık matrisi)
cv$confusion

#doğruluk (accuracy) ve hata (error) oranı
dogrulukvehataorani<-paste("Doğruluk Oranı: %",round((1-cv[-1]$error)*100,1),"ve","Hata Oranı: %",round(cv[-1]$error*100,1))
dogrulukvehataorani

#tüm veri seti tahminlerini gözlem değerleriyle birlikte xlsx dokümanına yazdırılması
tümverisetitahminkarsilatirma<-tibble(Sıra=1:683, Gözlem=tamveri$Class, Tahmin=as.factor(cv$class))
write_xlsx(tümverisetitahminkarsilatirma, "tümverisetitahminkarsilatirma.xlsx")
Yukarıdaki R kod bloğunun çalıştırılmasından sonra model tüm veri seti üzerinde test edilmiş ve performans parametre değerleri karışıklık matrisi ile birlikte aşağıda verilmiştir. Bulgular, yükseltme algoritmasının tüm veri seti üzerinde test edildiğinde meme kanseri türlerini % 96,2 doğruluk oranı ve % 3,8 hata oranı ile tahmin ettiğini göstermektedir.

               Observed Class
Predicted Class benign malignant
      benign       428        10
      malignant     16       229

 "Doğruluk Oranı: % 96.2 ve Hata Oranı: % 3.8"
Yukarıdaki R kod bloğunun son 4 satırı çalıştırılmasından sonra tüm veri seti tahminlerini gözlem değerleriyle birlikte xlsx dokümanına yazdırılmıştır. Gözlem ve tahmin sınıflandırma değerlerine karşılaştırmalı olarak aşağıdaki xlsx dokümanını indirerek ulaşabilirsiniz.
Tüm Veri Seti Karşılaştırma Sonuçlarıİndir
Sonuç
Bu çalışmada sınıflandırma (classification) probleminin çözümüne yönelik topluluk öğrenme algoritmalarından biri olan yükseltme (boosting) algoritması kullanılarak ayrıntılı deneysel bir çalışma yapılmıştır. Ortaya konulan bulgular, sınıflandırma probleminin yükseltme (boosting) algoritması tarafından çok başarılı bir şekilde, diğer bir ifadeyle çok yüksek bir doğruluk (accuracy) oranıyla çözüme kavuşturulduğu görülmektedir.
Yükseltme algoritması test verisi üzerinde test edildiğinde meme kanseri türlerini % 96,5 doğruluk (accuracy) oranı ile tahmin etmektedir. Diğer taraftan tüm veri seti üzerinde test edildiğinde ise meme kanseri türlerini yaklaşık % 96,2 doğruluk (accuracy) oranı ile tahmin etmektedir. Hata oranı (error rate) 1-Doğruluk Oranı eşitliğinden tüm verisi setinde % 3,8’dir . Bu hata sınıflandırma hatası (classification error) olarak da nitelendirilebilir.
Yapılan bu çalışmanın özellikle veri bilimi (data science) ile ilgilenen akademi ve saha çalışanlarına önemli bir katkı sunacağı 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://web.stanford.edu/~hastie/TALKS/boost.pdf
https://iq.opengenus.org/types-of-boosting-algorithms/
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://www.stat.berkeley.edu/~breiman/Using_random_forests_V3.1.pdf
https://www.stat.berkeley.edu/~breiman/RandomForests/
https://stats.idre.ucla.edu/r/library/r-library-introduction-to-bootstrapping/
https://stanford.edu/~shervine/l/tr/teaching/cs-229/cheatsheet-machine-learning-tips-and-tricks
http://uzalcbs.org/wp-content/uploads/2016/11/2012_082.pdf
http://www.ub.edu/stat/docencia/EADB/bagging.html
https://people.cs.pitt.edu/~milos/courses/cs2750-Spring04/lectures/class23.pdf
https://www.google.com/search?q=underfitting+and+overfitting&source=lnms&tbm=isch&sa=X&ved=2ahUKEwiI1onvyNvpAhVSQMAKHfYyC28Q_AUoAXoECBAQAw&biw=1366&bih=604#imgrc=m5WcPcAqdpCwEM
Webb G.I. (2011) Overfitting. In: Sammut C., Webb G.I. (eds) Encyclopedia of Machine Learning. Springer, Boston, MA
https://www.memorial.com.tr/saglik-rehberleri/biyopsi-nedir-ve-nasil-yapilir/
https://archive.ics.uci.edu/ml/datasets/Breast+Cancer+Wisconsin+(Diagnostic)
Andriyas, S. and McKee, M. (2013). Recursive partitioning techniques for modeling irrigation behavior. Environmental Modelling & Software, 47, 207–217.
Chan, J. C. W. and Paelinckx, D. (2008). Evaluation of Random Forest and Adaboost tree-based ensemble classification and spectral band selection for ecotope mapping using airborne hyperspectral imagery. Remote Sensing of Environment, 112(6), 2999–3011.
Chrzanowska, M., Alfaro, E., and Witkowska, D. (2009). The individual borrowers recognition:Single and ensemble trees. Expert Systems with Applications, 36(2), 6409–6414.
De Bock, K. W., Coussement, K., and Van den Poel, D. (2010). Ensemble classification based on generalized additive models. Computational Statistics & Data Analysis, 54(6), 1535–1546.
De Bock, K. W. and Van den Poel, D. (2011). An empirical evaluation of rotation-based ensemble classifiers for customer churn prediction. Expert Systems with Applications, 38(10), 12293–12301.
Fan, Y., Murphy, T.B., William, R. and Watson G. (2009). digeR: GUI tool for analyzing 2D DIGE data. R package version 1.2.
Garcia-Perez-de-Lema, D., Alfaro-Cortes, E., Manzaneque-Lizano, M. and Banegas-Ochovo, R. (2012). Strategy, competitive factors and performance in small and medium enterprise (SMEs).
African Journal of Business Management, 6(26), 7714–7726.
Gonzalez-Rufino, E., Carrion, P., Cernadas, E., Fernandez-Delgado, M. and Dominguez-Petit, R.(2013). Exhaustive comparison of colour texture features and classification methods to discriminate cells categories in histological images of fish ovary. Pattern Recognition, 46, 2391–2407.
Krempl, G. and Hofer, V. (2008). Partitioner trees: combining boosting and arbitrating. In: Okun, O., Valentini, G. (eds.) Proc. 2nd Workshop Supervised and Unsupervised Ensemble Methods and Their Applications, Patras, Greece, 61–66.
Torgo, Luis, Data Mining With R. Second Edition.
Bunu paylaş:
Facebook
Twitter
Reddit
Telegram
E-posta
Yazdır
Daha fazla
LinkedIn
Tumblr
Pinterest
Pocket
WhatsApp
Skype
Bunu beğen:
Beğen Yükleniyor...
Tevfik BULUT	Genel	Yorum bırakın 23 Haziran 2020 27 Haziran 2020 22 Minutes	
Topluluk Öğrenme Algoritmalarından Torbalama Algoritması İle Konut Fiyatlarının Tahmini Üzerine Bir Vaka Çalışması: A Case Study on the Prediction of Housing Prices Using Bagging Algorithm from Ensemble Learning Algorithms
Giriş
Topluluk (ensemble) öğrenme algoritmaları tahmine dayalı analitik çalışmalarda en başarılı yaklaşımlardan biridir. Bu algoritmalar somut bir problemi çözmek için bir araya gelen modeller setinden oluşmaktadır. Amaç modeller setinin ürettiği tahminleri birleştirerek doğruluğu (accuracy) artırmaktır. Topluluk algoritmaları kendi içerisinde üç grupta ele alınır.
Torbalama (Bagging: Bootsrap Aggregating)
Artırma (Boosting)
İstif (Stacking)
Topluluk (ensemble) öğrenme algoritmalarından biri olan torpalama, ingilizce ifadeyle Bagging, Breiman tarafından 1994 yılında geliştirilen hem sınıflandırma hem de regresyon problemlerinin çözümünde kullanılan makine öğrenmesine dayanan topluluk algoritmasıdır. Torbalama algoritmasının işleyiş süreci Şekil 1’de verilmiştir.
Şekil 1: Torbalama (Bagging) Algoritmasının İşleyiş Süreci
Şekil 1’de belirtilen torbalama algoritmasının işleyiç sürecini adım adım şöyle özetleyebiliriz.
Popülasyon (N) birimlerini eğitilecek (training) veri setine ve test edilecek (testing) veri setine basit tekrarsız tesadüfi örnekleme (simple random sampling without replacement) yöntemiyle ayrılır. Burada literatürde genellikle eğitilecek veri seti seti için popülasyonun % 70’i alınsa da bu oran veri setinin ya da popülasyonun büyüklüğüne göre değişkenlik gösterebilmektedir. Bu oran 70:30 olabileceği gibi, 60:40 veya 80:20 oranı şeklinde de olabilir.
Eğitilecek veri setini belirledikten sonra basit tekrarlı tesadüfi örnekleme yoluyla torbalara (1’den n’e kadar) örneklem birimleri (sample units) atanır.
Örneklem birimleri kurulan modellerde eğitilir.
Regresyon problemini çözüyorsak kurulan modellerden elde edilen sonuçların ortalaması alınarak bağımlı değişken (y) belirlenir. Sınıflandırma problemi çözüyorsak kurulan modellerden elde edilen çoğunluk oylama sonuçlarına göre karar verip y’yi, diğer bir ifadeyle bağımlı değişkeni (dependent variable) tahmin etmiş oluruz.
Modeller oluşturulurken temel amaç, bias ve varyans dengesinin kurulmasıdır. Bu uyumu sağlarsak iyi model uyumu (good-fit) elde etmiş oluruz. Makine öğrenme ve derin öğrenme problemlerinin çözümünde modelleme hatalarına bağlı olarak varyans ve bias değişiklik göstermektedir. Bu iki durum şöyle ele alınabilir:
Eksik model uyumu (under-fitting): Kurulan modelde elde edilen tahmin değerleri gözlem verisine yeterince uyum göstermediğinde ortaya çıkar. Bu durumda varyans düşükken bias yüksektir. Buradan şunu anlamak gerekir: gözlem verisi ile tahmin edilen veri arasındaki fark büyükse, diğer bir deyişle kurulan modelle bağımlı değişken iyi tahmin edilemiyorsa bu durumda under-fitting oluşur. Under-fitting sonraki kısımlarında anlatılan sınıflandırma ve regresyon hata metrikleri ile kolaylıkla ortaya konulabilir.
Aşrı model uyumu (over-fitting): Kurulan modelde eğitilen veri seti (training data set)’yle gözlem verisine aşırı uyum gösterdiğinde ortaya çıkar. Bu durumda varyans yüksekken bias düşüktür.
Bahsedilen bu iki durumu kafamızda daha da canlı tutmak için bias ve varyans ilişkisi Şekil 2’de verilmiştir. Şekil’de biz modeli kurgularken olması gereken durumu gösteren Düşük Varyans-Düşük Bias uyumunu hedefliyoruz. Diğer bir ifadeyle, kurguladığımız model (Şekil 2 1 nolu model) ile gözlem değerlerini olabildiğince en yüksek doğruluk oranı ile tahmin ederken aynı zamanda varyansı düşük tutmayı hedefliyoruz. Buna başardığımızda aslında iyi model uyumunu (good-fit) sağlamış ve iyi bir model kurmuş oluyoruz. Eksik model uyumu (under-fitting)’nda ise Şekil 2’de 3 nolu modelde görüleceği üzere elde edilen tahmin değerleri gözlem değerleri (kırmızı alan)’nden uzaklaşmakla birlikte hala tahmin değerleri ile gözlem değerleri arasında farklar, diğer bir deyişle varyans düşüktür. Aşırı model uyumu (over-fitting)’da ise Şekil 2’de 2 nolu modelde görüleceği üzere varyan yüksek iken bias düşüktür. 2 nolu modelde doğru değerler (gözlem değerleri)’i kurulan modelde yüksek doğrulukla (düşük bias) tahmin edilse de gözlem değerleri ile tahmin değerleri arasındaki varyans yüksektir.
Şekil 2: Bias-Varyans İlişkisi
Veri Tipleri
Torbalama yöntemi ile sınıflandırma problemi çözüyorsak bağımlı değişkenin ya da cevap değişkeninin veri tipi nitel ve kategoriktir. Ancak, bu yöntem ile regresyon problemini çözüyorsak bağımlı değişkenin ya da cevap değişkeninin veri tipi niceldir. Veri tipleri kendi içerisinde 4 farklı alt sınıfta ele alınabilir. Bu veri tipleri alt sınıflarıyla birlikte Şekil 3’te verilmiştir.
Şekil 3: Veri Tipleri
Nicel Veri (Quantitative Data)
Şekil 3’te sunulan nicel veri tipi ölçülebilen veri tipi olup, kendi içerisinde temel olarak ikiye ayrılmaktadır. Bu veri tipine alt sınıflandırmalar dikkate alınarak sırasıyla örnek verelim.
Sürekli veri (Continous data): Tam sayı ile ifade edilmeyen veri tipi olup, zaman, sıcaklık, beden kitle endeksi, boy ve ağırlık ölçümleri bu veri tipine örnek verilebilir.
Kesikli veri (Discrete Data): Tam sayı ile ifade edilebilen veri tipi olup, bu veri tipine proje sayısı, popülasyon sayısı, öğrenci sayısı örnek verilebilir.
Nitel Veri (Qualitative Data)
Şekil 3’te verilen nitel veri tipi ölçülemeyen ve kategori belirten veri tipi olup, kendi içerisinde temel olarak ikiye ayrılmaktadır. Bu veri tipine alt sınıflandırmalar şöyledir:
Nominal veri: İki veya daha fazla cevap kategorisi olan ve sıra düzen içermeyen veri tipi olup, bu veri tipine medeni durum (evli, bekar) ve sosyal güvenlik türü (Bağkur, SSK, Yeşil Kart, Özel Sigorta) örnek gösterilebilir.
Ordinal veri: İki veya daha fazla kategorisi olan ancak sıra düzen belirten veri türüdür. Bu veri tipine örnek olarak eğitim düzeyleri (İlkokul, ortaokul, lise, üniversite ve yüksek lisans), yarışma dereceleri (1. , 2. ve 3.) ve illerin gelişmişlik düzeyleri (1. Bölge, 2. Bölge, 3. Bölge, 4. Bölge, 5. Bölge ve 6. Bölge) verilebilir.
Veri tiplerinden bahsedildikten sonra bu veri tiplerinin cevap değişkeni (bağımlı değişken) olduğu durumlarda seçilecek analiz yöntemini ele alalım. Temel olarak cevap değişkeni ölçülebilir numerik değişken ise regresyon, değilse sınıflandırma analizi yapıyoruz. Cevap değişkeni, diğer bir deyişle bağımlı değişken numerik ise bağımsız değişken veya değişkenlerin çıktı (output) / bağımlı değişken (dependent variable) / hedef değişken (target variable) veya değişkenlerin üzerindeki etkisini tahmin etmeye çalışıyoruz. Buradaki temel felsefeyi anlamak son derece önemlidir. Çünkü bu durum sizin belirleyeceğiniz analiz yöntemini de değiştirecektir.
Kullanılan analiz yöntemi ile kurulan modelde ya sınıflandırma problemini ya da regresyon problemini çözdüğümüzü ifade etmiştik. Ancak kurulan modellerde çözülen problemin sınıflandırma ya da regresyon oluşuna göre performans değerlendirmesi farklılaşmaktadır. Sınıflandırma problemlerinde kullanılan hata metrikleri ile regresyon hata metrikleri aynı değildir. Bu bağlamda ilk olarak sınıflandırma problemlerinin çözümünde kullanılan hata metriklerini ele alalım.
Sınıflandırma Problemlerinde Hata Metrikleri
Karışıklık matrisi (confusion matrix) olarak 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. Tablo 1’de hata metriklerinin hesaplanmasına esas teşkil eden karışıklık matrisi (confisioun matrix) 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.
Tablo 1: Karışıklık Matrisi (Confusion Matrix)
Kaynak: Stanford Üniversitesi
Tablo 1’de TP: Doğru Pozitifleri, FN: Yanlış Negatifleri, FP: Yanlış Pozitifleri ve TN: Doğru Negatifleri göstermektedir.
Şekil 3’te de yer verildiği üzere literatürde sınıflandırma modellerinin performansını değerlendirmede aşağıdaki hata metriklerinden yaygın bir şekilde yararlanıldığı görülmektedir. Sınıflandırma problemlerinin çözümüne yönelik Rastgele Orman Algoritması (RF) kullanarak R’da yapmış olduğum çalışmanın linkini ilgilenenler için aşağıda veriyorum.
R Programlama Diliyle Sınıflandırma Problemlerinin Çözümünde Rastgele Orman Algoritması Üzerine Bir Vaka Çalışması: A Case Study on Random Forest (RF) Algorithm in Solving Classification Problems with R Programming Language
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 modellerin perfomansı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.
Regresyon Problemlerinde Hata Metrikleri
Regresyon modellerinin performansını değerlendirmede literatürde aşağıdaki hata metriklerinden yaygın bir şekilde yararlanılmaktadır. Regresyon metrikleri eştiliklerinin verilmesi yerine sade bir anlatımla neyi ifade ettiği anlatılacaktır. Böylece formüllere boğulmamış olacaksınız.
SSE (Sum of Square Error): Tahmin edilen değerler ile gözlem değerleri arasındaki farkların kareleri toplamını ifade eder.
MSE (Mean Square Error): Ortalama kare hatası olarak adlandırılan bu hata tahmin edilen değerler ile gözlem değerleri arasındaki farkların karelerinin ortalamasını ifade eder.
RMSE (Root Mean Square Error): Kök ortalama kare hatası olarak adlandırılan bu hata ortalama kare hatasının karekökünü ifade etmektedir.
MAE (Mean Absolute Error): Ortalama mutlak hata olarak adlandırılan bu hata türü ise tahmin edilen değerler ile gözlem değerleri arasındaki farkların mutlak değerlerinin ortalamasını ifade etmektedir.
MAPE (Mean Absolute Percentage Error): Ortalama mutlak yüzdesel hata olarak adlandırılan bu hata türünde ilk olarak tahmin edilen değerler ile gözlem değerleri arasındaki farkların mutlak değerleri hesaplanır. Daha sonra hesaplanan farkları mutlak değerleri mutlak değerleri alınan gözlem değerlerine bölünür. En son durumda ise elde edilen bu değerlerin ortalaması alınır.
Bias: Tahmin edilen değerler ile gözlem değerleri arasındaki farkların ortalamasıdır. Bu yönüyle ortalama mutlak hata (MAE)’ya benzemektedir.
Regresyon hata metriklerini anlattıktan sonra daha kalıcı olması ve öğrenilmesi adına hazırladığım excel üzerinde bahsedilen bu metriklerin nasıl hesaplandığı gösterilmiştir. Excel dosyasını aşağıdaki linkten indirebilirsiniz.
Regresyon Metrikleri İndir
Çalışma kapsamında torbalama algoritmasıyla regresyon problemi çözülecektir. Bu amaçla ABD’nin Boston bölgesi konut fiyatları veri seti kullanılarak bağımlı değişken olan konutların medyan fiyatları tahmin edilecektir.
Metodoloji ve Uygulama Sonuçları
Bu bölümde torbalama algoritması kullanılarak ABD’nin Boston bölgesinde konutların medyan fiyatları (hedef değişken) tahmin edilmiştir. Diğer bir ifadeyle, bu çalışmada regresyon problemi çözmüş olacağız. Analizde kullanılan veri seti ABD Nüfus Bürosu tarafından Boston bölgesindeki konutlarla ilgili olarak toplanan verilerden oluşmaktadır. Veri setindeki toplam gözlem sayısı 506, değişken sayısı ise 14’tür. Bu veri setine R programlama yazılımında “mlbench” paketi içerisinde “BostonHousing” olarak yer verilmiştir. R programlama dili kullanılarak torbalama (bagging) algoritmasıyla analiz edilmiştir. Veri setinde yer alan değişkenler ve değişkenlerin veri tipleri şöyledir:
crim: per capita crime rate by town. Veri tipi nicel ve süreklidir.
zn: proportion of residential land zoned for lots over 25,000 sq.ft. Veri tipi nicel ve kesiklidir.
indus: proportion of non-retail business acres per town. Veri tipi nicel ve süreklidir.
chas: Charles River dummy variable (1 if tract bounds river; 0 otherwise). Veri tipi nitel ve nominal kategoriktir.
nox: nitric oxides concentration (parts per 10 million): Veri tipi nicel ve süreklidir.
rm: average number of rooms per dwelling. Veri tipi nicel ve süreklidir.
age: proportion of owner-occupied units built prior to 1940. Veri tipi nicel ve süreklidir.
dis: weighted distances to five Boston employment centres. Veri tipi nicel ve kesiklidir.
rad: index of accessibility to radial highways. Veri tipi nicel ve süreklidir.
tax: full-value property-tax rate per $10,000. Veri tipi nicel ve kesiklidir.
ptratio: pupil-teacher ratio by town. Veri tipi nicel ve süreklidir.
b: 1000(Bk – 0.63)^2 where Bk is the proportion of blacks by town. Veri tipi nicel ve süreklidir.
lstat: % lower status of the population. Veri tipi nicel ve süreklidir.
medv: Median value of owner-occupied homes in $1000’s. Veri tipi nicel ve süreklidir.
Bu kapsamda cevap değişkeni (bağımlı değişken) olan “medv” yani konut fiyatlarının medyan değeri geri kalan 13 bağımsız değişken kullanılarak torbalama algoritmasıyla tahmin edilecektir. Analizde kullanılan veri setini aşağıdaki linkten indirebilirsiniz.
Boston Konut Fiyatları Veri Setiİndir
Şimdi veri setini tanıdıktan sonra adım adım (step by step) analize başlayabiliriz. Analizde R programlama dili kullanarak analiz adımları R kod bloklarında verilmiştir.
Yüklenecek R kütüphaneleri

rm(list=ls())

kütüphaneler = c("dplyr","tibble","tidyr","ggplot2","formattable","readr","readxl","xlsx", "pastecs","fpc", "DescTools","e1071", "DMwR", "metrics","caret", "mlbench", "viridis","GGally","ggpurr","psych","writexl","ggfortify","explore", "rattle","yardstick","MASS", "ipred", "performanceEstimation")
 
sapply(kütüphaneler, require, character.only = TRUE)
Ver setinin okunması

data(BostonHousing)
veri<-BostonHousing
Ver setinin xlsx dosyasına yazdırılması

write_xlsx(veri, "Bostonkonutfiyatları.xlsx")#xlsx dosyası için
Yukarıdaki R kod bloğunun çalıştırılmasından sonra veri seti xlsx uzantılı dosyaya yazdırılmıştır. Elde edilen veri seti dosyası xlsx uzantılı olarak aşağıdan indirilebilir.
Boston Konut Fiyatları Veri Setiİndir
Veri setinin görselleştirilmesi ve tanımlayıcı istatistikler

#veri setindeki ilk 3 değişkenin görselleştirilmesi
veri[,1:3] %>% explore_all()
#veri setindeki 4,5,6 ve 7. değişkenlerin görselleştirilmesi
veri[,4:7] %>% explore_all()
#veri setindeki 8,9 ve 10. değişkenlerin görselleştirilmesi
veri[,8:10] %>% explore_all()
#veri setindeki 11,12,13 ve 14. değişkenlerin görselleştirilmesi
veri[,11:14] %>% explore_all()

#veri setindeki ilk 10 gözlem
formattable(head(veri,10))

#Pearson korelasyon matrisi 
cor.plot(veri[,-4], main="Korelasyon Matrisi")
Yukarıdaki R kod bloğunun çalıştırılmasından sonra veri setindeki ilk 3 değişkenin grafiği aşağıda verilmiştir. Grafikte görüleceği üzere eksik gözlem (missing data: NA) bulunmamaktadır.
Yukarıdaki R kod bloğunun çalıştırılmasından sonra veri setindeki 4,5,6 ve 7. değişkenlerin grafiği aşağıda verilmiştir. Grafikte görüleceği üzere eksik gözlem (missing data: NA) bulunmamaktadır.
Yukarıdaki R kod bloğunun çalıştırılmasından sonra veri setindeki 8,9 ve 10. değişkenlerin grafiği aşağıda verilmiştir. Grafikte görüleceği üzere eksik gözlem (missing data: NA) bulunmamaktadır.
Yukarıdaki R kod bloğunun çalıştırılmasından sonra veri setindeki 11, 12, 13 ve 14. değişkenlerin grafiği aşağıda verilmiştir. Grafikte görüleceği üzere eksik gözlem (missing data: NA) bulunmamaktadır.
Yukarıdaki R kod bloğunun çalıştırılmasından sonra Boston Konut Fiyatları veri setindeki ilk 10 gözlem aşağıdaki tabloda verilmiştir.
Yukarıdaki R kod bloğunun çalıştırılmasından sonra nicel ve kesikli değişkenlere ait Pearson korelasyon matrisi aşağıdaki şekilde verilmiştir. Değişken çiftleri nicel (sürekli ve kesikli) olduğu için Pearson korelasyon katsayılarını hesapladık.
Veri setinin eğitilecek veri setine ve test veri setine ayrılması
Bu kısımda aşağıdaki R kod bloğunda 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: Eğer çok yüksek gözlem sayıları ile çalışıyorsanız bilgisayar işlemcisine bağlı olarak bu işlemin ç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(1461)
orneklem<- sample(1:NROW(veri), NROW(veri)*0.7)
train <- veri[orneklem, ]  
test <- veri[-orneklem, ]
Torpalama (Bagging) modelinin kurulması

model<-bagging(medv ~ ., data=train, coob=TRUE, nbagg=500)
print(model)
Yukarıdaki R kod bloğunun çalıştırılmasından sonra elde kurulan modele ait özet çıktı aşağıda verilmiştir.

Bagging regression trees with 500 bootstrap replications 

Call: bagging.data.frame(formula = medv ~ ., data = train, coob = TRUE, 
    nbagg = 500)

Out-of-bag estimate of root mean squared error:  4.3542 
Tahmin edilen değerler ile test veri setindeki gözlem değerlerinin karşılaştırılması

model <- bagging(medv ~ ., data=train, coob=TRUE, nbagg=500)
tahmin<-predict(model, test)
karsilastirma<-tibble(Gozlem=test$medv, Tahmin=round(tahmin,1))
#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("Sıra"=seq(1,10),ilk10, son10))

#karşılaştırmalı sonuçların xlsx dosyasına yazdırılması
write_xlsx(karsilastirma, "karsılastirma_sonuçları.xlsx")
Yukarıdaki R kod bloğunun çalıştırılmasından sonra torbalama (bagging) modelinden elde edilen ilk ve son 10 tahmin değerleri gözlem değerleri ile birlikte aşağıdaki tabloda karşılaştırmalı olarak verilmiştir.
Yukarıdaki R kod bloğunun çalıştırılmasından sonra torbalama (bagging) modelinden elde edilen konut fiyatları tahmin değerleri ile test veri setindeki gözlem değerleri aşağıda xlsx dosyasına yazdırılmıştır. Buradan dosyayı indirerek sonuçları karşılaştırmalı olarak görebilirsiniz.
Karşılaştırmalı Sonuçlarİndir
Tahmin edilen değerler ile test veri setindeki gözlem değerlerinin grafik üzerinde karşılaştırılması

ggplot(karsilastirma, aes(Gozlem, Tahmin)) +
  geom_point() +
  geom_abline(intercept = 0, slope = 1, size=1.5, color="red")+
  ggtitle("Gözlem Değerleri ve Tahmin Edilen Bagging Regresyon Değerleri")+
  theme_minimal()

#alternatif grafik
ggplot(karsilastirma, aes(Gozlem, Tahmin)) +
  geom_point() +
  geom_abline(intercept = 0, slope = 1, color="red", size=1.5)+
  ggtitle("Gözlem Değerleri ve Tahmin Edilen Bagging Regresyon Değerleri")+
  theme_gray()
Yukarıdaki R kod bloğunun çalıştırılmasından sonra torbalama (bagging) modelinden elde edilen konut fiyatları tahmin değerleri ile test veri setindeki gözlem değerleri aşağıda şekil üzerinde verilmiştir.
Yukarıdaki R kod bloğunun çalıştırılmasından sonra torbalama (bagging) modelinden elde edilen konut fiyatları tahmin değerleri ile test veri setindeki gözlem değerleri aşağıda alternatif olarak şekil üzerinde verilmiştir.
Tahmin edilen değerler ile test veri setindeki gözlem değerlerinin regresyon hata metrikleri açısından değerlendirilmesi
Kurulan modele ait regresyon hata metriklerinin elde edilmesine yönelik yazılan R kod bloğu aşağıda verilmiştir.

mse<-MSE(karsilastirma$Gozlem, karsilastirma$Tahmin)
mape<-MAPE(karsilastirma$Gozlem, karsilastirma$Tahmin)
rmse<-RMSE(karsilastirma$Gozlem, karsilastirma$Tahmin)
sse<-sse(karsilastirma$Gozlem, karsilastirma$Tahmin)
mae<-mae(karsilastirma$Gozlem, karsilastirma$Tahmin)

formattable(round(tibble(SSE=sse, MSE=mse, RMSE=rmse, MAE=mae, MAPE=mape),2))
Yukarıdaki R kod bloğunun çalıştırılmasından sonra elde edilen regresyon hata metrikleri bir bütün olarak aşağıda verilmiştir. Torbalama (bagging) algoritmasıyla kurulan model test veri seti ile karşılaştırıldığında konut fiyatlarını yaklaşık % 2,7 ortalama mutlak hata (MAE) ve yaklaşık % 3,5 kök ortalama kare hatası (RMSE) ile tahmin ettiği görülmektedir.
Performans Testleri
Bu bölümde kurulan model iki yöntemle tüm veri seti üzerinde test edilmiştir. Kullanılan performans test yöntemleri sırasıyla şöyledir:
Çapraz performans testi (Cross validation test)
Hold out yöntemi
Çapraz performans testi (Cross validation test)
Burada modelin performansı çapraz performans testi yapılarak tüm veri seti üzerinde test edilir ve hata oranı verilir. Bu işleme ilişkin yazılan R kod bloğu aşağıda verilmiştir.

errorest(medv ~ ., data=veri, model=lm, est.para=control.errorest(random=FALSE))
Yukarıdaki R kod bloğunun çalıştırılmasından sonra model tüm veri seti üzerinde test edilmiş ve performans metriği aşağıda verilmiştir.Torbalama (bagging) algoritmasıyla kurulan model tüm veri seti ile karşılaştırıldığında konut fiyatlarını yaklaşık % 5,88 kök ortalama kare hatası (RMSE) ile tahmin ettiği görülmektedir.

Call:
errorest.data.frame(formula = medv ~ ., data = veri, model = lm, 
    est.para = control.errorest(random = FALSE))

	 10-fold cross-validation estimator of root mean squared error

Root mean squared error:  5.877
Hold out yöntemi
Burada modelin performansı Holdout yöntemi ile testi yapılarak tüm veri seti üzerinde test edilir ve hata oranları verilir. Bu işleme ilişkin yazılan R kod bloğu aşağıda verilmiştir.

set.seed(61)
bs<- performanceEstimation(
  PredTask(medv ~ ., veri),
    workflowVariants(learner="bagging", learner.pars=list(coob=TRUE, nbagg=500)),
 EstimationTask(metrics = c("mse","rmse", "mae"),
                method = Holdout(nReps=3,hldSz=0.3)))
summary(bs)
plot(bs)
Yukarıdaki R kod bloğunun çalıştırılmasından sonra model tüm veri seti üzerinde test edilmiş ve performans hata metrikleri aşağıda verilmiştir. Bulgular, torbalama algoritmasının tüm veri seti üzerinde test edildiğinde konut fiyatlarını yaklaşık % 2,7 ortalama mutlak hata (MAE) ve yaklaşık % 4,1 kök ortalama kare hatası (RMSE) ile tahmin ettiğini göstermektedir.



##### PERFORMANCE ESTIMATION USING  HOLD OUT  #####

** PREDICTIVE TASK :: veri.medv

++ MODEL/WORKFLOW :: bagging 
Task for estimating  mse,rmse,mae  using
 3 x 70 % / 30 % Holdout
	 Run with seed =  1234 
Iteration :  1  2  3

== Summary of a  Hold Out Performance Estimation Experiment ==

Task for estimating  mse,rmse,mae  using
 3 x 70 % / 30 % Holdout
	 Run with seed =  1234 

* Predictive Tasks ::  veri.medv
* Workflows  ::  bagging 

-> Task:  veri.medv
  *Workflow: bagging 
              mse      rmse       mae
avg     16.855399 4.0947040 2.6861979
std      3.011187 0.3649621 0.2642337
med     16.443337 4.0550385 2.5892506
iqr      2.989967 0.3633419 0.2505401
min     14.071462 3.7511948 2.4841314
max     20.051396 4.4778786 2.9852116
invalid  0.000000 0.0000000 0.0000000
Yukarıdaki R kod bloğunun çalıştırılmasından sonra model tüm veri seti üzerinde test edilmiş ve performans hata metrikleri aşağıda şekil üzerinde gösterilmiştir.
Sonuç
Bu çalışmada regresyon (regression) probleminin çözümüne yönelik topluluk öğrenme algoritmalarından biri olan torbalama (bagging) algoritması kullanılarak ayrıntılı deneysel bir çalışma yapılmıştır. Ortaya konulan bulgular, regresyon probleminin torbalama (bagging) algoritması ile çok başarılı bir şekilde, diğer bir ifadeyle düşük hata oranlarıyla çözüme kavuşturulduğunu göstermektedir.
Torbalama algoritması test verisi üzerinde test edildiğinde konut fiyatlarını yaklaşık % 2,7 ortalama mutlak hata (MAE) ve yaklaşık % 3,5 kök ortalama kare hatası (RMSE) ile tahmin ettiği görülmektedir. Diğer taraftan kurulan model tüm veri seti üzerinde çapraz performans testi ile test edildiğinde ise konut fiyatlarını yaklaşık % 5,88 kök ortalama kare hatası (RMSE) ile tahmin ediyor iken, kurulan model tüm veri seti üzerinde Hold out yöntemi ile test edildiğinde ise konut fiyatlarını yaklaşık yaklaşık % 2,7 ortalama mutlak hata (MAE) ve yaklaşık % 4,1 kök ortalama kare hatası (RMSE) ile tahmin ettiği görülmektedir.
Yapılan bu çalışmanın özellikle veri bilimi (data science) ile ilgilenen akademi ve saha çalışanlarına önemli bir katkı sunacağı 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.cs.toronto.edu/~delve/data/boston/bostonDetail.html
http://lib.stat.cmu.edu/datasets/boston
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://www.stat.berkeley.edu/~breiman/Using_random_forests_V3.1.pdf
https://www.stat.berkeley.edu/~breiman/RandomForests/
https://stats.idre.ucla.edu/r/library/r-library-introduction-to-bootstrapping/
https://stanford.edu/~shervine/l/tr/teaching/cs-229/cheatsheet-machine-learning-tips-and-tricks
http://uzalcbs.org/wp-content/uploads/2016/11/2012_082.pdf
http://www.ub.edu/stat/docencia/EADB/bagging.html
https://people.cs.pitt.edu/~milos/courses/cs2750-Spring04/lectures/class23.pdf
https://www.google.com/search?q=underfitting+and+overfitting&source=lnms&tbm=isch&sa=X&ved=2ahUKEwiI1onvyNvpAhVSQMAKHfYyC28Q_AUoAXoECBAQAw&biw=1366&bih=604#imgrc=m5WcPcAqdpCwEM
Webb G.I. (2011) Overfitting. In: Sammut C., Webb G.I. (eds) Encyclopedia of Machine Learning. Springer, Boston, MA
https://www.memorial.com.tr/saglik-rehberleri/biyopsi-nedir-ve-nasil-yapilir/
https://archive.ics.uci.edu/ml/datasets/Breast+Cancer+Wisconsin+(Diagnostic)
Andriyas, S. and McKee, M. (2013). Recursive partitioning techniques for modeling irrigation behavior. Environmental Modelling & Software, 47, 207–217.
Chan, J. C. W. and Paelinckx, D. (2008). Evaluation of Random Forest and Adaboost tree-based ensemble classification and spectral band selection for ecotope mapping using airborne hyperspectral imagery. Remote Sensing of Environment, 112(6), 2999–3011.
Chrzanowska, M., Alfaro, E., and Witkowska, D. (2009). The individual borrowers recognition:Single and ensemble trees. Expert Systems with Applications, 36(2), 6409–6414.
De Bock, K. W., Coussement, K., and Van den Poel, D. (2010). Ensemble classification based on generalized additive models. Computational Statistics & Data Analysis, 54(6), 1535–1546.
De Bock, K. W. and Van den Poel, D. (2011). An empirical evaluation of rotation-based ensemble classifiers for customer churn prediction. Expert Systems with Applications, 38(10), 12293–12301.
Fan, Y., Murphy, T.B., William, R. and Watson G. (2009). digeR: GUI tool for analyzing 2D DIGE data. R package version 1.2.
Garcia-Perez-de-Lema, D., Alfaro-Cortes, E., Manzaneque-Lizano, M. and Banegas-Ochovo, R. (2012). Strategy, competitive factors and performance in small and medium enterprise (SMEs).
African Journal of Business Management, 6(26), 7714–7726.
Gonzalez-Rufino, E., Carrion, P., Cernadas, E., Fernandez-Delgado, M. and Dominguez-Petit, R.(2013). Exhaustive comparison of colour texture features and classification methods to discriminate cells categories in histological images of fish ovary. Pattern Recognition, 46, 2391–2407.
Krempl, G. and Hofer, V. (2008). Partitioner trees: combining boosting and arbitrating. In: Okun, O., Valentini, G. (eds.) Proc. 2nd Workshop Supervised and Unsupervised Ensemble Methods and Their Applications, Patras, Greece, 61–66.
Torgo, Luis, Data Mining With R. Second Edition.
Bunu paylaş:
Facebook
Twitter
Reddit
Telegram
E-posta
Yazdır
Daha fazla
LinkedIn
Tumblr
Pinterest
Pocket
WhatsApp
Skype
Bunu beğen:
Beğen Yükleniyor...
Tevfik BULUT	Genel	Yorum bırakın 20 Haziran 2020 19 Minutes	
Topluluk Öğrenme Algoritmalarından Torbalama Algoritması İle Gögüs Kanserinin Tahmini Üzerine Bir Vaka Çalışması: A Case Study on the Prediction of Breast Cancer Using Bagging Algorithm from Ensemble Learning Algorithms
Giriş
Topluluk (ensemble) öğrenme algoritmaları tahmine dayalı analitik çalışmalarda en başarılı yaklaşımlardan biridir. Bu algoritmalar somut bir problemi çözmek için bir araya gelen modeller setinden oluşmaktadır. Amaç modeller setinin ürettiği tahminleri birleştirerek doğruluğu (accuracy) artırmaktır. Topluluk algoritmaları kendi içerisinde üç grupta ele alınır.
Torbalama (Bagging: Bootsrap Aggregating)
Artırma (Boosting)
İstif (Stacking)
Topluluk (ensemble) öğrenme algoritmalarından biri olan torpalama, ingilizce ifadeyle Bagging, Breiman tarafından 1994 yılında geliştirilen hem sınıflandırma hem de regresyon problemlerinin çözümünde kullanılan makine öğrenmesine dayanan topluluk algoritmasıdır. Torbalama algoritmasının işleyiş süreci Şekil 1’de verilmiştir.
Şekil 1: Torbalama (Bagging) Algoritmasının İşleyiş Süreci
Şekil 1’de belirtilen torbalama algoritmasının işleyiç sürecini adım adım şöyle özetleyebiliriz.
Popülasyon (N) birimlerini eğitilecek (training) veri setine ve test edilecek (testing) veri setine basit tekrarsız tesadüfi örnekleme (simple random sampling without replacement) yöntemiyle ayrılır. Burada literatürde genellikle eğitilecek veri seti seti için popülasyonun % 70’i alınsa da bu oran veri setinin ya da popülasyonun büyüklüğüne göre değişkenlik gösterebilmektedir. Bu oran 70:30 olabileceği gibi, 60:40 veya 80:20 oranı şeklinde de olabilir.
Eğitilecek veri setini belirledikten sonra basit tekrarlı tesadüfi örnekleme yoluyla torbalara (1’den n’e kadar) örneklem birimleri (sample units) atanır.
Örneklem birimleri kurulan modellerde eğitilir.
Regresyon problemini çözüyorsak kurulan modellerden elde edilen sonuçların ortalaması alınarak bağımlı değişken (y) belirlenir. Sınıflandırma problemi çözüyorsak kurulan modellerden elde edilen çoğunluk oylama sonuçlarına göre karar verip y’yi, diğer bir ifadeyle bağımlı değişkeni (dependent variable) tahmin etmiş oluruz.
Modeller oluşturulurken temel amaç, bias ve varyans dengesinin kurulmasıdır. Bu uyumu sağlarsak iyi model uyumu (good-fit) elde etmiş oluruz. Makine öğrenme ve derin öğrenme problemlerinin çözümünde modelleme hatalarına bağlı olarak varyans ve bias değişiklik göstermektedir. Bu iki durum şöyle ele alınabilir:
Eksik model uyumu (under-fitting): Kurulan modelde elde edilen tahmin değerleri gözlem verisine yeterince uyum göstermediğinde ortaya çıkar. Bu durumda varyans düşükken bias yüksektir. Buradan şunu anlamak gerekir: gözlem verisi ile tahmin edilen veri arasındaki fark büyükse, diğer bir deyişle kurulan modelle bağımlı değişken iyi tahmin edilemiyorsa bu durumda under-fitting oluşur. Under-fitting sonraki kısımlarında anlatılan sınıflandırma ve regresyon hata metrikleri ile kolaylıkla ortaya konulabilir.
Aşrı model uyumu (over-fitting): Kurulan modelde eğitilen veri seti (training data set)’yle gözlem verisine aşırı uyum gösterdiğinde ortaya çıkar. Bu durumda varyans yüksekken bias düşüktür.
Bahsedilen bu iki durumu kafamızda daha da canlı tutmak için bias ve varyans ilişkisi Şekil 2’de verilmiştir. Şekil’de biz modeli kurgularken olması gereken durumu gösteren Düşük Varyans-Düşük Bias uyumunu hedefliyoruz. Diğer bir ifadeyle, kurguladığımız model (Şekil 2 1 nolu model) ile gözlem değerlerini olabildiğince en yüksek doğruluk oranı ile tahmin ederken aynı zamanda varyansı düşük tutmayı hedefliyoruz. Buna başardığımızda aslında iyi model uyumunu (good-fit) sağlamış ve iyi bir model kurmuş oluyoruz. Eksik model uyumu (under-fitting)’nda ise Şekil 2’de 3 nolu modelde görüleceği üzere elde edilen tahmin değerleri gözlem değerleri (kırmızı alan)’nden uzaklaşmakla birlikte hala tahmin değerleri ile gözlem değerleri arasında farklar, diğer bir deyişle varyans düşüktür. Aşırı model uyumu (over-fitting)’da ise Şekil 2’de 2 nolu modelde görüleceği üzere varyan yüksek iken bias düşüktür. 2 nolu modelde doğru değerler (gözlem değerleri)’i kurulan modelde yüksek doğrulukla (düşük bias) tahmin edilse de gözlem değerleri ile tahmin değerleri arasındaki varyans yüksektir.
Şekil 2: Bias-Varyans İlişkisi
Veri Tipleri
Torbalama yöntemi ile sınıflandırma problemi çözüyorsak bağımlı değişkenin ya da cevap değişkeninin veri tipi nitel ve kategoriktir. Ancak, bu yöntem ile regresyon problemini çözüyorsak bağımlı değişkenin ya da cevap değişkeninin veri tipi niceldir. Veri tipleri kendi içerisinde 4 farklı alt sınıfta ele alınabilir. Bu veri tipleri alt sınıflarıyla birlikte Şekil 3’te verilmiştir.
Şekil 3: Veri Tipleri
Nicel Veri (Quantitative Data)
Şekil 3’te sunulan nicel veri tipi ölçülebilen veri tipi olup, kendi içerisinde temel olarak ikiye ayrılmaktadır. Bu veri tipine alt sınıflandırmalar dikkate alınarak sırasıyla örnek verelim.
Sürekli veri (Continous data): Tam sayı ile ifade edilmeyen veri tipi olup, zaman, sıcaklık, beden kitle endeksi, boy ve ağırlık ölçümleri bu veri tipine örnek verilebilir.
Kesikli veri (Discrete Data): Tam sayı ile ifade edilebilen veri tipi olup, bu veri tipine proje sayısı, popülasyon sayısı, öğrenci sayısı örnek verilebilir.
Nitel Veri (Qualitative Data)
Şekil 3’te verilen nitel veri tipi ölçülemeyen ve kategori belirten veri tipi olup, kendi içerisinde temel olarak ikiye ayrılmaktadır. Bu veri tipine alt sınıflandırmalar şöyledir:
Nominal veri: İki veya daha fazla cevap kategorisi olan ve sıra düzen içermeyen veri tipi olup, bu veri tipine medeni durum (evli, bekar) ve sosyal güvenlik türü (Bağkur, SSK, Yeşil Kart, Özel Sigorta) örnek gösterilebilir.
Ordinal veri: İki veya daha fazla kategorisi olan ancak sıra düzen belirten veri türüdür. Bu veri tipine örnek olarak eğitim düzeyleri (İlkokul, ortaokul, lise, üniversite ve yüksek lisans), yarışma dereceleri (1. , 2. ve 3.) ve illerin gelişmişlik düzeyleri (1. Bölge, 2. Bölge, 3. Bölge, 4. Bölge, 5. Bölge ve 6. Bölge) verilebilir.
Veri tiplerinden bahsedildikten sonra bu veri tiplerinin cevap değişkeni (bağımlı değişken) olduğu durumlarda seçilecek analiz yöntemini ele alalım. Temel olarak cevap değişkeni ölçülebilir numerik değişken ise regresyon, değilse sınıflandırma analizi yapıyoruz. Cevap değişkeni, diğer bir deyişle bağımlı değişken numerik ise bağımsız değişken veya değişkenlerin çıktı (output) / bağımlı değişken (dependent variable) / hedef değişken (target variable) veya değişkenlerin üzerindeki etkisini tahmin etmeye çalışıyoruz. Buradaki temel felsefeyi anlamak son derece önemlidir. Çünkü bu durum sizin belirleyeceğiniz analiz yöntemini de değiştirecektir.
Kullanılan analiz yöntemi ile kurulan modelde ya sınıflandırma problemini ya da regresyon problemini çözdüğümüzü ifade etmiştik. Ancak kurulan modellerde çözülen problemin sınıflandırma ya da regresyon oluşuna göre performans değerlendirmesi farklılaşmaktadır. Sınıflandırma problemlerinde kullanılan hata metrikleri ile regresyon hata metrikleri aynı değildir. Bu bağlamda ilk olarak sınıflandırma problemlerinin çözümünde kullanılan hata metriklerini ele alalım.
Sınıflandırma Problemlerinde Hata Metrikleri
Karışıklık matrisi (confusion matrix) olarak 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. Tablo 1’de hata metriklerinin hesaplanmasına esas teşkil eden karışıklık matrisi (confisioun matrix) 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.
Tablo 1: Karışıklık Matrisi (Confusion Matrix)
Kaynak: Stanford Üniversitesi
Tablo 1’de TP: Doğru Pozitifleri, FN: Yanlış Negatifleri, FP: Yanlış Pozitifleri ve TN: Doğru Negatifleri göstermektedir.
Şekil 3’te de yer verildiği üzere literatürde sınıflandırma modellerinin performansını değerlendirmede aşağıdaki hata metriklerinden yaygın bir şekilde yararlanıldığı görülmektedir. Sınıflandırma problemlerinin çözümüne yönelik Rastgele Orman Algoritması (RF) kullanarak R’da yapmış olduğum çalışmanın linkini ilgilenenler için aşağıda veriyorum.
R Programlama Diliyle Sınıflandırma Problemlerinin Çözümünde Rastgele Orman Algoritması Üzerine Bir Vaka Çalışması: A Case Study on Random Forest (RF) Algorithm in Solving Classification Problems with R Programming Language
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 modellerin perfomansı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.
Regresyon Problemlerinde Hata Metrikleri
Regresyon modellerinin performansını değerlendirmede literatürde aşağıdaki hata metriklerinden yaygın bir şekilde yararlanılmaktadır. Regresyon metrikleri eştiliklerinin verilmesi yerine sade bir anlatımla neyi ifade ettiği anlatılacaktır. Böylece formüllere boğulmamış olacaksınız.
SSE (Sum of Square Error): Tahmin edilen değerler ile gözlem değerleri arasındaki farkların kareleri toplamını ifade eder.
MSE (Mean Square Error): Ortalama kare hatası olarak adlandırılan bu hata tahmin edilen değerler ile gözlem değerleri arasındaki farkların karelerinin ortalamasını ifade eder.
RMSE (Root Mean Square Error): Kök ortalama kare hatası olarak adlandırılan bu hata ortalama kare hatasının karekökünü ifade etmektedir.
MAE (Mean Absolute Error): Ortalama mutlak hata olarak adlandırılan bu hata türü ise tahmin edilen değerler ile gözlem değerleri arasındaki farkların mutlak değerlerinin ortalamasını ifade etmektedir.
MAPE (Mean Absolute Percentage Error): Ortalama mutlak yüzdesel hata olarak adlandırılan bu hata türünde ilk olarak tahmin edilen değerler ile gözlem değerleri arasındaki farkların mutlak değerleri hesaplanır. Daha sonra hesaplanan farkları mutlak değerleri mutlak değerleri alınan gözlem değerlerine bölünür. En son durumda ise elde edilen bu değerlerin ortalaması alınır.
Bias: Tahmin edilen değerler ile gözlem değerleri arasındaki farkların ortalamasıdır. Bu yönüyle ortalama mutlak hata (MAE)’ya benzemektedir.
Regresyon hata metriklerini anlattıktan sonra daha kalıcı olması ve öğrenilmesi adına hazırladığım excel üzerinde bahsedilen bu metriklerin nasıl hesaplandığı gösterilmiştir. Excel dosyasını aşağıdaki linkten indirebilirsiniz.
Regresyon Metrikleri İndir
Çalışma kapsamında torpalama algoritmasıyla sınıflandırma problemi çözülecektir. Bu amaçla Wisconsin Üniversitesi Hastanesinden alınan Meme Kanseri veri seti kullanılarak bağımlı değişken olan meme kanserinin tipi tahmin edilecektir.
Metodoloji ve Uygulama Sonuçları
Bu bölümde torpalama algoritması kullanılarak meme kanserinin türü (iyi huylu: benign, kötü huylu: malign) tahmin edilmiştir. Diğer bir ifadeyle, bu çalışmada sınıflandırma problemi çözmüş olacağız. Analizde kullanılan veri seti Wisconsin Üniversitesi Hastanelerinde 15 Temmuz 1992 tarihine kadar tedavi görmüş hastalardan alınan meme biyopsi verilerini içermektedir. Biyopsi’den bahsetmişken ne anlama geldiğini de açıklayalım. Biyopsi, vücudun farklı bölgelerinden mikroskop yardımıyla inceleme ve farklı tetkikler yaparak hastalık şüphesi bulunan bölgeden tanı amaçlı hücre ya da doku alma işlemidir. Veri setinde 15 Temmuz 1992’ye kadar 699 hastaya ait meme tümör biyopsi gözlemleri bulunmaktadır. Veri setindeki toplam gözlem sayısı 699, değişken sayısı ise 10 (ID numarası hariç)’dur. Bu veri setine R programlama yazılımında “MASS” paketi içerisinde “biopsy” olarak yer verilmiştir. Ancak veri setinde değişkenlerin adları tam olarak yazılmadığı için R programlama dilinde revize edilmiş ve R programlama dili kullanılarak torpalama (bagging) algoritmasıyla analiz edilmiştir.
Cl.thickness: Kitlenin kalınlığını (clump thickness) göstermektedir. Cevap değişkenleri 1’den 10’a kadar bir ölçekte puanlanmıştır. Veri tipi nicel ve kesiklidir.
Cell.size: Hücre büyüklüğünün homojenliğini (uniformity of cell size) göstermektedir.Cevap değişkenleri 1’den 10’a kadar bir ölçekte puanlanmıştır. Veri tipi nicel ve kesiklidir.
Cell.shape: Hücre şeklinin bütünlüğünü (uniformity of cell shape) göstermektedir. Cevap değişkenleri 1’den 10’a kadar bir ölçekte puanlanmıştır. Veri tipi nicel ve kesiklidir.
Marg.adhesion: Marjinal yapışmayı göstermektedir. Cevap değişkenleri 1’den 10’a kadar bir ölçekte puanlanmıştır. Veri tipi nicel ve kesiklidir.
Epith.c.size Epitel hücre büyüklüğünü (single epithelial cell size) göstermektedir.Cevap değişkenleri 1’den 10’a kadar bir ölçekte puanlanmıştır. Veri tipi nicel ve kesiklidir.
Bare.nuclei: Sitoplazma (hücrenin geri kalanı) ile çevrili olmayan çekirdekler için kullanılan bir terimdir. Bunlar tipik olarak iyi huylu tümörlerde görülür.Cevap değişkenleri 1’den 10’a kadar bir ölçekte puanlanmıştır. Veri tipi nicel ve kesiklidir.
Bl.cromatin: Benign (iyi huylu) hücrelerde görülen çekirdeğin muntazam bir “dokusunu” açıklar (bland chromatin). Kanser hücrelerinde kromatin daha kaba olma eğilimindedir.Cevap değişkenleri 1’den 10’a kadar bir ölçekte puanlanmıştır. Veri tipi nicel ve kesiklidir.
Normal.nucleoli: Nükleoller, çekirdekte görülen küçük yapılardır. Kanser hücrelerinde nükleoller daha belirgin hale gelir.Cevap değişkenleri 1’den 10’a kadar bir ölçekte puanlanmıştır. Veri tipi nicel ve kesiklidir.
Mitoses: Mitotik aktivite, hücrelerin ne kadar hızlı bölündüğünün bir ölçüsüdür. Yüksek mitotik aktivite tipik olarak malign tümörlerde görülür.Cevap değişkenleri 1’den 10’a kadar bir ölçekte puanlanmıştır. Veri tipi nicel ve kesiklidir.
Class: Meme kanserinin tipini (iyi huylu mu yoksa kötü huylu mu) göstermektedir. Değişken kategorileri “benign” ve “malignant“, diğer bir deyişle iyi ve kötü huyludur.Veri tipi nitel ve nominal kategoriktir.
Bu kapsamda cevap değişkeni (bağımlı değişken) olan “Class” yani meme kanserinin türü geri kalan 9 bağımsız değişken kullanılarak torpalama algoritmasıyla tahmin edilecektir.Analizde kullanılan veri setini aşağıdaki linkten indirebilirsiniz.
Göğüs Kanseri Veri Setiİndir
Şimdi veri setini tanıdıktan sonra adım adım (step by step) analize başlayabiliriz. Analizde R programlama dili kullanarak analiz adımları R kod bloklarında verilmiştir.
Yüklenecek R kütüphaneleri

rm(list=ls())

kütüphaneler = c("dplyr","tibble","tidyr","ggplot2","formattable","readr","readxl","xlsx", "pastecs","fpc", "DescTools","e1071", "DMwR","caret", "viridis","GGally","ggpurr","psych","writexl","ggfortify","explore","MASS", "adabag", "rpart")
 
sapply(kütüphaneler, require, character.only = TRUE)
Ver setinin okunması ve değişkenlerin adlandırılması

veri<-biopsy %>% rename(Cl.thickness=V1, Cell.size=V2, Cell.shape=V3, Marg.adhesion=V4,  Epith.c.size=V5, Bare.nuclei=V6, Bl.cromatin=V7, Normal.nucleoli=V8, Mitoses=V9, Class=class)
veri<-veri[,-1]
Ver setinin xlsx ve csv uzantılı dosyalara yazdırılması

write.csv(veri, "gögüskanseriveriseti.csv")#csv dosyası için
write_xlsx(veri, "gögüskanseriveriseti.xlsx")#xlsx dosyası için
Yukarıdaki R kod bloğunun çalıştırılmasından sonra veri seti xlsx ve csv uzantılı dosyalara yazdırılmıştır. Elde edilen veri seti dosyası sadece xlsx uzantılı olarak aşağıdan indirilebilir. Sitem csv dosya yüklemesini desteklemediği için csv uzantılı dosya aşağıda verilememiştir. Ancak yukarıdaki R kod bloğu çalıştırabilir ve csv uzatılı dosya rmd dosyasının bulunduğu klasör içine otomatik olarak kaydedilebilir.
Göğüs Kanseri Veri Seti (xlsx)İndir
Veri setinin görselleştirilmesi ve tanımlayıcı istatistikler

#veri setindeki ilk 3 değişkenin görselleştirilmesi
veri[,1:3] %>% explore_all()
#veri setindeki 4,5,6 ve 7. değişkenlerin görselleştirilmesi
veri[,4:7] %>% explore_all()
#veri setindeki 8,9 ve 10. değişkenlerin görselleştirilmesi
veri[,8:10] %>% explore_all()

#veri setindeki ilk 10 gözlem
formattable(head(veri,10))

#Eksik gözlemler çıkarıldıktan sonra Pearson korelasyon matrisi 
tamveri<-na.omit(veri)
cor.plot(tamveri[,-10], main="Korelasyon Matrisi")
Yukarıdaki R kod bloğunun çalıştırılmasından sonra veri setindeki ilk 3 değişkenin grafiği aşağıda verilmiştir. Grafikte görüleceği üzere eksik gözlem (missing data: NA) bulunmamaktadır.
Yukarıdaki R kod bloğunun çalıştırılmasından sonra veri setindeki 4,5,6 ve 7. değişkenlerin grafiği aşağıda verilmiştir. Grafikte görüleceği üzere sadece Bare.nuclei değişkende 16 eksik gözlem (missing data: NA) bulunmaktadır.
Yukarıdaki R kod bloğunun çalıştırılmasından sonra veri setindeki 8,9 ve 10. değişkenlerin grafiği aşağıda verilmiştir. Grafikte görüleceği üzere eksik gözlem (missing data: NA) bulunmamaktadır.
Yukarıdaki R kod bloğunun çalıştırılmasından sonra meme kanseri veri setindeki ilk 10 gözlem aşağıdaki tabloda verilmiştir.
Yukarıdaki R kod bloğunun çalıştırılmasından sonra meme kanseri veri setindeki eksik gözlemlerin olduğu 16 satır çıkarılmış, ardından nicel ve kesikli değişkenlere ait Pearson korelasyon matrisi aşağıdaki şekilde verilmiştir. Bağımlı değişken dışındaki değişken çiftleri nicel (sürekli ve kesikli) olduğu için Pearson korelasyon katsayısını hesapladık.
Bağımlı değişken olan tümörün tipi (Class)’ne görer değişkenler arasındaki ilişki

tamveri %>% ggplot(aes(x = Cl.thickness, y = Cell.size, color = Class))+
        geom_point(position = position_dodge(0.9)) +
        facet_grid( ~Class)

tamveri %>% ggplot(aes(x = Cell.shape, y = Marg.adhesion, color = Class))+
        geom_point(position = position_dodge(0.9)) +
        facet_grid( ~Class)

tamveri %>% ggplot(aes(x = Epith.c.size, y = Bare.nuclei, color = Class))+
        geom_point(position = position_dodge(0.9)) +
        facet_grid( ~Class)

tamveri %>% ggplot(aes(x = Bl.cromatin, y = Normal.nucleoli, color = Class))+
        geom_point(position = position_dodge(0.9)) +
        facet_wrap(Mitoses~Class )
Yukarıdaki R kod bloğunun çalıştırılmasından sonra ilk iki değişkenin tümörün tipine göre kendi aralarındaki ilişki aşağıdaki grafikte verilmiştir.
Yukarıdaki R kod bloğunun çalıştırılmasından sonra 3. ve 4. değişkenin tümörün tipine göre kendi aralarındaki ilişki aşağıdaki grafikte verilmiştir.
Yukarıdaki R kod bloğunun çalıştırılmasından sonra 5. ve 6. değişkenin tümörün tipine göre kendi aralarındaki ilişki aşağıdaki grafikte verilmiştir.
Yukarıdaki R kod bloğunun çalıştırılmasından sonra 7, 8 ve 9. değişkenlerin tümörün tipine göre kendi aralarındaki ilişki aşağıdaki grafikte verilmiştir.
Veri setinin eğitilecek veri setine ve test veri setine ayrılması
Bu kısımda aşağıdaki R kod bloğunda 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: Eğer çok yüksek gözlem sayıları ile çalışıyorsanız bilgisayar işlemcisine bağlı olarak bu işlemin ç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(1461)
orneklem<- sample(1:NROW(tamveri), NROW(tamveri)*0.7)
train <- tamveri[orneklem, ]  
test <- tamveri[-orneklem, ]
Torpalama (Bagging) modelinin kurulması

model <- bagging(Class ~., data=tamveri, mfinal=500)
Değişkenlerin önem düzeyleri

#önem düzeyi grafiği
importanceplot(model)
önem düzeyi değerleri tablosu
onem<-model$importance
degisken<-names(onem)
agirlik<-as_tibble(as.numeric(onem))
onemduzey<-tibble("Değişken"=degisken, "Önem Düzeyi"=round(agirlik$value,2))

formattable(onemduzey, 
            list(formatter(
              "span", style = ~ style(color = "grey",font.weight = "bold")),
`Önem Düzeyi` = color_bar("#FF6347")
))
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 grafikte verilmiştir.
Yukarıdaki kod bloğunun çalıştırılmasından sonra elde edilen modeldeki değişkenlerin önem düzeyleri değerleriyle birlikte aşağıdaki tabloda verilmiştir. Aşağıdaki tablo yukarıdaki grafiğe göre daha anlamlı olduğu söylenebilir.
Tahmin edilen değerler ile test veri setindeki gözlem değerlerinin karşılaştırılması

model <- bagging(Class ~., data=train, mfinal=500)
tahmin<-predict(model, test)
karsilastirma<-tibble(Gozlem=test$Class, Tahmin=tahmin$class)
#ilk ve son 10 tahmin değerini gerçek değerle 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("Sıra"=seq(1,10),ilk10, son10))
Yukarıdaki R kod bloğunun çalıştırılmasından sonra torbalama (bagging) modelinden elde edilen ilk ve son 10 tahmin sınıflandırma değerleri gözlem 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ı

cm<tahmin$confusion
plot(cm, type = "heatmap", main="Karışıklık Matrisi")
Yukarıdaki R kod bloğunun çalıştırılmasından sonra elde edilen karışıklık matrisi aşağıda verilmiştir.

             Observed Class
Predicted Class benign malignant
      benign       127         3
      malignant      4        71
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.
Sınıflandırma Hata parametreleri
Kurulan modele ait hata parametrelerinin elde edilmesine yönelik yazılan R kod bloğu aşağıda verilmiştir.

cm<-confusionMatrix(karsilastirma$Tahmin, karsilastirma$Gozlem)
cm
Yukarıdaki R kod bloğunun çalıştırılmasından sonra elde edilen hata metrikleri bir bütün olarak aşağıda verilmiştir. Torbalama (bagging) algoritmasıyla kurulan model meme kanseri türlerini yaklaşık % 97 doğruluk (accuracy) oranı ile tahmin etmektedir. Hata oranı ise 100-97 eşitliğinden yola çıkarak % 3 buluruz. Uyumu gösteren Kappa katsayısı ise bu modelde yaklaşık % 93 (0,93) olup, tahmin edilen tümör türleri ile gözlemlenen tümör türleri arasında mükemmele yakın bir uyum olduğu görülmektedir. Bu bulgu aynı zamanda doğruluk oranını da destekler niteliktedir.

Confusion Matrix and Statistics

           Reference
Prediction  benign malignant
  benign       127         3
  malignant      4        71
                                          
               Accuracy : 0.9659          
                 95% CI : (0.9309, 0.9862)
    No Information Rate : 0.639           
    P-Value [Acc > NIR] : <2e-16          
                                          
                  Kappa : 0.9262          
                                          
 Mcnemar's Test P-Value : 1               
                                          
            Sensitivity : 0.9695          
            Specificity : 0.9595          
         Pos Pred Value : 0.9769          
         Neg Pred Value : 0.9467          
             Prevalence : 0.6390          
         Detection Rate : 0.6195          
   Detection Prevalence : 0.6341          
      Balanced Accuracy : 0.9645          
                                          
       'Positive' Class : benign    
Çapraz performans testi (Cross validation test)
Burada modelin performansı çapraz performans testi yapılarak tüm veri seti üzerinde test edilir ve doğruluk oranı verilir. Bu işleme ilişkin yazılan R kod bloğu aşağıda verilmiştir. Bu kısım Bilgisayar işlemcisine bağlı olarak biraz uzun sürebilmektedir. Bu yüzden sabırlı olmakta fayda var 🙂 . Yukarıda karışıklık matrisine göre verilen metrikler test verisine göre elde edilen hata metrikleridir. Yani yukarıda eğitim verisine göre kurulan model test verisi ile karşılaştırılmıştır. Buradaki ayrımı iyi yapmak gerekir.

tamvericv<-bagging.cv(Class ~., data=tamveri, v = 2, mfinal = 500, control=rpart.control(cp=0.01))
tamvericv[-1]
#doğruluk ve hata oranı
dogrulukvehataorani<-paste("Doğruluk Oranı: %",round((1-tamvericv[-1]$error)*100,1),"ve","Hata Oranı: %",round(tamvericv[-1]$error*100,1))
dogrulukvehataorani
Yukarıdaki R kod bloğunun çalıştırılmasından sonra model tüm veri seti üzerinde test edilmiş ve performans parametre değerleri karışıklık matrisi ile birlikte aşağıda verilmiştir. Bulgular, torbalama algoritmasının tüm veri seti üzerinde test edildiğinde meme kanseri türlerini % 96,5 doğruluk oranı ve % 3,5 hata oranı ile tahmin ettiğini göstermektedir.

$confusion
               Observed Class
Predicted Class benign malignant
      benign       429         9
      malignant     15       230

$error
[1] 0.03513909

[1] "Doğruluk Oranı: % 96.5 ve Hata Oranı: % 3.5"
Sonuç
Bu çalışmada sınıflandırma (classification) probleminin çözümüne yönelik topluluk öğrenme algoritmalarından biri olan torbalama (bagging) algoritması kullanılarak ayrıntılı deneysel bir çalışma yapılmıştır. Ortaya konulan bulgular, sınıflandırma probleminin torbalama (bagging) algoritması tarafından çok başarılı bir şekilde, diğer bir ifadeyle çok yüksek bir doğruluk (accuracy) oranıyla çözüme kavuşturulduğu görülmektedir.
Torbalama algoritması test verisi üzerinde test edildiğinde meme kanseri türlerini % 96,5 doğruluk (accuracy) oranı ile tahmin etmektedir. Diğer taraftan tüm veri seti üzerinde test edildiğinde ise meme kanseri türlerini benzer şekilde yaklaşık % 96,5 doğruluk (accuracy) oranı ile tahmin etmektedir. Hata oranı (error rate) 1-Doğruluk Oranı eşitliğinden hem test verisinde hemde tüm verisi setinde % 3,5’tir . Bu hata sınıflandırma hatası (classification error) olarak da nitelendirilebilir.
Yapılan bu çalışmanın özellikle veri bilimi (data science) ile ilgilenen akademi ve saha çalışanlarına önemli bir katkı sunacağı 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://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://www.stat.berkeley.edu/~breiman/Using_random_forests_V3.1.pdf
https://www.stat.berkeley.edu/~breiman/RandomForests/
https://stats.idre.ucla.edu/r/library/r-library-introduction-to-bootstrapping/
https://stanford.edu/~shervine/l/tr/teaching/cs-229/cheatsheet-machine-learning-tips-and-tricks
http://uzalcbs.org/wp-content/uploads/2016/11/2012_082.pdf
http://www.ub.edu/stat/docencia/EADB/bagging.html
https://people.cs.pitt.edu/~milos/courses/cs2750-Spring04/lectures/class23.pdf
https://www.google.com/search?q=underfitting+and+overfitting&source=lnms&tbm=isch&sa=X&ved=2ahUKEwiI1onvyNvpAhVSQMAKHfYyC28Q_AUoAXoECBAQAw&biw=1366&bih=604#imgrc=m5WcPcAqdpCwEM
Webb G.I. (2011) Overfitting. In: Sammut C., Webb G.I. (eds) Encyclopedia of Machine Learning. Springer, Boston, MA
https://www.memorial.com.tr/saglik-rehberleri/biyopsi-nedir-ve-nasil-yapilir/
https://archive.ics.uci.edu/ml/datasets/Breast+Cancer+Wisconsin+(Diagnostic)
Andriyas, S. and McKee, M. (2013). Recursive partitioning techniques for modeling irrigation behavior. Environmental Modelling & Software, 47, 207–217.
Chan, J. C. W. and Paelinckx, D. (2008). Evaluation of Random Forest and Adaboost tree-based ensemble classification and spectral band selection for ecotope mapping using airborne hyperspectral imagery. Remote Sensing of Environment, 112(6), 2999–3011.
Chrzanowska, M., Alfaro, E., and Witkowska, D. (2009). The individual borrowers recognition:Single and ensemble trees. Expert Systems with Applications, 36(2), 6409–6414.
De Bock, K. W., Coussement, K., and Van den Poel, D. (2010). Ensemble classification based on generalized additive models. Computational Statistics & Data Analysis, 54(6), 1535–1546.
De Bock, K. W. and Van den Poel, D. (2011). An empirical evaluation of rotation-based ensemble classifiers for customer churn prediction. Expert Systems with Applications, 38(10), 12293–12301.
Fan, Y., Murphy, T.B., William, R. and Watson G. (2009). digeR: GUI tool for analyzing 2D DIGE data. R package version 1.2.
Garcia-Perez-de-Lema, D., Alfaro-Cortes, E., Manzaneque-Lizano, M. and Banegas-Ochovo, R. (2012). Strategy, competitive factors and performance in small and medium enterprise (SMEs).
African Journal of Business Management, 6(26), 7714–7726.
Gonzalez-Rufino, E., Carrion, P., Cernadas, E., Fernandez-Delgado, M. and Dominguez-Petit, R.(2013). Exhaustive comparison of colour texture features and classification methods to discriminate cells categories in histological images of fish ovary. Pattern Recognition, 46, 2391–2407.
Krempl, G. and Hofer, V. (2008). Partitioner trees: combining boosting and arbitrating. In: Okun, O., Valentini, G. (eds.) Proc. 2nd Workshop Supervised and Unsupervised Ensemble Methods and Their Applications, Patras, Greece, 61–66.
Torgo, Luis, Data Mining With R. Second Edition.
Bunu paylaş:
Facebook
Twitter
Reddit
Telegram
E-posta
Yazdır
Daha fazla
LinkedIn
Tumblr
Pinterest
Pocket
WhatsApp
Skype
Bunu beğen:
Beğen Yükleniyor...
Tevfik BULUT	Genel	1 Yorum 31 Mayıs 2020 31 Mayıs 2020 20 Minutes	
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
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.
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:
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 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
Bunu paylaş:
Facebook
Twitter
Reddit
Telegram
E-posta
Yazdır
Daha fazla
LinkedIn
Tumblr
Pinterest
Pocket
WhatsApp
Skype
Bunu beğen:
Beğen Yükleniyor...
Tevfik BULUT	Genel	Yorum bırakın 25 Mayıs 2020 25 Mayıs 2020 15 Minutes	
R Programlama Diliyle Sınıflandırma Problemlerinin Çözümünde Küme Algoritmaları Üzerine Bir Vaka Çalışması: A Case Study on Cluster Algorithms in Solving Classification Problems with R Programming Language
Giriş
Küme geçmeden önce temel kavramları açıklamak konunun anlaşılması açısından önem taşıdığından ilk olarak kısaca bu kavramlara yer verilmiştir.
Küme, benzer özellikleri içinde barındıran topluluk olarak tanımlanabilir. Bu topluluk insan, hayvan, bitki topluluğu olabileceği gibi nesnelerin oluşturduğu topluluk da olabilir. Benzer özellikler taşıyan bu topluluklar diğer kümelerden farklılaşır.
Kümeleme (clustering) analizini ise benzer özelliklere sahip toplulukları gruplara ayırma olarak açıklayabiliriz. Bu analizle bir nevi gruplama yapılmaktadır. Bu analiz türü aynı zamanda yapay zeka öğrenme türlerinden biri olan denetimsiz öğrenme (unsupervised learning)’nin denetimsiz sınıflama (unsupervised classification) başlığı altında değerlendirilir. Çünkü denetimli öğrenme (supervised learning)’de veri önceden tanımlanmış değildir veya önceden sınıflama (denetimli sınıflama) durumu bu analiz türünde söz konusu değildir. Küme analizi bir çok alanda kullanılabilmekle birlikte öne çıkan alanlar şöyle özetlenebilir;
Hastalık Teşhisi
Tedavi Yöntemleri
Sigorta
Pazarlama
Arazi kullanımı
Şehir planlama
Küme Analiz Metodları
Herüstik yaklaşımlar
K-Ortalama (k-means) Küme Analiz Metodu: Her bir küme, kümenin merkez noktasıyla temsil edilir.
K-Medoidler (k-medoids) veya PAM Küme Analiz Metodu: Her bir küme, kümedeki nesnelerden biri tarafından temsil edilir.
Küme analizinin kalitesi, sınıf içi benzerlikleri yüksek (varyans düşük) ve kümeler arası benzerliklerin düşük (varyans yüksek) kümelerin elde edilmesine bağlıdır.
Küme algoritmaları hem sınıflandırma (classification) hem de regresyon (regression) problemlerinin çözümünde kullanılan makine öğrenmenin denetimsiz öğrenme (unsupervised) kısmında yer alan 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 küme algoritmalarında sınıflandırma, bağımlı değişken nicel ise küme algoritmalarında regresyon problemini çözmüş oluyorur.
Şekil 2: Küme Analizlerinde Problem Sınıfına Göre Veri Türleri
Küme analizlerinde 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 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 küme 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 olabilecek en yalın şekilde ele alınmaya çalışılmıştır. Çalışmada amaç species hedef değişkenini diğer bağımlı değişkenler kullanılarak tahmin etmektir. Bu kısımda k-ortalamalar (k-means) ve k-medoidler (k-medoids) hata metrikleri açısından performansları karşılaştırılmıştır. 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", "caret","cluster", "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ı
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
Model 1: K Ortalamalar (K Means) Metodu
1 nolu modelin oluşturulması

set.seed(1923)
sonuc <- kmeans(df1[,-5], 3)
sonuc
Yukarıdaki R kod bloğunun çalıştırılmasından sonra elde edilen model sonuçları aşağıda verilmiştir.

K-means clustering with 3 clusters of sizes 21, 33, 96

Cluster means:
  Sepal.Length Sepal.Width Petal.Length Petal.Width
1     4.738095    2.904762     1.790476   0.3523810
2     5.175758    3.624242     1.472727   0.2727273
3     6.314583    2.895833     4.973958   1.7031250

Clustering vector:
  [1] 2 1 1 1 2 2 2 2 1 1 2 2 1 1 2 2 2 2 2 2 2 2 2 2 1 1 2 2 2 1 1 2 2 2 1 2
 [37] 2 2 1 2 2 1 1 2 2 1 2 1 2 2 3 3 3 3 3 3 3 1 3 3 1 3 3 3 3 3 3 3 3 3 3 3
 [73] 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 1 3 3 3 3 1 3 3 3 3 3 3 3 3 3
[109] 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
[145] 3 3 3 3 3 3

Within cluster sum of squares by cluster:
[1]  17.669524   6.432121 118.651875
 (between_SS / total_SS =  79.0 %)

Available components:

[1] "cluster"      "centers"      "totss"        "withinss"    
[5] "tot.withinss" "betweenss"    "size"         "iter"        
[9] "ifault"     
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.

karsilastirma<-tibble(Küme=ifelse(sonuc$cluster==1, "setosa",ifelse(sonuc$cluster==2, "versicolor", "virginica")), Tahmin=df1$Species)%>% group_by(Küme, Tahmin) %>% summarise(Sayi=n()) 
karsilastirma %>% spread(Tahmin, Sayi, fill = 0)

#alternatif

karsilastirmak<-tibble(Gercek=ifelse(sonuc$cluster==1, "setosa",ifelse(sonuc$cluster==2, "versicolor", "virginica")), Tahmin=df1$Species)%>% mutate_if(is.character, as.factor)
cm <- karsilastirmak %>%
  conf_mat(Tahmin, Gercek)
cm
#karışıklık matriks (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 matrisi aşağıda tabloda verilmiştir.
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 1 nolu modele ait hata parametrelerinin elde edilmesine yönelik yazılan R kod bloğu aşağıda verilmiştir.

confusionMatrix(karsilastirmak$Gercek, karsilastirmak$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. K-ortalamalar metoduyla kurulan model iris bitki türlerini yaklaşık % 45 doğruluk (accuracy) oranı ile tahmin etmektedir. Uyumu gösteren Kappa katsayısı ise bu modelde 0,17 olup, tahmin edilen iris bitki türleri ile gözlemlenen bitki türleri arasında uyumun çok düşük olduğu göstermektedir. Bu bulgu aynı zamanda doğruluk oranını da doğrular niteliktedir.

Confusion Matrix and Statistics

            Reference
Prediction   setosa versicolor virginica
  setosa         17          4         0
  versicolor     33          0         0
  virginica       0         46        50

Overall Statistics
                                          
               Accuracy : 0.4467          
                 95% CI : (0.3655, 0.5299)
    No Information Rate : 0.3333          
    P-Value [Acc > NIR] : 0.002528        
                                          
                  Kappa : 0.17            
                                          
 Mcnemar's Test P-Value : NA              

Statistics by Class:

                     Class: setosa Class: versicolor Class: virginica
Sensitivity                 0.3400            0.0000           1.0000
Specificity                 0.9600            0.6700           0.5400
Pos Pred Value              0.8095            0.0000           0.5208
Neg Pred Value              0.7442            0.5726           1.0000
Prevalence                  0.3333            0.3333           0.3333
Detection Rate              0.1133            0.0000           0.3333
Detection Prevalence        0.1400            0.2200           0.6400
Balanced Accuracy           0.6500            0.3350           0.7700
Gözlem ve tahmin sınıflandırma sonuçlarının xlsx dosyasına yazdırılması

kortalama<-tibble(Gözlem=ifelse(sonuc$cluster==1, "setosa",ifelse(sonuc$cluster==2, "versicolor", "virginica")), Tahmin=df1$Species)
write_xlsx(kortalama, "kortalama.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.
K-Ortalama Tahmin sonuçlarıİndir
Kümelerin grafikle gösterilmesi

set.seed(1923)
sonuc <- kmeans(df1[,-5], 3)
fviz_cluster(sonuc, df1[, -5], ellipse.type = "norm")
Yukarıdaki R kod bloğunun yazılmasından sonra elde k-ortalamalar küme grafiği aşağıda verilmiştir. Kümelerin çok iç içe girdiği birbirinden ayrışmadığı görülmektedir. Bu durum sınıflandırmanın çok da iyi olmadığını göstermektedir.
Model 2: K-Medoidler (K Medoids) Metodu
2 nolu modelin oluşturulması

set.seed(1900)
psonuc <- pamk(df1[,-5],3)
psonuc
Yukarıdaki R kod bloğunun çalıştırılmasından sonra elde edilen model sonuçları aşağıda verilmiştir.

$pamobject
Medoids:
      ID Sepal.Length Sepal.Width Petal.Length Petal.Width
[1,]   8          5.0         3.4          1.5         0.2
[2,]  79          6.0         2.9          4.5         1.5
[3,] 113          6.8         3.0          5.5         2.1
Clustering vector:
  [1] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
 [37] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 3 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
 [73] 2 2 2 2 2 3 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 3 2 3 3 3 3 2 3
[109] 3 3 3 3 3 2 2 3 3 3 3 2 3 2 3 2 3 3 2 2 3 3 3 3 3 2 3 3 3 3 2 3 3 3 2 3
[145] 3 3 2 3 3 2
Objective function:
    build      swap 
0.6709391 0.6542077 

Available components:
 [1] "medoids"    "id.med"     "clustering" "objective"  "isolation" 
 [6] "clusinfo"   "silinfo"    "diss"       "call"       "data"      

$nc
[1] 3

$crit
[1] 0.000000 0.000000 0.552819

Karışıklık matrisi (confusion matrix)’nin oluşturulması

karsilastirma<-tibble(Küme=ifelse(psonuc$pamobject$clustering==1, "setosa",ifelse(psonuc$pamobject$clustering==2, "versicolor", "virginica")), Tahmin=df1$Species)%>% group_by(Küme, Tahmin) %>% summarise(Sayi=n()) 
karsilastirma<-karsilastirma %>% spread(Tahmin, Sayi, fill = 0)
formattable(karsilastirma)

#alternatif

karsilastirmat<-tibble(Gercek=ifelse(psonuc$pamobject$clustering==1, "setosa",ifelse(psonuc$pamobject$clustering==2, "versicolor", "virginica")), Tahmin=df1$Species)%>% mutate_if(is.character, as.factor)
cm <- karsilastirmat %>%
  conf_mat(Tahmin, Gercek)
cm
#karışıklık matriks (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 matrisi aşağıda tabloda verilmiştir.
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 2 nolu modele ait hata metriklerinin elde edilmesine yönelik yazılan R kod bloğu aşağıda verilmiştir.

confusionMatrix(karsilastirmak$Gercek, karsilastirmak$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. K-medoidler metoduyla kurulan model iris bitki türlerini % 89 doğruluk (accuracy) oranı ile tahmin etmektedir. Uyumu gösteren Kappa katsayısı ise bu modelde 0,84 olup, tahmin edilen iris bitki türleri ile gözlemlenen bitki türleri arasında uyumun çok yüksek olduğu göstermektedir. Bu bulgu aynı zamanda yüksek doğruluk oranını da doğrular niteliktedir.

            Truth
Prediction   setosa versicolor virginica
  setosa         50          0         0
  versicolor      0         48        14
  virginica       0          2        36
Confusion Matrix and Statistics

            Reference
Prediction   setosa versicolor virginica
  setosa         50          0         0
  versicolor      0         48        14
  virginica       0          2        36

Overall Statistics
                                          
               Accuracy : 0.8933          
                 95% CI : (0.8326, 0.9378)
    No Information Rate : 0.3333          
    P-Value [Acc > NIR] : < 2.2e-16       
                                          
                  Kappa : 0.84            
                                          
 Mcnemar's Test P-Value : NA              

Statistics by Class:

                     Class: setosa Class: versicolor Class: virginica
Sensitivity                 1.0000            0.9600           0.7200
Specificity                 1.0000            0.8600           0.9800
Pos Pred Value              1.0000            0.7742           0.9474
Neg Pred Value              1.0000            0.9773           0.8750
Prevalence                  0.3333            0.3333           0.3333
Detection Rate              0.3333            0.3200           0.2400
Detection Prevalence        0.3333            0.4133           0.2533
Balanced Accuracy           1.0000            0.9100           0.8500
Gözlem ve tahmin sınıflandırma sonuçlarının xlsx dosyasına yazdırılması

kmedoidler<-tibble(Gözlem=ifelse(psonuc$pamobject$clustering==1, "setosa",ifelse(psonuc$pamobject$clustering==2, "versicolor", "virginica")), Tahmin=df1$Species)
write_xlsx(kmedoidler, "kmedoidler.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.
K-Medoidler Tahmin Sonuçlarıİndir
Kümelerin grafikle gösterilmesi

set.seed(1900)
psonuc <- pam(df1[,-5],3)
fviz_cluster(psonuc, geom = "point", ellipse.type = "norm")
Yukarıdaki R kod bloğunun yazılmasından sonra elde edilen k-medoidler küme grafiği aşağıda verilmiştir.
Sonuç
Bu çalışmada sınıflandırma (classification) probleminin çözümüne yönelik küme analiz metodlarından k-ortalama ve k-medoidler 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 k-medoidler tarafından başarılı bir şekilde, diğer bir ifadeyle yüksek bir doğruluk oranıyla çözüme kavuşturulduğu görülmektedir.
Her iki yöntem sınıflandırma hata metrikleri açısından karşılaştırıldığında öne çıkan bulgular şöyledir: K-medoidler bağımlı değişken olan “species” değişkenini çok daha iyi tahmin etmektedir. Bu yöntemde doğruluk (accuracy) oranı % 89,3 düzeyindeyken, k-ortalamalar yönteminde bu oran yaklaşık % 45 düzeyinde kalmıştır. Diğer bir ifadeyle k-medoidler yöntemi bağımlı değişkeni k-ortalamalar yönteminden neredeyse iki kat daha iyi tahmin etmektedir. Elde edilen sonuçların uyumunu gösteren Kappa katsayısı da bunun iyi bir göstergesidir. Yüksek katsayı yüksek uyumu gösterir ve bu istenen bir durumdur. K-ortalamalar yönteminden elde Kappa katsayısı çok düşük (0,17) iken, bu katsayı k-medoidler yönteminde çok yüksek (0,84)’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/
An evaluation of Guided Regularized Random Forest for classification and regression tasks in remote sensing. 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).
https://stats.idre.ucla.edu/r/library/r-library-introduction-to-bootstrapping/
McHugh M. L. (2012). Interrater reliability: the kappa statistic. Biochemia medica, 22(3), 276–282.
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://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://www.datanovia.com/en/lessons/determining-the-optimal-number-of-clusters-3-must-know-methods/
Charrad, Malika, Nadia Ghazzali, Véronique Boiteau, and Azam Niknafs. 2014. “NbClust: An R Package for Determining the Relevant Number of Clusters in a Data Set.” Journal of Statistical Software 61: 1–36. http://www.jstatsoft.org/v61/i06/paper.
http://web.stanford.edu/~hastie/Papers/gap.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/
Bunu paylaş:
Facebook
Twitter
Reddit
Telegram
E-posta
Yazdır
Daha fazla
LinkedIn
Tumblr
Pinterest
Pocket
WhatsApp
Skype
Bunu beğen:
Beğen Yükleniyor...
Tevfik BULUT	Genel	Yorum bırakın 22 Mayıs 2020 23 Mayıs 2020 13 Minutes	
R Programlama Diliyle Regresyon Problemlerinin Çözümünde Rastgele Orman Algoritması Üzerine Bir Vaka Çalışması: A Case Study on Random Forest (RF) Algorithm in Solving Regression Problems with R Programming Language
Giriş
Rastgele Orman (RF) algoritması , 2001 yılında Breiman tarafından karar ağaçlarının bir kombinasyonu olarak önerilmiştir. RF en iyi “her ağaç, bağımsız olarak örneklenen ve ormandaki tüm ağaçlar için aynı dağılıma sahip rastgele bir vektörün değerlerine bağlı olacak şekilde ağaç belirleyicilerinin kombinasyonu” olarak tanımlanan bir topluluk makine öğrenme algoritmasıdır. Topluluk algoritması gerek regresyon gerekse sınıflandırma problemlerinde varyansı ve hatayı azaltarak daha iyi hedef değişken veya bağımlı değişkeni tahmin etmemize olanak tanır. Bunu da yeniden örnekleme yöntemi (bootstrap aggregation or bagging)’yle yapar. Bu yöntemde sırasıyla tesadüfi tekrarlı örneklem yöntemi (simple random sampling with replacement) kullanılarak veri seti alt örneklem kümelerine, diğer bir ifade ile alt örneklem ağaç kümelerine ayrılır. Bunların tamamı kurulan modelde hatayı azaltmaya yöneliktir. Anlatılanı Şekil 1 üzerinde gösterelim. Şekilde modellerin paralel düzende inşa edildiğine dikkat etmek gerekir. Modellerin oluşturulmasında çaprazlama bulunmamaktadır.
Şekil 1: Rastgele Orman Algoritmasında Yeniden Örnekleme (Bootstrapping)
RF, karar ağaçlarına dayanır. Makine öğreniminde karar ağaçları, tahmin modelleri oluşturan denetimli öğrenme tekniğidir. Bunlara karar ağaçları (decision trees) adı verilmektedir. Bu yöntemin özellikle mühendislik bilimlerinde başta sağlık sektörü olmak üzere pek çok sektörde yaygın bir şekilde kullanıldığı görülmektedir.
Rastgele orman algoritmaları hem sınıflandırma (classification) hem de regresyon (regression) problemlerinin çözümünde kullanılan makine öğrenmenin denetimli öğrenme (supervised) kısmında yer alan tahmin oranı yüksek 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 rastgele orman algoritmasında sınıflandırma, bağımlı değişken nicel ise rastgele orman algoritmasında regresyon problemini çözmüş oluyoruz. RF analizlerde uç değerler (outliers)’e duyarlı değildir.
Şekil 2: Rastgele Orman (RF) Algoritmasında Proplem Sınıfına Göre Veri Tüleri
RF’te 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: Rastgele Orman Algoritması 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 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 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. Sınıflandırma problemlerinin çözümüne yönelik Rastgele Orman Algoritması (RF) kullanarak R’da yapmış olduğum çalışmanın linkini ilgilenenler için aşağıda veriyorum.
R Programlama Diliyle Sınıflandırma Problemlerinin Çözümünde Rastgele Orman Algoritması Üzerine Bir Vaka Çalışması: A Case Study on Random Forest (RF) Algorithm in Solving Classification Problems with R Programming Language
Sınıflandırma Metrikleri
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 modellerin perfomansı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.
Şekil 3’te yer verilen regresyon modellerinin performansını değerlendirmede literatürde aşağıdaki metriklerden yaygın bir şekilde yararlanılmaktadır. Regresyon metrikleri eştiliklerinin verilmesi yerine sade bir anlatımla neyi ifade ettiği anlatılacaktır. Böylece formüllere boğulmamış olacaksınız.
Regresyon Metrikleri
SSE (Sum of Square Error): Tahmin edilen değerler ile gözlem değerleri arasındaki farkların kareleri toplamını ifade eder.
MSE (Mean Square Error): Ortalama kare hatası olarak adlandırılan bu hata tahmin edilen değerler ile gözlem değerleri arasındaki farkların karelerinin ortalamasını ifade eder.
RMSE (Root Mean Square Error): Kök ortalama kare hatası olarak adlandırılan bu hata ortalama kare hatasının karekökünü ifade etmektedir.
MAE (Mean Absolute Error): Ortalama mutlak hata olarak adlandırılan bu hata türü ise tahmin edilen değerler ile gözlem değerleri arasındaki farkların mutlak değerlerinin ortalamasını ifade etmektedir.
MAPE (Mean Absolute Percentage Error): Ortalama mutlak yüzdesel hata olarak adlandırılan bu hata türünde ilk olarak tahmin edilen değerler ile gözlem değerleri arasındaki farkların mutlak değerleri hesaplanır. Daha sonra hesaplanan farkları mutlak değerleri mutlak değerleri alınan gözlem değerlerine bölünür. En son durumda ise elde edilen bu değerlerin ortalaması alınır.
Bias: Tahmin edilen değerler ile gözlem değerleri arasındaki farkların ortalamasıdır. Bu yönüyle ortalama mutlak hata (MAE)’ya benzemektedir.
Regresyon metriklerini anlattıktan sonra daha kalıcı olması ve öğrenilmesi adına hazırladığım excel üzerinde bahsedilen bu metriklerin nasıl hesaplandığı gösterilmiştir. Excel dosyasını aşağıdaki linkten indirebilirsiniz.
Regresyon Metrikleriİndir
Metodoloji ve Uygulama Sonuçları
Bu kısımda kullanılan veri setine ve adım adım Rastgele Orman algoritmasının regresyon problemlerinin çözümünde nasıl uygulandığına yer verilmiştir. Analizde R programlama dili kullanılmıştır. Uygulamaya esas veri seti Amerikan Ulusal Ekonomik Araştırmalar Bürosu (the National Bureau of Economic Research) kısa adıyla NBER’in resmi web sitesinden alınmıştır. Web sitesinin linki: https://data.nber.org/ dir. Veri setinin alındığı linkin tam adı ise http://data.nber.org/nberces/nberces5811/naics5811.xls dir.
Veri seti 1958’den 2011’e kadar ABD imalat sektöründeki katma değer ve toplam faktör verimliliği (TFV) göstergelerinden oluşan zengin ve hacmi geniş bir veri setidir. Orjinal (ingilizce) xlsx uzantılı veri setini aşağıdaki linkten indirebilirsiniz. Veri setindeki toplam gözlem sayısı 25542, değişken sayısı ise 25’tir.
Veri Seti (İngilizce)İndir
R’da analize uygun hale getirdiğim aynı veri setinin Türkçe versiyonunu ise aşağıdaki linkten indirebilirsiniz. Veri setinin Türkçeye çevrilmesinin nedeni anlaşılırlığın artırılmak istenmesidir.
Veri Seti (Türkçe)İndir
Veri seti “sira” hariç 8 değişkenden oluşmakta olup, anlaşılırlığı artırmak adına Türkçeye çevrilmiştir. Değişkenlerin tamamının veri türü nicel ve sürekli olup orjinal (ingilizce) adlarıyla birlikte aşağıda verilmiştir:
tistihdam: Toplam istihdamı göstermekte olup, orjinal veri setindeki adı “emp” dir. İstihdam değerleri 1000’e bölünerek verilmiştir. Bağımsız değişken olarak alınmıştır.
maas: Sektör çalışanlarının maaşlarını göstermekte olup, orjinal veri setindeki adı “pay” dir. Maaş değerleri 1 milyon $’a bölünerek verilmiştir. Bağımsız değişken olarak alınmıştır.
iistihdam: Üretim bandında çalışanların sayısını göstermekte olup, orjinal veri setindeki adı “prode” dur. Çalışan sayısı değerleri 1000’e bölünerek verilmiştir. Bağımsız değişken olarak alınmıştır.
icsaati: Üretim bandında çalışanların çalışma saatlerini göstermekte olup, orjinal veri setindeki adı “prodeh” dır. Çalışma saatleri 1 milyona bölünerek verilmiştir. Bağımsız değişken olarak alınmıştır.
sbu: Üretim bandında çalışanların ücretlerini göstermekte olup, orjinal veri setindeki adı “prodew” dır. Çalışma ücretleri 1 milyon $’a bölünerek verilmiştir. Bağımsız değişken olarak alınmıştır.
netsatis: Ne satışları göstermekte olup, orjinal veri setindeki adı “vship” tir. Net satışlar 1 milyon $’a bölünerek verilmiştir. Bağımsız değişken olarak alınmıştır.
mmaliyeti: Malzeme maliyetlerini göstermekte olup, orjinal veri setindeki adı “matcost” tur. Maliyetler 1 milyon $’a bölünerek verilmiştir. Bağımsız değişken olarak alınmıştır.
katmadeger: Katma değeri göstermekte olup, orjinal veri setindeki adı “vadd” tir. Katma değer 1 milyon $’a bölünerek verilmiştir. Bağımlı / hedef değişken (target variable) olarak alınmıştır.
Çalışmanın amacı yukarıda belirtilen bağımsız değişkenler ile bağımlı değişken olan “katmadeger” değişkenini tahmin etmektir.
Metodoloji ve uygulama sonuçları başlığı altında Rastgele Orman algoritmasına üzerine kurulan modeller olabilecek en yalın şekilde karşılaştırmalı olarak ele alınmaya çalışılmıştır. Daha sonra kurulan bu modeller hata metrikleri açısından karşılaştırılmıştır.
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", "DescTools", "ggpurr","psych","writexl","ggfortify", "caret","Metrics", "performanceEstimation", "yardstick","MASS")

sapply(kütüphaneler, require, character.only = TRUE)
Veri setinin kaynak web sitesinden okunması

url <- "http://data.nber.org/nberces/nberces5811/naics5811.xls"
dosyaadi <- "naics5811.xls"
curl::curl_download(url, dosyaadi)
veri <- read_excel(dosyaadi)
veri
Veri setinin Türkçeye dönüştürülmesi ve analiz değişkenlerinin belirlenmesi

df<-veri[,3:10] %>% as_tibble() %>% rename(tistihdam=emp, maas=pay, iistihdam=prode, icsaati=prodh, sbu=prodw, netsatis=vship, mmaliyeti=matcost, katmadeger=vadd) %>% rowid_to_column() %>% rename(sira=rowid)
df
Veri setindeki eksik gözlemlerin (Missing Data: NA) tespit edilmesi ve veri setinden çıkarılması

#Eksik gözlemlerin (NAs) sayısının değişkene göre belirlenmesi
nan<-sapply(df, function(x) sum(is.na(x))) %>% as_tibble()
nan<-cbind(Değişken=names(df), n=nan) %>% as_tibble()
formattable(nan)

#Eksik gözlemlerin (NAs) veri setinden çıkarılması
df1<-na.omit(df)
nan1<-sapply(df1, function(x) sum(is.na(x))) %>% as_tibble()
nan1<-cbind(Değişken=names(df), n=nan1) %>% as_tibble()
formattable(nan1)

#ilk 10 kayıt
formattable(head(df1, 10))
Yukarıdaki R kod bloğunun çalıştırılmasından sonra veri setinde değişkenlere göre belirlenen eksik veri (NA) diğer bir ifadeyle eksik gözlem sayısı aşağıdaki tabloda verilmiştir.
Yukarıdaki R kod bloğunun çalıştırılmasından sonra veri setinde değişkenlere göre belirlenen eksik gözlemler veri setinden çıkarılmış olup aşağıdaki tabloda son durumda veri setindeki eksik gözlem sayıları gösterilmiştir.
Veri setinin xlsx dosyasına yazdırılması
İhtiyaç duymanız halinde fonksiyonu ile birlikte eksik gözlemler (NAs)’den arındırılmış veri seti aşağıdaki kod yardımıyla xlsx uzantılı olarak excel dosyasına yazdırılmıştır.

writexl::write_xlsx(df1, "verisetiturkcekayipsizveri.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 (Türkçe Versiyon)İndir
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 tipleri, gözlem sayılarıyla birlikte aşağıda verilmiştir.

Classes ‘tbl_df’, ‘tbl’ and 'data.frame':	25386 obs. of  9 variables:
 $ sira      : int  1 2 3 4 5 6 7 8 9 10 ...
 $ tistihdam : num  18 17.9 17.7 17.5 17.6 17.1 16.6 16 16.1 16.7 ...
 $ maas      : num  81.3 82.5 84.8 87.4 90.2 89.8 90.8 90.8 96.1 105 ...
 $ iistihdam : num  12 11.8 11.7 11.5 11.5 11 10.6 10.2 10.2 11 ...
 $ icsaati   : num  25.7 25.5 25.4 25.4 25.2 23.9 23.5 22.7 22.6 23.9 ...
 $ sbu       : num  49.8 49.4 50 51.4 52.1 52.1 52.2 51.8 53.9 61.3 ...
 $ netsatis  : num  1042 1051 1050 1120 1176 ...
 $ mmaliyeti : num  752 759 753 804 853 ...
 $ katmadeger: num  267 269 270 288 294 ...
 - attr(*, "na.action")= 'omit' Named int  1729 1730 1731 1732 1733 1734 1735 1736 1737 1738 ...
  ..- attr(*, "names")= chr  "1729" "1730" "1731" "1732" ...
Tanımlayıcı istatistikler

ti<-describe(df1[,-1])
formattable(tibble(Değişken=names(df1[,-1]), 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))
Yukarıdaki R kod bloğunun çalıştırılmasından sonra elde edilen tanımlayıcı istatistikler aşağıdaki tabloda verilmiştir.
Değişkenler arasındaki korelasyon
Nicel ve sürekli değişkenlerin korelasyon katsayılarını hesaplamak için Pearson korelasyon katsayısı kullanılmış olup, yazılan R kod bloğu aşağıdadır.

com<-round(cor(df1[,-1]), 1)
com<-cbind(Değisken=names(df[,-1]), com) %>% as_tibble()
formattable(com)
Yukarıdaki R kod bloğunun çalıştırılmasından sonra elde edilen korelasyon katsayıları aşağıdaki tabloda verilmiştir.
Veri setinin eğitilecek veri ve test setine ayrılması

set.seed(1919)
#Eğitilecek veri seti (training set)
train1 <- df1 %>% sample_frac(.70)
train1
#Test edilecek veri seti
test1  <- anti_join(df1, train1, by = 'sira')#Anti join fonksiyonu eşleşmeyen kayıtları yani geri kalan kayıtları getirir ve onları test setine atar.
test1
Model 1
1 nolu modelin oluşturulması

model1<-randomForest(katmadeger ~ ., train1[,-1])

print(model1)

summary(model1)

plot(model1, main="Model 1: Rastgele Orman (RF) Algoritmasının Hata Oranı")
Yukarıdaki kod bloğunun çalıştırılmasından sonra kurulan modele ilişkin açıklanan varyans (% 96,05) aşağıda verilmiştir.

Call:
 randomForest(formula = katmadeger ~ ., data = train1[, -1]) 
               Type of random forest: regression
                     Number of trees: 500
No. of variables tried at each split: 2

          Mean of squared residuals: 956776.9
                    % Var explained: 96.05
Yukarıdaki kod bloğunun çalıştırılmasından sonra çizilen modelin grafiği aşağıda verilmiştir. Bu grafik rastgele orman modelindeki regresyon hata oranlarını göstermektedir. Ağaç sayısı (ntree) arttıkça hata oranı sıfıra yaklaşır ve belirli noktadan sonra durağanlaşır. Burada ağaç sayısının az olması elde edilecek sonuçların varyansını artırarak hatayı yükseltir.
1 nolu modeldeki değişkenlerin önem düzeyleri

k<-importance(model1)
k<-tibble(Değişken=as.vector(row.names(k)), Dugum_Safligi=as.vector(importance(model1)))%>%arrange(desc(Dugum_Safligi))
formattable(k, 
            list(formatter(
              "span", style = ~ style(color = "grey",font.weight = "bold")),
`Dugum_Safligi` = color_bar("#00FF7F")
))
Yukarıdaki kod bloğunun çalıştırılmasından sonra elde edilen modeldeki değişkenlerin önem düzeyleri düğüm saflıkları (Inc Node Purity)’na göre büyükten küçüğe doğru aşağıdaki tabloda verilmiştir.
Tahmin edilen değerler ile gözlem değerlerinin karşılaştırılması

pred1<-predict(model1, test1)

karsilastirma<-tibble(Gercek=test1$katmadeger, Tahmin=pred1)

#ilk ve son 10 tahmin değerini gerçek değerle karşılaştırma 
ilk10<-head(karsilastirma, 10) %>% rename(Gercekİlk_10=Gercek, Tahminİlk_10=Tahmin) %>% mutate_if(is.numeric, round, 1)

son10<-tail(karsilastirma, 10) %>% rename(GercekSon_10=Gercek, TahminSon_10=Tahmin) %>% mutate_if(is.numeric, round, 1)

formattable(cbind(Sıra=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 gözlem değerleri ile tahmin değerleri aşağıdaki tabloda karşılaştırmalı olarak verilmiştir.
Regresyon metrikleri
Kurulan 1 nolu modele ait hata metriklerinin elde edilmesine yönelik yazılan R kod bloğu aşağıda verilmiştir.

karsilastirma<-tibble(Gercek=test1$katmadeger, Tahmin=pred1)
metrik<-tibble(SSE=sse(karsilastirma$Gercek, karsilastirma$Tahmin), MSE=mse(karsilastirma$Gercek, karsilastirma$Tahmin),RMSE=rmse(karsilastirma$Gercek, karsilastirma$Tahmin), MAE= mae(karsilastirma$Gercek, karsilastirma$Tahmin),MAPE= mape(karsilastirma$Gercek, karsilastirma$Tahmin), Bias= bias(karsilastirma$Gercek, karsilastirma$Tahmin))%>% mutate_if(is.numeric, round, 1)
formattable(metrik)
Yukarıdaki R kod bloğunun çalıştırılmasından sonra 1 nolu modele ait hata parametre değerleri aşağıda verilmiştir.
Çapraz performans testi (Cross validation test)
Çapraz performans testi veri setindeki gözlem sayısına ve bilgisayar işlemci kapasitelerine bağlı olarak uzun sürebilmektedir. Sabırlı olmakta fayda var 🙂

set.seed(1919)
cv<- performanceEstimation(
  PredTask(katmadeger ~ ., df1[,-1]),
    workflowVariants(learner=("randomForest")),
 EstimationTask(metrics = c("mse", "mae", "rmse"),
                method = CV(nReps = 1, nFolds = 10)))
summary(cv)
plot(cv)
Yukarıdaki R kod bloğunun çalıştırılmasından sonra 1 nolu modele ait elde edilen performans parametre değerleri aşağıda verilmiştir.

== Summary of a  Cross Validation Performance Estimation Experiment ==

Task for estimating  mse,mae,rmse  using
 1 x 10 - Fold Cross Validation
	 Run with seed =  1234 

* Predictive Tasks ::  df1[, -1].katmadeger
* Workflows  ::  randomForest 

-> Task:  df1[, -1].katmadeger
  *Workflow: randomForest 
              mse       mae      rmse
avg      757383.7 195.22316  842.1489
std      399589.1  17.73925  231.3462
med      600792.8 190.91481  774.9974
iqr      722966.5  27.63886  415.4534
min      277804.7 168.18802  527.0718
max     1310045.6 222.07900 1144.5722
invalid       0.0   0.00000    0.0000
Yukarıdaki R kod bloğunun çalıştırılmasından sonra 1 nolu modele ait elde edilen performans parametre değerleri aşağıdaki grafikte verilmiştir.
Model 2
2 nolu modelin oluşturulması

which.min(model1$mse)#1. modelde büyütülecek ağaçlarının sayısını minimum yapan hata

set.seed(1920)
model2<-randomForest(katmadeger ~ ., train1[,-1], ntree=54, mtry=8/3)#modelde mtyr her bölümde rastgele aday olarak örneklenen değişken sayısını (p=değişken sayısı/3) göstermektedir. 

print(model2)

summary(model2)

plot(model2, main="Model 2: Rastgele Orman (RF) Algoritmasının Hata Oranı")
Yukarıdaki kod bloğunun çalıştırılmasından sonra kurulan modele ilişkin açıklanan varyans (% 97,26) aşağıda verilmiştir.

Call:
 randomForest(formula = katmadeger ~ ., data = train1[, -1], ntree = 54,      mtry = 8/3) 
               Type of random forest: regression
                     Number of trees: 54
No. of variables tried at each split: 3

          Mean of squared residuals: 719121.7
                    % Var explained: 97.26
Yukarıdaki kod bloğunun çalıştırılmasından sonra çizilen modelin grafiği aşağıda verilmiştir. Bu grafik rastgele orman modelindeki regresyon hata oranlarını göstermektedir. Ağaç sayısı (ntree) arttıkça hata oranı sıfıra yaklaşır ve belirli noktadan sonra durağanlaşır. Burada ağaç sayısının çok az veya fazla olması elde edilecek sonuçların varyansını artırarak hatayı yükseltebilir.
2 nolu modeldeki değişkenlerin önem düzeyleri

k<-importance(model2)
k<-tibble(Değişken=as.vector(row.names(k)), Dugum_Safligi=as.vector(importance(model2)))%>%arrange(desc(Dugum_Safligi))
k

formattable(k, 
            list(formatter(
              "span", style = ~ style(color = "grey",font.weight = "bold")),
`Dugum_Safligi` = color_bar("#B0C4DE")
))
Yukarıdaki kod bloğunun çalıştırılmasından sonra elde edilen modeldeki değişkenlerin önem düzeyleri düğüm saflıkları (Inc Node Purity)’na göre büyükten küçüğe doğru aşağıdaki tabloda verilmiştir.
Regresyon metrikleri
Kurulan 2 nolu modele ait hata metriklerinin elde edilmesine yönelik yazılan R kod bloğu aşağıda verilmiştir.

pred2<-predict(model2, test1)

karsilastirma2<-tibble(Gercek=test1$katmadeger, Tahmin=pred2)

metrik<-tibble(SSE=sse(karsilastirma2$Gercek, karsilastirma2$Tahmin), MSE=mse(karsilastirma2$Gercek, karsilastirma2$Tahmin),RMSE=rmse(karsilastirma2$Gercek, karsilastirma2$Tahmin), MAE= mae(karsilastirma2$Gercek, karsilastirma2$Tahmin),MAPE= mape(karsilastirma2$Gercek, karsilastirma2$Tahmin), Bias= bias(karsilastirma2$Gercek, karsilastirma2$Tahmin))%>% mutate_if(is.numeric, round, 1)
formattable(metrik)
Yukarıdaki R kod bloğunun çalıştırılmasından sonra 2 nolu modele ait hata parametre değerleri aşağıda verilmiştir.

set.seed(1920)
cv<- performanceEstimation(
  PredTask(katmadeger ~ ., df1[,-1]),
  workflowVariants(learner="randomForest", learner.pars=list(ntree=54, mtry=8/3)),
 EstimationTask(metrics = c("mse", "mae", "rmse"),
                method = CV(nReps = 1, nFolds = 10)))
summary(cv)

#rankWorkflows(cv, top = 3)

plot(cv)
Yukarıdaki R kod bloğunun çalıştırılmasından sonra 2 nolu modele ait elde edilen performans parametre değerleri aşağıda verilmiştir.

== Summary of a  Cross Validation Performance Estimation Experiment ==

Task for estimating  mse,mae,rmse  using
 1 x 10 - Fold Cross Validation
	 Run with seed =  1234 

* Predictive Tasks ::  df1[, -1].katmadeger
* Workflows  ::  randomForest 

-> Task:  df1[, -1].katmadeger
  *Workflow: randomForest 
              mse       mae      rmse
avg      620028.2 154.33328  767.2455
std      311613.2  14.63084  186.6741
med      545472.8 154.55071  736.9520
iqr      295773.3  20.45502  201.6927
min      309424.4 123.09429  556.2593
max     1231557.9 167.92314 1109.7558
invalid       0.0   0.00000    0.0000
Yukarıdaki R kod bloğunun çalıştırılmasından sonra 2 nolu modele ait elde edilen performans parametre değerleri aşağıdaki grafikte verilmiştir.
Sonuç
Bu çalışmada regresyon (regression) probleminin çözümüne yönelik Rastgele Orman (RF) algoritması kullanılarak ayrıntılı deneysel bir çalışma yapılmıştır. Ortaya konulan bulgular, kurulan regresyon modelleri içerisinde 1. modeldeki bağımsız değişkenler bağımlı değişkendeki varyansın % 96’sını, 2. model ise varyansın % 97’sini açıklamaktadır. Modellere ilişkin çapraz performans testi sonuçları aşağıdaki tabloda verilmiş olup, 2. modelde üretilen ortalamalar hatalar 1. modele göre daha az olduğu için 2. model bağımlı değişken olan “katmadeger” i daha iyi tahmin ettiği söylenebilir.
Model MSE MAE RMSE
Model 1 757383.7 195.2 842.2
Model 2 620028.2 154.3 767,3
Yapılan bu çalışmanın özellikle veri bilimi (data science) ile ilgilenen akademi ve saha çalışanlarına önemli bir katkı sunacağı 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://data.nber.org/info.html
https://archive.ics.uci.edu/ml/machine-learning-databases/car/
https://www.r-project.org/
https://www.census.gov/manufacturing/m3/definitions/index.html
http://data.nber.org/data/nberces.html
http://data.nber.org/nberces/nberces5811/naics5811.xls
https://www.shirin-glander.de/2018/10/ml_basics_rf/
Breiman, L. Random Forests. Machine Learning 45, 5–32 (2001). https://doi.org/10.1023/A:1010933404324
https://github.com/ltorgo/performanceEstimation
An evaluation of Guided Regularized Random Forest for classification and regression tasks in remote sensing. 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).
Random Forest ensembles for detection and prediction of Alzheimer’s disease with a good between-cohort robustness. NeuroImage: Clinical Volume 6, 2014, Pages 115-125. https://doi.org/10.1016/j.nicl.2014.08.023
Breiman, L (2002), “Manual On Setting Up, Using, And Understanding Random Forests V3.1”,
https://www.stat.berkeley.edu/~breiman/Using_random_forests_V3.1.pdf
https://www.stat.berkeley.edu/~breiman/RandomForests/
https://stats.idre.ucla.edu/r/library/r-library-introduction-to-bootstrapping/
McHugh M. L. (2012). Interrater reliability: the kappa statistic. Biochemia medica, 22(3), 276–282.
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://www.theanalysisfactor.com/what-is-an-roc-curve/
https://developers.google.com/machine-learning/crash-course/classification/roc-and-auc
https://tevfikbulut.com/2020/05/14/rastgele-orman-algoritmasina-uzerine-bir-vaka-calismasi-a-case-study-on-random-forest-rf-algorithm/
Bunu paylaş:
Facebook
Twitter
Reddit
Telegram
E-posta
Yazdır
Daha fazla
LinkedIn
Tumblr
Pinterest
Pocket
WhatsApp
Skype
Bunu beğen:
Beğen Yükleniyor...
Tevfik BULUT	Genel	Yorum bırakın 21 Mayıs 2020 23 Haziran 2020 17 Minutes	
R Programlama Diliyle Sınıflandırma Problemlerinin Çözümünde Rastgele Orman Algoritması Üzerine Bir Vaka Çalışması: A Case Study on Random Forest (RF) Algorithm in Solving Classification Problems with R Programming Language
Giriş
Rastgele Orman (RF) algoritması , 2001 yılında Breiman tarafından karar ağaçlarının bir kombinasyonu olarak önerilmiştir. RF en iyi “her ağaç, bağımsız olarak örneklenen ve ormandaki tüm ağaçlar için aynı dağılıma sahip rastgele bir vektörün değerlerine bağlı olacak şekilde ağaç belirleyicilerinin kombinasyonu” olarak tanımlanan bir topluluk makine öğrenme algoritmasıdır. Topluluk algoritması gerek regresyon gerekse sınılandırma problemlerinde varyansı ve hatayı azaltarak daha iyi hedef değişken veya bağımlı değişkeni tahmin etmemize olanak tanır. Bunu da yeniden örnekleme yöntemi (bootstrap aggregation or bagging)’yle yapar. Bu yöntemde sırasıyla tesadüfi tekrarlı örneklem yöntemi (simple random sampling with replacement) kullanılarak veri seti alt örneklem kümelerine, diğer bir ifade ile alt örneklem ağaç kümelerine ayrılır. Bunların tamamı kurulan modelde hatayı azaltmaya yöneliktir. Anlatılanı Şekil 1 üzerinde gösterelim. Şekilde modellerin paralel düzende inşa edildiğine dikkat etmek gerekir. Modellerin oluşturulmasında çaprazlama bulunmamaktadır.
Şekil 1: Rastgele Orman Algoritmasında Yeniden Örnekleme (Bootstrapping)
RF, karar ağaçlarına dayanır. Makine öğreniminde karar ağaçları, tahmin modelleri oluşturan denetimli öğrenme tekniğidir. Bunlara karar ağaçları (decision trees) adı verilmektedir. Bu yöntemin özellikle mühendislik bilimlerinde başta sağlık sektörü olmak üzere pek çok sektörde yaygın bir şekilde kullanıldığı görülmektedir.
Rastgele orman algoritmaları hem sınıflandırma (classification) hem de regresyon (regression) problemlerinin çözümünde kullanılan makine öğrenmenin denetimli öğrenme (supervised) kısmında yer alan tahmin oranı yüksek 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 rastgele orman algoritmasında sınıflandırma, bağımlı değişken nicel ise rastgele orman algoritmasında regresyon problemini çözmüş oluyoruz. RF analizlerde uç değerler (outliers)’e duyarlı değildir.
Şekil 2: Rastgele Orman (RF) Algoritmasında Proplem Sınıfına Göre Veri Tüleri
RF’te 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: Rastgele Orman Algoritması 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 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 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 modellerin perfomansı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 Rastgele Orman algoritması uygulamasına yer verilmiştir. Analizde R programlama dili kullanılmıştır. Uygulamaya esas veri seti “https://archive.ics.uci.edu/ml/machine-learning-databases/car/&#8221; veri tabanından alınmıştır. Veri seti araba seçimi yapan bireylerin cevaplarından oluşmaktadır. Orjinal (ingilizce) veri setini aşağıdaki linkten indirebilirsiniz.
Veri Seti (İngilizce)İndir
R’da analize uygun hale getirdiğim aynı veri setinin Türkçe versiyonunu ise aşağıdaki linkten indirebilirsiniz. Veri setinin Türkçeye çevrilmesinin nedeni anlaşılırlığın artırılmak istenmesidir.
Veri Seti (Türkçe)
Veri seti ID (Sıra) hariç 7 değişkenden oluşmakta olup, anlaşılırlığı artırmak adına Türkçeye çevrilerek yeniden kodlanmıştır. Değişkenlerin tamamının veri türü kategorik olup değişkenler sırasıyla şöyledir:
Fiyat: Araba fiyatlarını belirtmekte olup , “Düşük”, “Orta”, “Yüksek” ve “Çok Yüksek” cevap seviyelerinden oluşmaktadır.
Bakım: Araba bakımını belirtmekte olup , “Düşük”, “Orta”, “Yüksek” ve “Çok Yüksek” cevap seviyelerinden oluşmaktadır.
Kapı: Arabadaki kapı sayısını belirtmekte olup “5 ve Yukarı”, “2”, “3” ve “4” cevap seviyelerinden oluşmaktadır.
Kişi: Arabanın kaç kişilik olduğunu göstermekte olup “5 ve Yukarı”, “2” ve “4” cevap seviyelerinden oluşmaktadır.
Bagaj: Arabadaki bagaj hacmini değerlendirmeye yönelik “Büyük”, “Orta” ve “Küçük” cevap seviyelerinden oluşmaktadır.
Güvenlik: Arabanın oluşturduğu güvenlik algısını değerlendirmeye yönelik “Yüksek”, “Orta” ve “Düşük” cevap seviyelerinden oluşmaktadır.
Karar: Araba satın alma durumunu değerlendirmeye yönelik “Kabul”, “İyi”, “Red” ve “Çok İyi” cevap seviyelerinden oluşmaktadır.
Metodoloji ve uygulama sonuçları başlığı altında Rastgele Orman algoritmasına üzerine kurulan iki model olabilecek en yalın şekilde ele alınmaya çalışılmıştır. Daha sonra kurulan bu iki model hata metrikleri açısından performansları karşılaştırılmıştır. 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", "DescTools", "readstata13","viridis","ggpurr","writexl","ggfortify", "caret", "yardstick","MASS")
sapply(kütüphaneler, require, character.only = TRUE)
Veri setinin okunması ve değişken kategorilerinin yeniden kodlanması

df <- read.csv("car.data", header=FALSE) %>% as_tibble()
df <- df %>% rename(Fiyat=V1, Bakim=V2, Kapi=V3, Kisi=V4, Bagaj=V5, Guvenlik=V6, Karar=V7) %>% rowid_to_column() %>% rename(ID=rowid)
df
df1<-df %>% mutate(Fiyat=recode_factor(Fiyat, "low"="Düşük", "med"="Orta", "high"="Yüksek", "vhigh"="Çok Yüksek"))%>% mutate(Bakim=recode_factor(Bakim, "low"="Düşük", "med"="Orta", "high"="Yüksek", "vhigh"="Çok Yüksek")) %>% mutate (Kapi= recode_factor(Kapi, "5more" = "5 ve Yukarı")) %>% mutate (Kisi= recode_factor(Kisi, "more" = "5 ve Yukarı")) %>% mutate (Bagaj= recode_factor(Bagaj, "big" = "Büyük", "med" = "Orta", "small" = "Küçük")) %>% mutate (Guvenlik= recode_factor(Guvenlik, "high" = "Yüksek", "med" = "Orta", "low" = "Düşük"))%>% mutate (Karar= recode_factor(Karar, "acc" = "Kabul", "good" = "İyi", "unacc" = "Red","vgood" = "Çok İyi"))
df1
formattable(head(df1))
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.

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 (Türkçe Versiyon)
Yukarıdaki R kod bloğunun çalıştırılmasından sonra elde edilen veri setinin ilk 6 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.

Classes ‘tbl_df’, ‘tbl’ and 'data.frame':	1728 obs. of  8 variables:
 $ ID      : int  1 2 3 4 5 6 7 8 9 10 ...
 $ Fiyat   : Factor w/ 4 levels "Düşük","Orta",..: 4 4 4 4 4 4 4 4 4 4 ...
 $ Bakim   : Factor w/ 4 levels "Düşük","Orta",..: 4 4 4 4 4 4 4 4 4 4 ...
 $ Kapi    : Factor w/ 4 levels "5 ve Yukarı",..: 2 2 2 2 2 2 2 2 2 2 ...
 $ Kisi    : Factor w/ 3 levels "5 ve Yukarı",..: 2 2 2 2 2 2 2 2 2 3 ...
 $ Bagaj   : Factor w/ 3 levels "Büyük","Orta",..: 3 3 3 2 2 2 1 1 1 3 ...
 $ Guvenlik: Factor w/ 3 levels "Yüksek","Orta",..: 3 2 1 3 2 1 3 2 1 3 ...
 $ Karar   : Factor w/ 4 levels "Kabul","İyi",..: 3 3 3 3 3 3 3 3 3 3 ...
Veri setindeki eksik gözlemlerin 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.

 ID    Fiyat    Bakim     Kapi     Kisi    Bagaj Guvenlik    Karar 
  0        0        0        0        0        0        0        0 
Değişkenler arasındaki korelasyon
Kategorik değişkenlerin korelasyon katsayılarını hesaplamak için yazılan R kod bloğu aşağıdadır. Değişkenler arasındaki korelasyonu hesaplamak için Kikare testi kullanılmıştır. Bunun nedeni korelasyon katsayısı hesaplanacak her iki değişkenin de nitel ve nominal olmasından kaynaklanmaktadır. Korelasyon katsayısı hesaplanacak değişkenlerden biri ordinal (sıralı) olsaydı bu durumda Spearman korelasyon (SpearmanRho) katsayısının hesaplanması gerekecekti. Diğer taraftan, eğer her iki değişken nicel (sürekli ve kesikli) olsaydı bu durumda Pearson korelasyon katsayısını hesaplayacaktık.

p<-data.frame(lapply(df1[,-c(1,8)], function(x) chisq.test(table(x,df1$Karar), simulate.p.value = TRUE)$p.value))
pvalue<-p %>% as_tibble() %>% pivot_longer(cols = Fiyat:Guvenlik, names_to="Degisken", values_to = "p") %>% mutate(Sonuc=ifelse(p<0.05,"Anlamlı", "Anlamlı Değil")) %>% mutate_if(is.numeric, round, 4)
chi<-data.frame(lapply(df1[,-c(1,8)], function(x) chisq.test(table(x,df1$Karar), simulate.p.value = TRUE)$statistic))
chivalue<-chi %>% as_tibble() %>% pivot_longer(cols = Fiyat:Guvenlik, names_to="Degisken", values_to = "Kikare Test İstatistiği")%>% mutate_if(is.numeric, round, 2)
formattable(cbind(chivalue, pvalue[,-1]))
Yukarıdaki R kod bloğunun çalıştırılmasından sonra elde edilen korelasyon katsayıları aşağıdaki tabloda verilmiştir.
Veri setinin eğitilecek ve test setine ayrılması

set.seed(1)
#Eğitilecek veri seti (training set)
train1 <- df1 %>% sample_frac(.70)
train1
#Test edilecek veri seti
test1  <- anti_join(df1, train1, by = 'ID')#Anti join fonksiyonu eşleşmeyen kayıtları yani geri kalan kayıtları getirir ve onları test setine atar.
test1
Model 1
1 nolu modelin oluşturulması

model1<-randomForest(Karar ~ ., train1[,-1])
model1
summary(model1)
plot(model1, main="Model 1: Rastgele Orman (RF) Algoritmasının Hata Oranı")
Yukarıdaki kod bloğunun oluşturulmasından sonra çizilen 1 nolu modelin grafiği aşağıda verilmiştir. Bu grafik rastgele orman modelinin sınıf hata oranlarını göstermektedir. Ağaç sayısı arttıkça hata oranı sıfıra yaklaşır.
1 nolu modeldeki değişkenlerin önem düzeyleri

k<-importance(model1)
k<-tibble(Değişken=as.vector(row.names(k)), Ortalama_Gini_Katsayısı=as.vector(importance(model1)))%>%arrange(desc(Ortalama_Gini_Katsayısı))
formattable(k)
ggplot(k, aes(x=Ortalama_Gini_Katsayısı, y = Değişken, label=round(Ortalama_Gini_Katsayısı,2)))+
   geom_point()+
    xlab("Ortalama Gini Katsayısı")+
    ylab("Değişken")+
    geom_text(vjust = 0, nudge_y = 0.1)+
    theme_hc()
Yukarı kod bloğunun çalıştırılmasından sonra elde edilen modeldeki değişkenlerin önem düzeyleri ortalama gini katsayısına göre büyükten küçüğe doğru aşağıdaki tabloda verilmiştir.
Yukarı kod bloğunun çalıştırılmasından sonra elde edilen modeldeki değişkenlerin önem düzeylerine ilişkin grafik ise aşağıda verilmiştir.
Tahmin edilen değerler ile gözlem değerlerinin karşılaştırılması

pred1<-predict(model1, test1)
karsilastirma<-tibble(Gercek=test1$Karar, Tahmin=pred1)
#ilk ve son 10 tahmin değerini gerçek değerle karşılaştırma 
ilk10<-head(karsilastirma, 10) %>% rename(Gercekİlk_10=Gercek, Tahminİlk_10=Tahmin)
son10<-tail(karsilastirma, 10) %>% rename(GercekSon_10=Gercek, 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 değerleri gerçekleşen 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ı

pred1<-predict(model1, test1)
karsilastirma<-tibble(Gercek=test1$Karar, Tahmin=pred1)
#alternatif cm ve grafik
cm <- karsilastirma %>%
  conf_mat(Gercek, Tahmin)
cm
autoplot(cm, type = "heatmap")
Yukarıdaki R kod bloğunun çalıştırılmasından sonra elde edilen karışıklık matrisi aşağıda verilmiştir.

     Truth
Prediction Kabul İyi Red Çok İyi
   Kabul     118   1   4       1
   İyi         1  22   2       0
   Red         7   0 345       0
   Çok İyi     0   4   0      13
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 parametreleri
Kurulan 1 nolu modele ait hata parametrelerinin elde edilmesine yönelik yazılan R kod bloğu aşağıda verilmiştir.

cm<-confusionMatrix(karsilastirma$Tahmin, karsilastirma$Gercek)
cm
Yukarıdaki R kod bloğunun çalıştırılmasından sonra 1 nolu modele ait hata parametre değerleri aşağıda verilmiştir.

Confusion Matrix and Statistics
          Reference
Prediction Kabul İyi Red Çok İyi
   Kabul     118   1   4       1
   İyi         1  22   2       0
   Red         7   0 345       0
   Çok İyi     0   4   0      13
Overall Statistics
                                         
               Accuracy : 0.9614         
                 95% CI : (0.941, 0.9763)
    No Information Rate : 0.6776         
    P-Value [Acc > NIR] : < 2.2e-16      
                                         
                  Kappa : 0.9192         
                                         
 Mcnemar's Test P-Value : NA             
Statistics by Class:
                     Class: Kabul Class: İyi Class: Red Class: Çok İyi
Sensitivity                0.9365    0.81481     0.9829        0.92857
Specificity                0.9847    0.99389     0.9581        0.99206
Pos Pred Value             0.9516    0.88000     0.9801        0.76471
Neg Pred Value             0.9797    0.98986     0.9639        0.99800
Prevalence                 0.2432    0.05212     0.6776        0.02703
Detection Rate             0.2278    0.04247     0.6660        0.02510
Detection Prevalence       0.2394    0.04826     0.6795        0.03282
Balanced Accuracy          0.9606    0.90435     0.9705        0.96032
Bağımlı değişken kategorilerine göre sınıflandırma metrikleri

class<-cm$byClass#sınıfa göre hata oranları
class<-class %>% as_tibble(class) %>% add_column(Class = c("Kabul", "İyi", "Red", "Çok İyi"), .before = "Sensitivity")
class
class1<-class[, c(1, 2,3,6, 7, 8)]
pivot<-class1 %>% pivot_longer(-Class, names_to = "Parameters", values_to = "Değer")
ggplot(pivot, aes(x="", y = Değer, fill = Class))+
geom_bar(position="stack", stat="identity")+
scale_fill_viridis(discrete = T, option = "E")+
facet_grid(Class~  Parameters)+
xlab("")+
labs(fill = "Kategori")
Yukarıdaki R kod bloğunun çalıştırılmasından sonra elde edilen bağımlı değişken kategorilerine göre sınıflandırma metrikleri aşağıdaki grafikte verilmiştir.
Çapraz performans testi (Cross validation test)

set.seed(124)
cv<- performanceEstimation(
  PredTask(Karar ~ ., df1[,-1]),
    workflowVariants(learner=("randomForest")),
 EstimationTask(metrics = c("acc","err"),
                method = CV(nReps = 1, nFolds = 10)))
summary(cv)
plot(cv)
Yukarıdaki R kod bloğunun çalıştırılmasından sonra 1 nolu modele ait elde edilen performans parametre değerleri aşağıda verilmiştir.

== Summary of a  Cross Validation Performance Estimation Experiment ==
Task for estimating  acc,err  using
 1 x 10 - Fold Cross Validation
	 Run with seed =  1234 
* Predictive Tasks ::  df1[, -1].Karar
* Workflows  ::  randomForest 
-> Task:  df1[, -1].Karar
  *Workflow: randomForest 
               acc         err
avg     0.96860465 0.031395349
std     0.01980161 0.019801612
med     0.96802326 0.031976744
iqr     0.03052326 0.030523256
min     0.94186047 0.005813953
max     0.99418605 0.058139535
invalid 0.00000000 0.000000000
Yukarıdaki R kod bloğunun çalıştırılmasından sonra 1 nolu modele ait elde edilen performans parametre değerleri aşağıdaki grafikte verilmiştir.
Yeniden örnekleme (bootstrapping) perfomans kontrolü testi

set.seed(1200)
bootstrap <- performanceEstimation(
  PredTask(Karar ~ ., df1[,-1]),
    workflowVariants(learner=("randomForest")),
  EstimationTask(metrics=c("err", "acc"),method=Bootstrap(nReps=100)))
summary(bootstrap)
topPerformers(bootstrap)
plot(bootstrap)
Yukarıdaki R kod bloğunun çalıştırılmasından sonra 1 nolu modele ait elde edilen performans parametre değerleri aşağıda verilmiştir.

== Summary of a  Bootstrap Performance Estimation Experiment ==
Task for estimating  err,acc  using
100  repetitions of  e0  Bootstrap experiment
	 Run with seed =  1234 
* Predictive Tasks ::  df1[, -1].Karar
* Workflows  ::  randomForest 
-> Task:  df1[, -1].Karar
  *Workflow: randomForest 
                err         acc
avg     0.039839321 0.960160679
std     0.008783018 0.008783018
med     0.039563417 0.960436583
iqr     0.010807524 0.010807524
min     0.020408163 0.938871473
max     0.061128527 0.979591837
invalid 0.000000000 0.000000000
Yukarıdaki R kod bloğunun çalıştırılmasından sonra 1 nolu modele ait elde edilen performans parametre değerleri aşağıda verilmiştir.
Model 2
2 nolu modelin oluşturulması
2 nolu modelde randomForest() içerisinde ntree parametresi büyütülecek ağaç sayısını göstermektedir. Yazılmadığında otomatik (default) olarak 500 alınmaktadır. Bu sayı çok küçük bir sayıya ayarlanmamalıdır. Ağaç sayısı artıkça kurulan modelde hata oranı azalmaktadır. Fonksiyon içerisinde yer verilen mtyr parametresi ise her bir alt bölünmede tesadüfi bir şekilde örneklenen değişkenlerin sayısını göstermektedir. Fonksiyon içerisinde yer verilen importance parametresi ise değerlendirilecek değişkenlerin önem düzeyini göstermektedir.

model2 <- randomForest(Karar ~ ., train1[,-1], ntree = 500, mtry = 6, importance = TRUE)
model2
summary(model2)
plot(model2, main="Model 1: Rastgele Orman (RF) Algoritmasının Hata Oranı")
Yukarıdaki kod bloğunun oluşturulmasından sonra kurulan 2 nolu modele ait sınılandırma ve hata oranı aşağıda verilmiştir.

Call:
 randomForest(formula = Karar ~ ., data = train1[, -1], ntree = 500,      mtry = 6, importance = TRUE) 
               Type of random forest: classification
                     Number of trees: 500
No. of variables tried at each split: 6
        OOB estimate of  error rate: 1.32%
Confusion matrix:
        Kabul İyi Red Çok İyi class.error
Kabul     250   4   2       2  0.03100775
İyi         0  42   0       0  0.00000000
Red         6   1 852       0  0.00814901
Çok İyi     1   0   0      50  0.01960784
Yukarıdaki kod bloğunun oluşturulmasından sonra çizilen 2 nolu modelin grafiği aşağıda verilmiştir. Bu grafik rastgele orman modelinin sınıf hata (cevap değişkeni) oranlarını göstermektedir. Ağaç sayısı arttıkça hata oranı sıfıra yaklaşır.
2 nolu modeldeki değişkenlerin önem düzeyleri

k<-importance(model2)
ok<-k%>% as_tibble() 
ok<-ok[, c(5,6)]
ok
ok1<-tibble(Değişken=as.vector(row.names(k)), Ortalama_Doğruluk=ok$MeanDecreaseAccuracy,Ortalama_Gini=ok$MeanDecreaseGini )%>%mutate_if(is.numeric, round, 2)%>% arrange(desc(Ortalama_Gini))
formattable(ok1)
ogk<-ggplot(ok1, aes(x=Ortalama_Gini, y = Değişken, label=round(Ortalama_Gini,2)))+
   geom_point(color="red")+
    xlab("Ortalama Gini")+
    ylab("Değişken")+
    geom_text(vjust = 0, nudge_y = 0.1)
odk<-ggplot(ok1, aes(x=Ortalama_Doğruluk, y = Değişken, label=round(Ortalama_Doğruluk,2)))+
   geom_point(color="blue")+
    xlab("Ortalama Doğruluk")+
    ylab("Değişken")+
    geom_text(vjust = 0, nudge_y = 0.1)
ggarrange(ogk, odk, nrow=2)
Yukarı kod bloğunun çalıştırılmasından sonra elde edilen modeldeki değişkenlerin önem düzeyleri ortalama gini katsayısına göre büyükten küçüğe doğru aşağıdaki tabloda verilmiştir.
Yukarı kod bloğunun çalıştırılmasından sonra elde edilen modeldeki değişkenlerin önem düzeylerine ilişkin grafik ise aşağıda verilmiştir.
Tahmin edilen değerler ile gözlem değerlerinin karşılaştırılması

pred1<-predict(model2, test1)
karsilastirma2<-tibble(Gercek=test1$Karar, Tahmin=pred2)
#ilk ve son 10 tahmin değerini gerçek değerle karşılaştırma 
ilk10<-head(karsilastirma2, 10) %>% rename(Gercekİlk_10=Gercek, Tahminİlk_10=Tahmin)
son10<-tail(karsilastirma2, 10) %>% rename(GercekSon_10=Gercek, TahminSon_10=Tahmin)
formattable(cbind(Id=seq(1,10),ilk10, son10))
Yukarıdaki R kod bloğunun çalıştırılmasından sonra 2 nolu modelden elde edilen ilk ve son 10 sınıflandırma değerleri gerçekleşen 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ı

pred2<-predict(model2, test1)
karsilastirma<-tibble(Gercek=test1$Karar, Tahmin=pred2)
#alternatif cm ve grafik
cm <- karsilastirma %>%
  conf_mat(Gercek, Tahmin)
cm
autoplot(cm, type = "heatmap")
Yukarıdaki R kod bloğunun çalıştırılmasından sonra elde edilen karışıklık matrisi aşağıda verilmiştir.

 Truth
Prediction Kabul İyi Red Çok İyi
   Kabul     119   3   2       0
   İyi         0  24   2       0
   Red         6   0 347       0
   Çok İyi     1   0   0      14
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 parametreleri
Kurulan 1 nolu modele ait hata parametrelerinin elde edilmesine yönelik yazılan R kod bloğu aşağıda verilmiştir.

cm<-confusionMatrix(karsilastirma2$Tahmin, karsilastirma2$Gercek)
cm
Yukarıdaki R kod bloğunun çalıştırılmasından sonra 1 nolu modele ait hata parametre değerleri aşağıda verilmiştir.

Confusion Matrix and Statistics
          Reference
Prediction Kabul İyi Red Çok İyi
   Kabul     119   3   2       0
   İyi         0  24   2       0
   Red         6   0 347       0
   Çok İyi     1   0   0      14
Overall Statistics
                                          
               Accuracy : 0.973           
                 95% CI : (0.9551, 0.9851)
    No Information Rate : 0.6776          
    P-Value [Acc > NIR] : < 2.2e-16       
                                          
                  Kappa : 0.9433          
                                          
 Mcnemar's Test P-Value : NA              
Statistics by Class:
                     Class: Kabul Class: İyi Class: Red Class: Çok İyi
Sensitivity                0.9444    0.88889     0.9886        1.00000
Specificity                0.9872    0.99593     0.9641        0.99802
Pos Pred Value             0.9597    0.92308     0.9830        0.93333
Neg Pred Value             0.9822    0.99390     0.9758        1.00000
Prevalence                 0.2432    0.05212     0.6776        0.02703
Detection Rate             0.2297    0.04633     0.6699        0.02703
Detection Prevalence       0.2394    0.05019     0.6815        0.02896
Balanced Accuracy          0.9658    0.94241     0.9763        0.99901
Bağımlı değişken kategorilerine göre sınıflandırma metrikleri

cm<-confusionMatrix(karsilastirma2$Tahmin, karsilastirma2$Gercek)
cm
class<-cm$byClass#sınıfa göre hata oranları
class<-class %>% as_tibble(class) %>% add_column(Class = c("Kabul", "İyi", "Red", "Çok İyi"), .before = "Sensitivity")
class
class1<-class[, c(1, 2,3,6, 7, 8)]
pivot<-class1 %>% pivot_longer(-Class, names_to = "Parameters", values_to = "Değer")
ggplot(pivot, aes(x="", y = Değer, fill = Class))+
geom_bar(position="stack", stat="identity")+
scale_fill_viridis(discrete = T, option = "E")+
facet_grid(Class~  Parameters)+
xlab("")+
labs(fill = "Kategori")
Yukarıdaki R kod bloğunun çalıştırılmasından sonra elde edilen bağımlı değişken kategorilerine göre sınıflandırma metrikleri aşağıdaki grafikte verilmiştir.
Çapraz performans testi (Cross validation test)

set.seed(12)
cv<- performanceEstimation(
  PredTask(Karar ~ ., df1[,-1]),
    workflowVariants(learner="randomForest", learner.pars=list(ntree = 500, mtry = 6, importance = TRUE)),
 EstimationTask(metrics = c("acc","err"),
                method = CV(nReps = 1, nFolds = 10)))
summary(cv)
plot(cv)
Yukarıdaki R kod bloğunun çalıştırılmasından sonra 2 nolu modele ait elde edilen performans parametre değerleri aşağıda verilmiştir.

== Summary of a  Cross Validation Performance Estimation Experiment ==
Task for estimating  acc,err  using
 1 x 10 - Fold Cross Validation
	 Run with seed =  1234 
* Predictive Tasks ::  df1[, -1].Karar
* Workflows  ::  randomForest 
-> Task:  df1[, -1].Karar
  *Workflow: randomForest 
               acc         err
avg     0.98255814 0.017441860
std     0.01162791 0.011627907
med     0.98837209 0.011627907
iqr     0.02180233 0.021802326
min     0.96511628 0.005813953
max     0.99418605 0.034883721
invalid 0.00000000 0.000000000
Yukarıdaki R kod bloğunun çalıştırılmasından sonra 2 nolu modele ait elde edilen performans parametre değeri aşağıdaki grafikte verilmiştir.
Yeniden örnekleme (bootstrapping) perfomans kontrolü testi

set.seed(1234)
bootstrap <- performanceEstimation(
  PredTask(Karar ~ ., df1[,-1]),
    workflowVariants(learner="randomForest", learner.pars=list(ntree = 500, mtry = 6, importance = TRUE)),
  EstimationTask(metrics=c("err", "acc"),method=Bootstrap(nReps=100)))
summary(bootstrap)
topPerformers(bootstrap)
plot(bootstrap)
Yukarıdaki R kod bloğunun çalıştırılmasından sonra 2 nolu modele ait elde edilen performans parametre değerleri aşağıda verilmiştir.

== Summary of a  Bootstrap Performance Estimation Experiment ==
Task for estimating  err,acc  using
100  repetitions of  e0  Bootstrap experiment
	 Run with seed =  1234 
* Predictive Tasks ::  df1[, -1].Karar
* Workflows  ::  randomForest 
-> Task:  df1[, -1].Karar
  *Workflow: randomForest 
                err         acc
avg     0.024709802 0.975290198
std     0.007599525 0.007599525
med     0.025197100 0.974802900
iqr     0.011384685 0.011384685
min     0.004680187 0.952978056
max     0.047021944 0.995319813
invalid 0.000000000 0.000000000
Yukarıdaki R kod bloğunun çalıştırılmasından sonra 2 nolu modele ait elde edilen performans parametre değerleri aşağıda verilmiştir.
Sonuç
Bu çalışmada sınıflandırma (classification) probleminin çözümüne yönelik Rastgele Orman (RF) algoritması kullanılarak ayrıntılı deneysel bir çalışma yapılmıştır. Ortaya konulan bulgular, sınıflandırma probleminin RF algoritması tarafından çok başarılı bir şekilde, diğer bir ifadeyle çok yüksek bir doğruluk oranıyla çözüme kavuşturulduğu görülmektedir.
Her iki Rastgele Orman modeli (Model 1 ve 2) performans ölçüleri açısından karşılaştırıldığında öne çıkan bulgular şöyledir: Kurulan 2. model 1. modele göre bağımlı değişken olan “Karar” değişkenini daha iyi tahmin etmektedir. Model 2’de doğruluk (accuracy) oranı performans ölçüm metotlarından capraz kontrol (cross validation)’de % 98,26 iken, model 1’de bu oran % 96,86’da kalmıştır. Aşağıdaki tabloda her iki modelin hata ve doğruluk oranları verilmiştir. Performans ölçüm metotlarından yeniden örnekleme (bootstrapping) kullanıldığında model 2’den üretilen doğruluk oranı % 97,53 (yaklaşık % 98) iken bu oran model 1’de % 96,02’dir. Tabloda belirtilen hata (error) oranı 1-Doğruluk eşitliğinden hesaplanmaktadır. Buradan doğruluk oranı artıkça hata oranının azalacağı anlamı çıkarılması gerekir.
Yukarıdaki tablonun elde edilmesine yönelik yazılan R kod bloğu aşağıdadır. Aşağıdaki kod bloğunda aynı zamanda yukarıdaki tabloda verilen parametreler aşağıda yazılan kod bloğu aracılığıyla grafiğe taşınmıştır.

model1<-tibble(Model=rep("Model 1", 4), Performans_Metodu= c(rep("Capraz Kontrol",2), rep("Yeniden Örnekleme",2)), Parametre=rep(c("Doğruluk", "Hata Oranı"),2), Değer=c(round(0.96860465*100,2),round(0.03139535*100,2), round(0.960160679*100,2), round(0.039839321*100,2)))
         
model2<-tibble(Model=rep("Model 2", 4), Performans_Metodu= c(rep("Capraz Kontrol",2), rep("Yeniden Örnekleme",2)), Parametre=rep(c("Doğruluk", "Hata Oranı"),2), Değer=c(round(0.98255814*100,2),round(0.017441860*100,2), round(0.975290198*100,2), round(0.024709802*100,2)))
modeltum<-bind_rows(model1, model2)
formattable(modeltum)
  ggplot(modeltum, aes(x=Parametre, y = Değer, fill = Model))+
  geom_bar(position="stack", stat="identity")+
  scale_fill_viridis(discrete = T, option = "C")+
  facet_grid(Performans_Metodu~ Model)+
  xlab("Parametre")+
  ylab("Değer (%)")
  labs(fill = "Kategori")
Yukarıdaki R kod bloğunun çalıştırılmasından sonra kurulan her iki Rastgele Orman (RF) modeli hata metrikleri açısından aşağıdaki grafikte karşılaştırılmıştır.
Yapılan bu çalışmanın özellikle veri bilimi (data science) ile ilgilenen akademi ve saha çalışanlarına önemli bir katkı sunacağı 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://archive.ics.uci.edu/ml/machine-learning-databases/car/
https://www.r-project.org/
https://www.shirin-glander.de/2018/10/ml_basics_rf/
Breiman, L. Random Forests. Machine Learning 45, 5–32 (2001). https://doi.org/10.1023/A:1010933404324
https://github.com/ltorgo/performanceEstimation
An evaluation of Guided Regularized Random Forest for classification and regression tasks in remote sensing. 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).
Random Forest ensembles for detection and prediction of Alzheimer’s disease with a good between-cohort robustness. NeuroImage: Clinical Volume 6, 2014, Pages 115-125. https://doi.org/10.1016/j.nicl.2014.08.023
Breiman, L (2002), “Manual On Setting Up, Using, And Understanding Random Forests V3.1”,
https://www.stat.berkeley.edu/~breiman/Using_random_forests_V3.1.pdf
https://www.stat.berkeley.edu/~breiman/RandomForests/
https://stats.idre.ucla.edu/r/library/r-library-introduction-to-bootstrapping/
McHugh M. L. (2012). Interrater reliability: the kappa statistic. Biochemia medica, 22(3), 276–282.
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://www.theanalysisfactor.com/what-is-an-roc-curve/
https://developers.google.com/machine-learning/crash-course/classification/roc-and-auc
Bunu paylaş:
Facebook
Twitter
Reddit
Telegram
E-posta
Yazdır
Daha fazla
LinkedIn
Tumblr
Pinterest
Pocket
WhatsApp
Skype
Bunu beğen:
Beğen Yükleniyor...
Tevfik BULUT	Genel	Yorum bırakın 14 Mayıs 2020 23 Mayıs 2020 19 Minutes	
Son Yazılar
İnovasyonun Ülke Ekonomileri Açısından Anlam ve Önemi?
R’da Shiny Üzerinde Binom Olasılık Dağılım Simülasyonu: Binomial Probability Distribution Simulation on Shiny in R
R’da Shiny Üzerinde Normal Dağılım Simülasyonu İnşa Etme : Building a Normal Distribution Simulation on Shiny in R
R’da Dinamik Ağaç Diyagramı ve Dinamik Grafik Oluşturma Üzerine Vaka Çalışmaları: Case Studies on Dynamic Tree Diagram and Dynamic Graphing in R
Türkiye’de Girişimler, Bilişim Teknolojileri Kullanımında Ne Durumda?
Word Dokümanlarından Metin Çıkarma: Extracting Text from Word Documents
Şifre Kombinasyonlarının Kırılma Olasılıkları: Cracking Probability of Password Combinations
Küresel İnovasyon Endeksi 2021 Yılı Raporu ve Türkiye
Bulut Performans Endeksi [BE] Simülasyonu
R’da Quandl Kütüphanesi İle Veri Çekme ve Dinamik Grafik Oluşturma: Extracting Data with Quandl Library and Creating Dynamic Charts in R
Popüler Yazılar & Sayfalar
Şans Oyunları Perspektifinden Olasılık : Probability from Perspective of the Chance Games	
Z Tablosuna Göre Güven Aralığının Hesaplanmasına Yönelik Temel Bir Simülasyon Çalışması: A Basic Simulation Study for Calculating Confidence Interval by Z Table	
Güvenilirlik Analizi (Reliability Analysis) ve İç Tutarlılık (Internal Consistency)	
Şans Oyunları Perspektifinden Olasılık II: Probability from Perspective of the Chance Games II	
R'da Binary Lojistik Regresyon Üzerine Bir Vaka Çalışması: A Case Study on Binary Logistic Regression in R	
R'da Multinominal Lojistik Regresyon Üzerine Bir Vaka Çalışması: A Case Study on Multinominal Logistic Regression in R	
R'da Normal Dağılım Dönüşümleri Üzerine Vaka Çalışmaları: Case Studies on Normal Distribution Transformations in R	
R'da Poisson ve Negatif Binom Regresyon Yöntemleri Üzerine Bir Vaka Çalışması: A Case Study on Poisson and Negative Binomial Regression Methods in R	
Ordinal Lojistik Regresyon Üzerine Bir Vaka Çalışması: A Case Study on Ordinal Logistic Regression	
Negatif Binom Olasılık Dağılımı Üzerine Bir Vaka Çalışması: A Case Study on Negative Binomial Probability Distribution	
Arşiv
Arşiv Ay Seçin Ekim 2021 (7) Eylül 2021 (2) Ağustos 2021 (5) Temmuz 2021 (1) Haziran 2021 (2) Mayıs 2021 (2) Nisan 2021 (2) Şubat 2021 (4) Ocak 2021 (5) Aralık 2020 (2) Kasım 2020 (3) Ekim 2020 (2) Eylül 2020 (5) Ağustos 2020 (14) Temmuz 2020 (8) Haziran 2020 (6) Mayıs 2020 (13) Nisan 2020 (9) Mart 2020 (11) Şubat 2020 (4) Ocak 2020 (5) Aralık 2019 (4) Kasım 2019 (3) Ekim 2019 (3) Eylül 2019 (8) Ağustos 2019 (1) Mayıs 2019 (1) Şubat 2019 (2) Aralık 2018 (1) Eylül 2018 (3) Ağustos 2018 (5) Temmuz 2018 (1) Mayıs 2018 (2) Nisan 2018 (1) Ekim 2017 (4) Temmuz 2017 (3) Haziran 2017 (2) Mayıs 2017 (1) Ocak 2017 (2)
Reklamlar
Yapay Zeka (AI) Trendleri
Best Practices for Building the AI Development Platform in Government 28 Ekim 2021
By John P. Desmond, AI Trends Editor The AI stack defined by Carnegie Mellon University is fundamental to the approach being taken by the US Army for its AI development platform efforts, according to Isaac Faber, Chief Data Scientist at the US Army AI Integration Center, speaking at the AI World Government event held in-person and virtually […]
Allison Proffitt
Advance Trustworthy AI and ML, and Identify Best Practices for Scaling AI 28 Ekim 2021
By John P. Desmond, AI Trends Editor Advancing trustworthy AI and machine learning to mitigate agency risk is a priority for the US Department of Energy (DOE), and identifying best practices for implementing AI at scale is a priority for the US General Services Administration (GSA). That’s what attendees learned in two sessions at the AI […]
Allison Proffitt
Promise and Perils of Using AI for Hiring: Guard Against Data Bias 28 Ekim 2021
By AI Trends Staff While AI in hiring is now widely used for writing job descriptions, screening candidates, and automating interviews, it poses a risk of wide discrimination if not implemented carefully. That was the message from Keith Sonderling, Commissioner with the US Equal Opportunity Commision, speaking at the AI World Government event held live an […]
Allison Proffitt
Predictive Maintenance Proving Out as Successful AI Use Case 28 Ekim 2021
By John P. Desmond, AI Trends Editor More companies are successfully exploiting predictive maintenance systems that combine AI and IoT sensors to collect data that anticipates breakdowns and recommends preventive action before break or machines fail, in a demonstration of an AI use case with proven value. This growth is reflected in optimistic market for […]
Allison Proffitt
Novelty In The Game Of Go Provides Bright Insights For AI And Autonomous Vehicles 28 Ekim 2021
By Lance Eliot, the AI Trends Insider We already expect that humans to exhibit flashes of brilliance. It might not happen all the time, but the act itself is welcomed and not altogether disturbing when it occurs. What about when Artificial Intelligence (AI) seems to display an act of novelty? Any such instance is bound to get our attention; […] […]
Allison Proffitt
Getting Government AI Engineers to Tune into AI Ethics Seen as Challenge 21 Ekim 2021
By John P. Desmond, AI Trends Editor Engineers tend to see things in unambiguous terms, which some may call Black and White terms, such as a choice between right or wrong and good and bad. The consideration of ethics in AI is highly nuanced, with vast gray areas, making it challenging for AI software engineers to […]
Allison Proffitt
Digital Natives Seen Having Advantages as Part of Government AI Engineering Teams 21 Ekim 2021
By John P. Desmond, AI Trends Editor AI is more accessible to young people in the workforce who grew up as ‘digital natives’ with Alexa and self-driving cars as part of the landscape, giving them expectations grounded in their experience of what is possible. That idea set the foundation for a panel discussion at AI World […]
Allison Proffitt
How Accountability Practices Are Pursued by AI Engineers in the Federal Government 21 Ekim 2021
By John P. Desmond, AI Trends Editor Two experiences of how AI developers within the federal government are pursuing AI accountability practices were outlined at the AI World Government event held virtually and in-person this week in Alexandria, Va. Taka Ariga, chief data scientist and director at the US Government Accountability Office, described an AI […]
Allison Proffitt
Startup: AssemblyAI Represents New Generation Speech Recognition 21 Ekim 2021
By AI Trends Staff Advances in the AI behind speech recognition are driving growth in the market, attracting venture capital and funding startups, posing challenges to established players. The growing acceptance and use of speech recognition devices are driving the market, which according to an estimate by Meticulous Research is expected to reach $26.8 b […]
Allison Proffitt
Pursuit of Autonomous Cars May Pose Risk of AI Tapping Forbidden Knowledge 21 Ekim 2021
By Lance Eliot, the AI Trends Insider Are there things that we must not know? This is an age-old question. Some assert that there is the potential for knowledge that ought to not be known. In other words, there are ideas, concepts, or mental formulations that should we become aware of that knowledge it could be […]
Allison Proffitt
Hit Sayısı
81.195 Hit
Aralık 2021
P
S
Ç
P
C
C
P
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
« Eki
Dil Seçimi
PAYLAŞ
tevfikbulut61 kişisinin Facebook üzerindeki profilini görüntüle
@tevfik_bulut kişisinin Twitter üzerindeki profilini görüntüle
tevfik1461 kişisinin Instagram üzerindeki profilini görüntüle
RSS - Yazılar
Follow Tevfik Bulut on WordPress.com
Etiketler
4. Sanayi Devrimi Accuracy AI Alış Kuru Artificial Intelligence Basit Tesadüfi Örnekleme Bernoulli Olasılık Dağılımı Binomial Probability Distribution Binom Olasılık Dağılımı CDF Confidence Interval Confusion Matrix Coronavirus Currency Data Mining Decision Tree Dolar Doğruluk Doğruluk Oranı Döviz Dünya Sağlık Örgütü EDA Ensembling Epidemi Epidemiyology Epidemiyoloji Exploratory Data Analysis Exploratory Data Analysis (EDA) F1 Forecast Güven Aralığı Güven Düzeyi Hata Karışıklık Parametresi Keşifsel Veri Analizi Kitle Olasılık Fonksiyonu Koronavirüs Koronavirüs Salgını Kümülatif Olasılık Dağılımı Mean Absolute Percentage Error Olasılık Olasılık Dağılımları Olasılıklı Örneklem Organize Sanayi Bölgesi OSB Pandemi Point Estimation Point Forecast Prevalance Prevalans Probability Distribution Probability Mass Distribution Probability Sampling R Recall Salgın Sağlık Bakanlığı Simple Random Sampling Simple Random Sampling withoust Replacement Standard Normal Distrubition Tahmin TBATS Tekrarlı Seçim Topluluk öğrenme Torbalama TURKEY Türkiye Veri Madenciliği WHO Word Cloud World Health Organization Yapay Zeka ÇKKV Örneklem Örneklem Büyüklüğü
WordPress.com'da bir web sitesi veya blog oluşturun
Takip Et Takip Ediliyor
Tevfik Bulut	
Diğer 1.705 takipçiye katılın
Abone ol	
WordPress.com hesabınız var mı? Şimdi oturum açın.	
Tevfik Bulut	
Özelleştir
Takip Et Takip Ediliyor
Kaydolun
Giriş
Bu içeriği rapor et
Siteyi Okuyucuda görüntüle	
Abonelikleri Yönet
Bu şeridi gizle
Yorumlar Yükleniyor...
Yorum Yapın...
E-posta (Gerekli)
İsim (Gerekli)
İnternet sitesi
E-posta adresine gönder İsminiz E-posta Adresiniz
Vazgeç
Yazı gönderilemedi - e-posta adreslerinizi kontrol edin!	
E-posta kontrolü başarısız oldu, lütfen bir daha deneyin.	
Üzgünüm, blogunuz yazıları e-posta ile paylaşamıyor.	
Gizlilik ve Çerezler: Bu sitede çerez kullanılmaktadır. Bu web sitesini kullanmaya devam ederek bunların kullanımını kabul edersiniz.
Çerezlerin nasıl kontrol edileceği dahil, daha fazla bilgi edinmek için buraya bakın: Çerez Politikası	