Rastgele Orman Algoritması

Rastgele Orman, yaygın olarak kullanılan bir sınıflandırma ve regresyon algoritmasıdır. Sınıflandırma ve regresyon, makine öğreniminin en önemli yönleri olduğundan, Rastgele Orman Algoritmasının makine öğrenimindeki en önemli algoritmalardan biri olduğunu söylemek mümkündür.

Gözlemleri doğru bir şekilde sınıflandırma kapasitesi, belirli bir kullanıcının bir ürünü satın alıp almayacağını veya bir kredinin temerrüde düşüp düşmeyeceğini tahmin etmek gibi çeşitli iş uygulamaları için yararlıdır.

Bu ödevde, Rastgele orman sınıflandırıcısının gerçek hayattan bir örnekle nasıl çalıştığı ve Rastgele Orman’ın neden en etkili sınıflandırma algoritması olduğundan bahsedeceğiz. Rastgele Orman Algoritmasının temel bir tanımı ile başlayalım.

Rasgele orman algoritması belirli bir veri kümesinin çeşitli alt kümeleri üzerinde birkaç karar ağacı içeren ve bu veri kümesinin tahmin edilen doğruluğunu artırmak için ortalamayı alan bir sınıflandırıcıdır. Tek bir karar ağacına güvenmek yerine, rastgele orman her ağaçtan sonucu toplar ve tahminlerin çoğunluk oylarına dayalı olarak nihai çıktıyı bekler.

Bir gerçek hayat örneği ile algoritmayı daha da akılda kalıcı hale getirelim.

Ahmet’in bir yıllık tatilini nerede geçireceğine karar vermek için yardıma ihtiyacı vardır, bu yüzden onu en iyi tanıyanlardan tavsiye ister. İlk aradığı kişi, daha önceki seyahatlerinde sevdiği ve sevmediği şeyleri sorar. Gelen yanıtlara göre Ahmet’abazı önerilerde bulunur.

Bu bir karar ağacı algoritması örneğidir. Ahmet’in arkadaşı, Ahmet’in yanıtlarını kullanarak ne önermesi gerektiğine karar vermesine yardımcı olacak kurallar oluşturur.

Bunu takiben Ahmetgiderek daha fazla arkadaşından tavsiye istemeye başlar ve onlar da Ahmet’e bazı tavsiyeler çıkarabilecekleri çeşitli sorular sorarak yanıt verirler. Son olarak Ahmet, çoğu rastgele orman algoritmasında olduğu gibi kendisi için en çok tavsiye edilen yerleri seçer.

Aşağıda da bunun grafik olarak örneğini görebiliriz

knitr::include_graphics("1.jpeg")

#K En Yakın Komşu (K-NN)

K-En Yakın Komşu, Denetimli Öğrenme tekniğine dayanan en basit Makine Öğrenimi algoritmalarından biridir.

K-NN algoritması, yeni vaka/veri ile mevcut vakalar arasındaki benzerliği varsayar ve yeni vakayı mevcut kategorilere en çok benzeyen kategoriye yerleştirir. K-NN algoritması mevcut tüm verileri depolar ve yeni bir veri noktasını benzerliğe göre sınıflandırır. Bu, yeni veri ortaya çıktığında, K-NN algoritması kullanılarak iyi bir kategoriye kolayca sınıflandırılabileceği anlamına gelir. K-NN algoritması Regresyon için kullanılabileceği gibi Sınıflandırma için de kullanılabilir ancak çoğunlukla Sınıflandırma problemleri için kullanılır. K-NN parametrik olmayan bir algoritmadır, yani altta yatan veriler üzerinde herhangi bir varsayımda bulunmaz. Tembel öğrenen algoritma olarak da adlandırılır çünkü eğitim setinden hemen öğrenmez, bunun yerine veri setini saklar ve sınıflandırma sırasında veri seti üzerinde bir işlem gerçekleştirir. KNN algoritması eğitim aşamasında sadece veri kümesini saklar ve yeni veri aldığında, bu veriyi yeni veriye çok benzeyen bir kategoriye sınıflandırır.

Gerçek hayattan bir örnekle K-NN algoritmasıın daha yakından tanıyalım

Hayal edelim ki, bir meyve dükkanında çalışıyoruz ve müşterilerimizden biri bize bir meyve gösterip “Bu nedir?” diye soruyor. Ancak etiketi yok ve müşteri hangi meyve olduğunu bilmiyor. Biz de bu meyvenin türünü belirlemek istiyoruz .

İşte burada K-NN algoritması devreye girer. Dükkanımızda daha önce gördüğümüz meyvelerin bir listesi ve bu meyvelerin özellikleri (renk, şekil, büyüklük vb.) bulunmaktadır. Müşterinin gösterdiği meyvenin özelliklerini değerlendirip, en yakın komşularını (diğer meyveleri) inceleyerek bu meyvenin türünü tahmin edebiliriz.

Örneğin, müşterinin gösterdiği meyve kırmızı, yuvarlak K-NN algoritması bu meyveyi bir elma olarak sınıflandırabilir.

Bu durumda, k algoritmasında “k” değeri, kaç tane en yakın komşunun inceleneceğini belirler. Eğer k=3 ise, en yakın üç komşunun türleri incelenir ve çoğunluğun türü, tahmin edilen meyvenin türü olarak kabul edilir.

knitr::include_graphics("2.jpeg")

Doğrusal regresyon analizi, başka bir değişkenin değerine bağlı olarak bir değişkenin değerini tahmin etmek için kullanılır. Tahmin etmek istediğimiz değişken bağımlı değişken olarak adlandırılır. Diğer değişkenin değerini tahmin etmek için kullandığımız değişken ise bağımsız değişken olarak adlandırılır.

Bu analiz biçimi ile, bağımlı değişkenin değerini en iyi tahmin eden bir veya daha fazla bağımsız değişkeni içeren doğrusal denklemin katsayılarını tahmin ederiz. Doğrusal regresyon, tahmin edilen ve gerçek çıktı değerleri arasındaki tutarsızlıkları en aza indiren düz bir çizgiye veya yüzeye uyar. Bir dizi eşleştirilmiş veri için en uygun doğruyu keşfetmek için “en küçük kareler” yöntemini kullanan basit doğrusal regresyon hesaplayıcıları vardır. Daha sonra Y’den (bağımsız değişken) X’in (bağımlı değişken) değerini tahmin ederiz ayrıca doğrusal regresyon köklü bir istatistiksel prosedür olduğundan, doğrusal regresyon modellerinin özellikleri iyi anlaşılmıştır ve çok hızlı bir şekilde eğitilebilir.

Doğrusal regresyon, en sade açıklaması ile iki değişken arasındaki ilişkiyi analiz eden bir kuramdır. Bu kuramı reel hayatta fark etmeden kullandığımız birçok zaman vardır. Örneğin sizinle tanışan birisinin fiziksel özellikleri üzerinden kaç yaşında olduğunu tahminlemeniz de lineer regresyon örneği olarak sayılabilir. Doğrusal regresyonun asıl amacı, veri içerisindeki değişkenlerin arasında en iyi uyum çizgisini yakalamaktır. En iyi uyum çizgisi, toplam hatanın minimum olduğu senaryo olarak nitelendirilebilir. Hata ise, noktaların regresyon çizgisine olan mesafesine denir. Aşağıdaki grafikte bu açıklamanın bir örneğinin uygulanmış halini görebiliriz.

knitr::include_graphics("3.jpeg")

Yapay Sinir Ağı (YSA), insan beyninin sinir yapısından esinlenen bir makine öğrenme modelidir. Katmanlar halinde düzenlenmiş birbirine bağlı düğümlerden (nöronlar) oluşur. Veriler bu düğümler arasında akar, kalıpları öğrenmek ve tahminlerde bulunmak için bağlantıların ağırlıklarını ayarlar. YSA’lar görüntü tanıma, dil işleme ve karar verme gibi görevlerde üstünlük sağlayarak çeşitli alanlarda devrim yaratmaktadır.

Yapay sinir ağlarının (YSA) birincil işlevi, örüntüleri tanımalarını, tahminlerde bulunmalarını ve karmaşık sorunları çözmelerini sağlayacak şekilde verileri işlemek ve bunlardan öğrenmektir. YSA’lar insan beyninin sinir bağlantılarını taklit eder ve eğitim sırasında bağlantıların güçlerini (ağırlıklarını) ayarlayarak genelleme ve görüntü tanıma, dil işleme ve karar verme gibi görevleri yerine getirme yeteneklerini geliştirir.

Örneğin, bir yapay sinir ağı, görüntü tanıma uygulamalarında kullanılabilir. Bir güvenlik kamerasından elde edilen görüntülerde belirli nesneleri veya kişileri tanımak için bir YSA kullanabiliriz. Bu uygulama şu adımları takip eder: 1. Veri Toplama: Bir güvenlik kamerası tarafından kaydedilen binlerce görüntü. 2. Etiketleme: Görüntülerdeki nesnelerin veya kişilerin elle etiketlenmesi (örneğin, insanlar, arabalar, vs.). 3. Eğitim: Bir yapay sinir ağı, bu etiketlenmiş görüntülerle eğitilir. Ağ, belirli özellikleri (kenarlar, renkler, desenler) otomatik olarak öğrenir. 4. Tahmin: Eğitilen ağ, yeni ve etiketlenmemiş görüntülerdeki nesneleri tanımak için kullanılır. Örneğin, bir hırsızlık durumunda belirli bir kişiyi veya şüpheli bir durumu tespit edebilir.

Aşağıda bu modelin karmaşık bir yapısının görselleştirilmiş hali bulunmaktadır

knitr::include_graphics("4.jpeg")

#Gradyan Artırma

Gradyan artırma, bir tür makine öğrenimi artırma yöntemidir. Önceki modellerle birleştirildiğinde mümkün olan en iyi sonraki modelin genel tahmin hatasını en aza indirdiği sezgisine dayanır. Temel fikir, hatayı en aza indirmek için bu sonraki model için hedef sonuçları ayarlamaktır. Hedefler nasıl hesaplanır? Verilerdeki her bir vaka için hedef sonuç, o vakanın tahminini değiştirmenin genel tahmin hatasını ne kadar etkilediğine bağlıdır:

o Bir vakanın tahminindeki küçük bir değişiklik hatada büyük bir düşüşe neden oluyorsa, vakanın bir sonraki hedef sonucu yüksek bir değerdir. Yeni modelin hedeflerine yakın olan tahminleri hatayı azaltacaktır.

o Bir vaka için yapılan tahmindeki küçük bir değişiklik hatada hiçbir değişikliğe neden olmazsa, vakanın bir sonraki hedef sonucu sıfırdır. Bu tahminin değiştirilmesi hatayı azaltmaz.

Gradyan artırma adı, her vaka için hedef sonuçların tahmine göre hatanın gradyanına göre ayarlanması nedeniyle ortaya çıkmaktadır. Her yeni model, her bir eğitim vakası için olası tahminler uzayında tahmin hatasını en aza indiren yönde bir adım atar.

gerçek hayat uygulamalarında gradyan artırma algoritmaları, özellikle öğrenme süreçlerinde ve optimizasyon problemlerinde yaygın olarak kullanılır. Gradyan artırmayla iligli gerçek hayata yakınsayan Doğrusal Regresyon üzerinden bir örnek inceleyelim Gradyan artırma, doğrusal regresyon gibi modellerin eğitiminde kullanılır. Doğrusal regresyon, önceki sayfalarda da bahsettiğimiz gibi bir bağımlı değişkenin bağımsız değişkenlerle doğrusal bir ilişkisini modelleyen bir tekniktir. Örneğin, bir şirketin reklam harcamaları ile satışları arasındaki ilişkiyi anlamak istediğimizi düşünelim. Reklam harcamalarını x, satışları y olarak adlandıralım. Bir doğrusal regresyon modeli, reklam harcamaları ve satışlar arasındaki ilişkiyi şu formülle ifade edebilir: y=b0+b1⋅xy=b0+b1⋅x Burada, b0b0 kesim noktasını, b1b1 eğimi temsil eder. Eğitim aşamasında, bu katsayıları bulmak için bir kayıp fonksiyonu minimizasyonu yapılmalıdır. Gradyan artırma algoritması kullanılarak, kayıp fonksiyonunu minimize etmeye çalışabiliriz. Her adımda, kayıp fonksiyonunun gradyanına göre katsayıları güncelleyerek modeli optimize ederiz. Bu, reklam harcamaları ile satışlar arasındaki ilişkiyi en iyi şekilde yansıtan bir model elde etmemizi sağlar. Aşağıdaki grafikte, güncellenmiş modelin hatayı minimuma indirdiği görülmektedir.

knitr::include_graphics("5.jpeg")

Ayrıca gerçek hayatta bu tür modeller, pazarlama stratejilerini belirleme, reklam bütçelerini optimize etme, satış tahminleri yapma gibi birçok uygulamada kullanılmaktadır.

Veri setinin tanımı ve amacı

Veri setinin temel amacı, bu özelliklerin kullanılarak meme kanseri hücrelerinin iyi huylu (benign) veya kötü huylu (malignant) olup olmadığını sınıflandırmaktır. Yani, amacımız, makine öğrenimi modelleri kullanarak bu özelliklerin kombinasyonlarını değerlendirip, bir hücrenin iyi huylu veya kötü huylu olma olasılığını tahmin etmektir.

library(caret)
## Warning: package 'caret' was built under R version 4.2.3
## Loading required package: ggplot2
## Warning: package 'ggplot2' was built under R version 4.2.3
## Loading required package: lattice
library(pROC)
## Warning: package 'pROC' was built under R version 4.2.3
## Type 'citation("pROC")' for a citation.
## 
## Attaching package: 'pROC'
## The following objects are masked from 'package:stats':
## 
##     cov, smooth, var
wbcd <- read.csv("wisc_bc_data.csv", stringsAsFactors = FALSE)
wbcd <- wbcd[-1]

wbcd$diagnosis <- factor(wbcd$diagnosis, levels = c("B", "M"), labels = c("Benign", "Malignant"))

normalize <- function(x) { return ((x - min(x)) / (max(x) - min(x))) }
wbcd_n <- as.data.frame(lapply(wbcd[2:31], normalize))

wbcd_train <- wbcd_n[1:469, ]
wbcd_test <- wbcd_n[470:569, ]
wbcd_train_labels <- wbcd[1:469, 1]
wbcd_test_labels <- wbcd[470:569, 1]

set.seed(123) 
knn_model <- train(wbcd_train, wbcd_train_labels, method = "knn")

predictions <- predict(knn_model, newdata = wbcd_test)

print("Model: K En Yakın Komşu")
## [1] "Model: K En Yakın Komşu"
confusion_matrix <- confusionMatrix(predictions, wbcd_test_labels)
print(confusion_matrix)
## Confusion Matrix and Statistics
## 
##            Reference
## Prediction  Benign Malignant
##   Benign        75         0
##   Malignant      2        23
##                                           
##                Accuracy : 0.98            
##                  95% CI : (0.9296, 0.9976)
##     No Information Rate : 0.77            
##     P-Value [Acc > NIR] : 2.106e-09       
##                                           
##                   Kappa : 0.9452          
##                                           
##  Mcnemar's Test P-Value : 0.4795          
##                                           
##             Sensitivity : 0.974           
##             Specificity : 1.000           
##          Pos Pred Value : 1.000           
##          Neg Pred Value : 0.920           
##              Prevalence : 0.770           
##          Detection Rate : 0.750           
##    Detection Prevalence : 0.750           
##       Balanced Accuracy : 0.987           
##                                           
##        'Positive' Class : Benign          
## 
roc_curve <- roc(as.numeric(predictions), as.numeric(wbcd_test_labels == "Benign"))
## Setting levels: control = 1, case = 2
## Setting direction: controls > cases
plot(roc_curve, main = "ROC Eğrisi - K En Yakın Komşu")

# Model Yorumları

Random Forest (rf):

  • Accuracy: 0.98
  • Hassaslık (Sensitivity): 0.974
  • Özgüllük (Specificity): 1.000
  • Pozitif Tahmin Değeri (Pos Pred Value): 1.000
  • Negatif Tahmin Değeri (Neg Pred Value): 0.920
  • Kappa: 0.9452
  • Denge İşareti (Balanced Accuracy): 0.987

Random Forest modeli oldukça yüksek doğruluk, hassaslık ve özgüllük elde ederek başarılı bir performans sergilemiştir.