Svm

Destek Vektör Makineleri (Support Vector Machine) genellikle sınıflandırma problemlerinde kullanılan gözetimli öğrenme yöntemlerinden biridir. Bir düzlem üzerine yerleştirilmiş noktaları ayırmak için bir doğru çizer. Bu doğrunun, iki sınıfının noktaları için de maksimum uzaklıkta olmasını amaçlar. Karmaşık ama küçük ve orta ölçekteki veri setleri için uygundur.

Daha açıklayıcı olması için görsel üzerinde tekrar inceleyelim. Tabloda siyahlar ve beyazlar olmak üzere iki farklı sınıf var. Sınıflandırma problemlerindeki asıl amacımız gelecek verinin hangi sınıfta yer alacağını karar vermektir. Bu sınıflandırmayı yapabilmek için iki sınıfı ayıran bir doğru çizilir ve bu doğrunun ±1’i arasında kalan yeşil bölgeye Margin adı verilir. Margin ne kadar geniş ise iki veya daha fazla sınıf o kadar iyi ayrıştırılır.

Naive bayes

Naive Bayes, istatistikte sıklıkla kullanılan Bayes Teoremine dayalı, belirli bir metin parçasının sınıfı hakkında tahminler yapan olasılıksal bir algoritmadır. Bir olayın meydana gelme olasılığının, olayın önceki olasılığının çarpımına eşit olduğunu düşünerek veri setini eğitir.

Algoritmanın “saf “ (naive) kısmı, metindeki tüm kelimelerin birbirinden bağımsız olduğu varsayımından gelir ki bu her zaman böyle değildir. Bu varsayıma rağmen, Naive Bayes’in birçok metin sınıflandırma görevinde oldukça etkili olduğu görülmüştür. Matematiksel gösterimde Bayes Teoremi şu şekildedir :

P(A|B) = P(B|A) * P(A) / P(B)

P(A|B), B olayının meydana gelmesi durumunda A olayının olma olasılığıdır (sonraki olasılık) P(B|A), A olayının meydana gelmesi durumunda B olayının olma olasılığıdır P(A), A olayının önceki olasılığıdır P(B), meydana gelen B olayının önceki olasılığıdır (marjinal olasılık olarak da bilinir)

Logistic regression

Lojistik regresyon, isminde “regresyon” geçmesine rağmen bir sınıflandırma algoritmasıdır. Yani görseldeki hayvanın kedi mi, köpek mi olduğu veya verilmiş olan bilgilerin bir erkeğe mi yoksa bir kadına mı ait olduğunu tahmin etme gibi iki sınıflı sınıflandırma problemlerinde sıkça kullanılır.

Lojistik regresyonun, lineer regresyon ile arasındaki en büyük farkı iki sınıfı birbirinden ayıracak çizgiyi nasıl uyguladığıdır (fit). Lineer regresyon, optimum çizgiyi çizmek için “En Küçük Kareler Yöntemi” (Least Squares) kullanırken, lojistik regresyon “Maksimum Olabilirlik” (Maximum Likelihood) kullanır.

Decesion Tree

Karar ağacı, belirli bir soruna yönelik tüm potansiyel çözümleri haritalandıran akış şeması benzeri bir diyagramdır. Genellikle kuruluşlar tarafından, bir dizi karar almanın tüm olası sonuçlarını karşılaştırarak en uygun hareket tarzını belirlemeye yardımcı olmak için kullanılır.

Örneğin, bir şirketin genel merkezini hangi şehre taşıyacağına veya bir uydu ofis açıp açmayacağına karar vermesine yardımcı olmak için bir karar ağacı kullanılabilir. Karar ağaçları, tahmine dayalı modeller oluşturmak için kullanılabildiğinden makine öğreniminde de popüler bir araçtır. Bu tür karar ağaçları, bir müşterinin önceki satın alma geçmişine dayanarak bir ürünü satın alıp almayacağı gibi tahminler yapmak için kullanılabilir.

Karar ağacı, her bir iç düğümün bir özelliği (veya niteliği), her bir dalın bir karar kuralını ve her bir yaprak düğümünün sonucu temsil ettiği akış şeması benzeri bir ağaç yapısıdır. Bir karar ağacındaki en üst düğüm kök düğüm olarak bilinir ve herhangi bir alt düğümü olmayan düğümler yaprak düğüm olarak adlandırılır. Karar ağacı algoritması kök düğümden başlar ve bir yaprak düğüme ulaşana kadar girdi özellik değerlerine göre bir karar vererek ağaç boyunca ilerler. Yaprak düğümdeki değer, tahmin edilen çıktı değerini temsil eder.

Bir karar ağacı algoritmasında kök düğümün yaprak düğüme ayrılması aşağıdaki gibi açıklanabilir:

Kök Düğüm: Kök düğüm tüm veri kümesini temsil eder ve ağacı başlatmak için kullanılır. Ağacın başlangıç noktasıdır ve verileri maksimum bilgi kazancı veya minimum Gini Impurity sağlayan özelliğe göre böler. İç Düğüm: Her bir iç düğüm, verileri iki veya daha fazla alt kümeye ayıran bir özelliği temsil eder. Bölme işlemi özelliğin değerine göre gerçekleştirilir ve her bir gözlemin izleyeceği yolu belirler. İç düğüm daha sonra birden fazla alt düğüme bölünür. Yaprak Düğüm: Yaprak düğüm, verilerin daha fazla bölünemeyen bir alt kümesini temsil eder. Kendisine ulaşan gözlemler için nihai tahmini içerir. Tahmin, alt kümedeki çoğunluk sınıfına veya hedef değişkenin ortalama değerine dayanır.

Knn

Makine öğrenmesi ile çözülebilen problemlerden biri çok geniş kullanım alanı ile sınıflandırma problemleridir. Günümüzdeki bir çok problem bir şekilde sınıflandırma problemi olarak tasarlanıp çözülebilmektdir. Aşağıdaki problemler sınıflandırma problemlerine örnek olarak verilebilir.

Müşterinin verilen krediyi ödeyip ödeyemeyeceği (Customer Default Risk) Müşterinin aldığı servisi bırakıp bırakmayacağı (Customer Churn) Müşteri segmantasyon (Customer Segmantation) Kişiye özel ilaç tespiti E-posta spam filitrelemesi

KNN en basit anlamı ile içerisinde tahmin edilecek değerin bağımsız değişkenlerinin oluşturduğu vektörün en yakın komşularının hangi sınıfta yoğun olduğu bilgisi üzerinden sınıfını tahmin etmeye dayanır.

KNN (K-Nearest Neighbors) Algoritması iki temel değer üzerinden tahmin yapar;

Distance (Uzaklık): Tahmin edilecek noktanın diğer noktalara uzaklığı hesaplanır. Bunun için Minkowski uzaklık hesaplama fonksiyonu kullanılır. K (komuşuluk sayısı): En yakın kaç komşu üzerinden hesaplama yapılacağını söyleriz. K değeri sonucu direkt etkileyecektir. K 1 olursa overfit etme olasılığı çok yüksek olacaktır. Çok büyük olursa da çok genel sonuçlar verecektir. Bu sebeple optimum K değerini tahmin etmek problemin asıl konusu olarak karşımızda durmaktadır. K değerinin önemini aşağıdaki grafik çok güzel bir şekilde göstermektedir. Eğer K=3 ( düz çizginin olduğu yer) seçersek sınıflandırma algoritması ? işareti ile gösterilen noktayı, kırmızı üçgen sınıfı olarak tanımlayacaktır. Fakat K=5 (kesikli çizginin olduğu alan) seçersek sınıflandırma algoritması, aynı noktayı mavi kare sınıfı olarak tanımlayacaktır.

Tahmin(Svm)

iris <- read.csv("iris.csv")
summary(iris)
##        Id         SepalLengthCm    SepalWidthCm   PetalLengthCm  
##  Min.   :  1.00   Min.   :4.300   Min.   :2.000   Min.   :1.000  
##  1st Qu.: 38.25   1st Qu.:5.100   1st Qu.:2.800   1st Qu.:1.600  
##  Median : 75.50   Median :5.800   Median :3.000   Median :4.350  
##  Mean   : 75.50   Mean   :5.843   Mean   :3.054   Mean   :3.759  
##  3rd Qu.:112.75   3rd Qu.:6.400   3rd Qu.:3.300   3rd Qu.:5.100  
##  Max.   :150.00   Max.   :7.900   Max.   :4.400   Max.   :6.900  
##   PetalWidthCm     Species         
##  Min.   :0.100   Length:150        
##  1st Qu.:0.300   Class :character  
##  Median :1.300   Mode  :character  
##  Mean   :1.199                     
##  3rd Qu.:1.800                     
##  Max.   :2.500

Iris veri seti R.A.’da kullanıldı. Fisher’in 1936 tarihli klasik makalesi Taksonomik Problemlerde Çoklu Ölçümlerin Kullanımı ve aynı zamanda UCI Makine Öğrenimi Havuzunda da bulunabilir.

Her biri 50 örnek içeren üç iris türünü ve her çiçeğe ilişkin bazı özellikleri içerir. Bir çiçek türü diğer ikisinden doğrusal olarak ayrılabilir, ancak diğer ikisi birbirinden doğrusal olarak ayrılamaz.

Bu veri kümesindeki sütunlar şunlardır:

Id SepalLengthCm -SepalUzunlukCm SepalWidthCm-SepalGenişlikCm PetalLengthCm-Yaprak UzunluğuCm PetalWidthCm-Yaprak GenişliğiCm Species-Türler

Tahmın yapmadan önce veri setimi 2’ye bölmem lazım bünün için caret kütüphanesindeki createDataPartition() fonksiyonunu kullanacağım

library(caret)
## Warning: package 'caret' was built under R version 4.3.2
## Zorunlu paket yükleniyor: ggplot2
## Warning: package 'ggplot2' was built under R version 4.3.2
## Zorunlu paket yükleniyor: lattice
library(kernlab)
## 
## Attaching package: 'kernlab'
## The following object is masked from 'package:ggplot2':
## 
##     alpha
library(tidyverse)
## Warning: package 'tidyverse' was built under R version 4.3.2
## Warning: package 'tibble' was built under R version 4.3.2
## Warning: package 'tidyr' was built under R version 4.3.2
## Warning: package 'readr' was built under R version 4.3.2
## Warning: package 'purrr' was built under R version 4.3.2
## Warning: package 'dplyr' was built under R version 4.3.2
## Warning: package 'forcats' was built under R version 4.3.2
## Warning: package 'lubridate' was built under R version 4.3.2
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr     1.1.4     ✔ readr     2.1.4
## ✔ forcats   1.0.0     ✔ stringr   1.5.0
## ✔ lubridate 1.9.3     ✔ tibble    3.2.1
## ✔ purrr     1.0.2     ✔ tidyr     1.3.0
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ kernlab::alpha() masks ggplot2::alpha()
## ✖ purrr::cross()   masks kernlab::cross()
## ✖ dplyr::filter()  masks stats::filter()
## ✖ dplyr::lag()     masks stats::lag()
## ✖ purrr::lift()    masks caret::lift()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
train_index <- createDataPartition(y = iris$Species,  # y = bağımlı değişkenimiz.
                                   p = .7,  # %70 ve %30'a bölme oranını belirtir.
                                   list = FALSE,  # Sonuçları matris formunda ayarlar.
                                   times = 1)  # Oluşturulacak bölümlerin sayısını 1 olarak belirler.
train_data <- iris[train_index,]  # Train verilerini oluşturmak için iris verisinin train_index'ini kullan.
test_data <- iris[-train_index,]  # train_index içinde olmayan verileri kullanarak test verilerini oluştur.
fitControl <- trainControl(method = "cv", number = 10, savePredictions = TRUE)
svm_model <- train(Species ~ .,  # Y değişkenini belirle, '~' ile ayrılır. Nokta tüm değişkenleri tahmin için dahil ettiğini gösterir.
                   data = train_data,  # Veri
                   method = 'svmLinear',  # SVM modelini belirt
                   trControl = fitControl)  # Çapraz doğrulama kullan1
confusionMatrix(svm_model)
## Cross-Validated (10 fold) Confusion Matrix 
## 
## (entries are percentual average cell counts across resamples)
##  
##                  Reference
## Prediction        Iris-setosa Iris-versicolor Iris-virginica
##   Iris-setosa            33.3             0.0            0.0
##   Iris-versicolor         0.0            33.3            0.0
##   Iris-virginica          0.0             0.0           33.3
##                        
##  Accuracy (average) : 1
prediction_svm <- predict(svm_model, test_data)
table(prediction_svm, test_data$Species) %>%  # Tahmin tablosunu oluştur.
  prop.table() %>%  # Tablo değerlerini sayılar yerine oranlara dönüştür.
  round(2)  # Sayıları 2 önemli haneli yuvarla.
##                  
## prediction_svm    Iris-setosa Iris-versicolor Iris-virginica
##   Iris-setosa            0.33            0.00           0.00
##   Iris-versicolor        0.00            0.33           0.00
##   Iris-virginica         0.00            0.00           0.33

Destek Vektör Makinesi(svm) modelinin nihai doğruluğu: %100