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)
## 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
## 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
##
## Attaching package: 'kernlab'
## The following object is masked from 'package:ggplot2':
##
## alpha
## 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.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## 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
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