MAKİNE ÖĞRENİMİ NEDİR?

Makine öğrenmesi, bilgisayar sistemlerinin belirli görevleri belirli bir performans düzeyinde gerçekleştirmek için verilerden öğrenme yeteneği kazandığı bir yapay zeka alt dalıdır. Bu, bilgisayarların programlanmış talimatlar yerine verilerle beslenerek kendi başlarına öğrenmelerini sağlar.

Makine öğrenimi, genellikle algoritmaların ve istatistiksel modellerin kullanımını içerir. Temelde, bir makine öğrenimi modeli, belirli bir görevi gerçekleştirmek için tasarlandığında, model giriş verilerinden öğrenir ve bu öğrenmeyi kullanarak benzer görevleri daha iyi yapabilme yeteneği kazanır.

Makine öğrenimi genellikle üç ana kategoriye ayrılır:

Denetimli Öğrenme (Supervised Learning): Bu kategoride, algoritma öğrenme sürecinde belirli bir çıkış veya hedef etiketi kullanır. Algoritma, giriş verileri ile bu hedef etiket arasındaki ilişkiyi öğrenmeye çalışır. Öğrenme süreci tamamlandığında, model, yeni giriş verileri için doğru çıkış tahminleri yapabilir.

Denetimsiz Öğrenme (Unsupervised Learning): Bu kategoride, algoritma öğrenme sürecinde herhangi bir hedef etiketi kullanmaz. Bunun yerine, veri setindeki yapıları ve ilişkileri keşfetmeye çalışır. Bu tür öğrenme genellikle veri kümeleme, boyut azaltma ve desen keşfi gibi görevlerde kullanılır.

Pekiştirmeli Öğrenme (Reinforcement Learning): Bu kategoride, bir ajanın belirli bir çevre içinde belirli bir görevi en iyi şekilde gerçekleştirmek için ödüllendirildiği veya cezalandırıldığı bir öğrenme paradigması kullanılır. Ajan, çevre ile etkileşimde bulunarak deneyim kazanır ve bu deneyimi kullanarak en iyi eylemleri öğrenir.

Makine öğrenimi, bir dizi uygulama alanında kullanılmaktadır, örneğin ses ve görüntü tanıma, doğal dil işleme, oyun stratejileri geliştirme, tıbbi teşhis ve finansal analiz gibi.

İRİS ÇİÇEĞİNİ İNCELİYORUM

read_csv() fonksiyonunu kullanarak “Iris.csv” dosyasını okuyup veri çerçevesine dönüştüren kod satırı, library(readr) ifadesini kullanarak:

Bu kod, readr paketini yükleyip, ardından read_csv() fonksiyonunu kullanarak “Iris.csv” dosyasını okuyup veriyi Iris adlı bir veri çerçevesine atar. Dosya, R çalışma dizininde bulunmalıdır veya dosyanın tam yolunu belirtmelisiniz.

library(readr)
Iris <- read_csv("Iris.csv")
## Rows: 150 Columns: 6
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## chr (1): Species
## dbl (5): Id, SepalLengthCm, SepalWidthCm, PetalLengthCm, PetalWidthCm
## 
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.

Bu örnekte, “caret” paketini yükledik, iris veri setini eğitim ve test setlerine böldük, bir kontrol seti oluşturduk, ardından “rpart” algoritmasını kullanarak bir model eğittik ve modelin performansını değerlendirdik. “caret” paketi, bu gibi makine öğrenimi görevlerini daha kolay ve tutarlı bir şekilde gerçekleştirmenizi sağlayan bir dizi araç ve fonksiyon sunar.

library(caret)
## Loading required package: ggplot2
## Loading required package: lattice
data("iris")

Bu dosya adı, bir CSV formatındaki “iris” veri setini temsil edecek.

filename <- "iris.csv"

Sırasıyla “Sepal.Length”, “Sepal.Width”, “Petal.Length”, “Petal.Width”, ve “Species”.

Bu işlem sonrasında “Iris” veri setinin sütun isimleri belirtilen isimlerle güncellenmiş olacaktır.

colnames(Iris) <- c("Sepal.Length","Sepal.Width","Petal.Length","Petal.Width","Species")
validation_index <- createDataPartition(iris$Species, p=0.80, list=FALSE)

Bu kod, createDataPartition() fonksiyonunu kullanarak “Species” değişkenine dayalı olarak veriyi 80% eğitim ve 20% doğrulama alt kümelerine böler. Oluşturulan indeksler “validation_index” değişkenine atanır. Sonrasında, bu indeksleri kullanarak eğitim ve doğrulama veri setlerini oluşturur.

validation <- iris[-validation_index,]

Bu kod, createDataPartition() fonksiyonu ile eğitim ve doğrulama veri setlerini oluşturduktan sonra, [-validation_index, ] kullanarak validation_index indeksine karşılık gelen gözlemleri içermeyen bir doğrulama alt kümesi oluşturur. Oluşturulan bu alt küme, “validation” adlı bir değişkene atanır.

iris <- iris[validation_index,]
dim(iris)
## [1] 120   5

“iris” veri setinin her bir sütununun veri tipini döndürür. Yani, her sütunun veri tipini sıralı bir şekilde liste olarak gösterir.

sapply(iris, class)
## Sepal.Length  Sepal.Width Petal.Length  Petal.Width      Species 
##    "numeric"    "numeric"    "numeric"    "numeric"     "factor"

Verilerin ilk beş satırı bu şekilde:

head(iris)
##   Sepal.Length Sepal.Width Petal.Length Petal.Width Species
## 1          5.1         3.5          1.4         0.2  setosa
## 3          4.7         3.2          1.3         0.2  setosa
## 6          5.4         3.9          1.7         0.4  setosa
## 7          4.6         3.4          1.4         0.3  setosa
## 8          5.0         3.4          1.5         0.2  setosa
## 9          4.4         2.9          1.4         0.2  setosa

fonksiyonu R programlama dilinde bir faktör değişkeninin seviyelerini çıkarmak için kullanılır. Özel örneğinizde “iris” veri setinde, “Species” değişkeninin seviyelerini çıkarıyorsunuz. Bu değişken, farklı iris çiçek türlerini temsil eden bir faktördür. Şu komutu çalıştırdığınızda:

“Species” değişkeninin içindeki farklı seviyeleri veya kategorileri döndürecektir. “iris” veri seti için tipik olarak şöyle bir çıktı alırsınız ve Bu “Species” değişkeninde bulunan üç farklı iris çiçeği türünün seviyeleridir.

levels(iris$Species)
## [1] "setosa"     "versicolor" "virginica"

Bu R kodu, “iris” veri setindeki “Species” değişkeninin sınıf seviyelerinin yüzdelik dağılımını hesaplar ve bir vektör olarak percentage değişkenine atar.Bu kod, table() fonksiyonu ile sınıf seviyelerinin sayısını elde eder, prop.table() fonksiyonu ile yüzdelik dağılımı hesaplar ve son olarak * 100 ile yüzdelik formata çevirir. Elde edilen percentage vektörü, her sınıf seviyesinin veri setindeki yüzde oranlarını içerir.

percentage <- prop.table(table(iris$Species)) * 100

Bu kod, “Species” değişkeninin sınıf seviyelerinin frekanslarını ve yüzdelik dağılımlarını içeren bir tabloyu oluşturur. “Frequency” sütunu frekansları, “Percentage” sütunu ise yüzdelik dağılımları temsil eder.

cbind(freq=table(iris$Species), percentage=percentage)
##            freq percentage
## setosa       40   33.33333
## versicolor   40   33.33333
## virginica    40   33.33333

Bu kod, “Sepal.Length”, “Sepal.Width”, “Petal.Length”, ve “Petal.Width” sütunları için temel istatistikleri ve “Species” değişkeninin seviyelerini ile frekanslarını içeren iki özet oluşturur.

summary(iris)
##   Sepal.Length    Sepal.Width     Petal.Length    Petal.Width   
##  Min.   :4.300   Min.   :2.000   Min.   :1.000   Min.   :0.100  
##  1st Qu.:5.100   1st Qu.:2.800   1st Qu.:1.575   1st Qu.:0.300  
##  Median :5.750   Median :3.000   Median :4.350   Median :1.300  
##  Mean   :5.812   Mean   :3.049   Mean   :3.746   Mean   :1.201  
##  3rd Qu.:6.400   3rd Qu.:3.300   3rd Qu.:5.100   3rd Qu.:1.800  
##  Max.   :7.900   Max.   :4.400   Max.   :6.900   Max.   :2.500  
##        Species  
##  setosa    :40  
##  versicolor:40  
##  virginica :40  
##                 
##                 
## 
x <- iris[,1:4]
y <- iris[,5]

x <- iris[, 1:4], “iris” veri setinin ilk dört sütununu içeren bir veri çerçevesi olan “x” değişkenine atar. Bu sütunlar, çiçek ölçümlerini temsil eder. Özellikle, “Sepal.Length”, “Sepal.Width”, “Petal.Length” ve “Petal.Width” değişkenlerini içerir.

y <- iris[, 5], “iris” veri setinin beşinci sütununu içeren bir vektör olan “y” değişkenine atar. Bu sütun, çiçek türlerini temsil eden “Species” değişkenidir. “x” genellikle bağımsız değişkenleri, “y” ise bağımlı değişkeni temsil eder ve genellikle makine öğrenimi modellerinin eğitiminde kullanılır.

par(mfrow=c(1,4))
for(i in 1:4) {
  boxplot(x[,i], main=names(iris)[i])
}

Bu kod, “iris” veri setinin ilk dört sütununu içeren bir boxplot serisini oluşturur ve bu boxplot’ları tek bir grafik penceresinde (1 satır, 4 sütunlu) gösterir. Her bir boxplot, bir özellik (Sepal.Length, Sepal.Width, Petal.Length, Petal.Width) için veri dağılımını gösterir. par(mfrow=c(1,4)) komutu, grafik penceresini bir satırda dört sütuna böler. Daha sonra, bir döngü içinde her bir sütun için boxplot fonksiyonu kullanılarak her boxplot’ın başlığını “iris” veri setinin sütun isimleriyle etiketler. Bu şekilde, her bir boxplot farklı bir özellik (değişken) için veri dağılımını gösterir ve pencerenin her sütununda bir boxplot olacak şekilde dört ayrı grafik görüntülenir.

plot(y)

featurePlot(x=x, y=y, plot="ellipse")

Bu komut, çok değişkenli bir veri setindeki özelliklerin (değişkenlerin) sınıflar içindeki dağılımını gösteren bir dağılım matrisi oluşturur. Her özellik için, sınıfların dağılımını ifade eden elips grafikleri çizilir. Elips grafikleri, sınıflar arasındaki benzerlik ve ayrımları görsel olarak anlamak için kullanılır. Oluşturulan matris, her bir özellikle sınıflar arasındaki ilişkiyi anlamak ve potansiyel desenleri belirlemek için bir araç sağlar.

featurePlot(x=x, y=y, plot="box")

Bu komut, featurePlot fonksiyonu ile çizilecek grafiklerin x ve y eksenlerinin ölçeklerinin bağımsız olarak özelleştirilmesini sağlar. “free” ölçek, her bir grafikteki eksenlerin kendi aralarında bağımsız olmasını ifade eder. Bu, her bir özellik için sınıfların daha iyi karşılaştırılabilmesini sağlar. Özellikle, sınıflar arasındaki dağılımın daha detaylı bir şekilde incelenmesine olanak tanır.

scales <- list(x=list(relation="free"), y=list(relation="free"))
featurePlot(x=x, y=y, plot="density", scales=scales)

Bu kod, R’deki caret paketini kullanarak sınıflandırma algoritmalarının performansını değerlendirmek için 10 katlı çapraz doğrulama yapar. Örnek bir sınıflandırma algoritması olarak “knn” (k-En Yakın Komşu) kullanılmıştır. train() fonksiyonu, belirtilen modeli ve kontrol parametrelerini kullanarak çapraz doğrulama yapar. metric = “Accuracy” ile doğruluk metriğini seçer. Sonuçlar results değişkenine kaydedilir.

control <- trainControl(method="cv", number=10)
metric <- "Accuracy"

Doğrusal algoritma

set.seed(7)
fit.lda <- train(Species~., iris, method="lda", metric=metric, trControl=control)

Doğrusal olmayan algoritma

set.seed(7)
fit.cart <- train(Species~., data=iris, method="rpart", metric=metric, trControl=control)

CART

set.seed(7)
fit.knn <- train(Species~., data=iris, method="knn", metric=metric, trControl=control)

Gelişmiş algoritma

set.seed(7)
fit.svm <- train(Species~., data=iris, method="svmRadial", metric=metric, trControl=control)
set.seed(7)
fit.rf <- train(Species~., data=iris, method="rf", metric=metric, trControl=control)
results <- resamples(list(lda=fit.lda, cart=fit.cart, knn=fit.knn, svm=fit.svm, rf=fit.rf))
summary(results)
## 
## Call:
## summary.resamples(object = results)
## 
## Models: lda, cart, knn, svm, rf 
## Number of resamples: 10 
## 
## Accuracy 
##           Min.   1st Qu.    Median      Mean   3rd Qu. Max. NA's
## lda  0.9166667 0.9375000 1.0000000 0.9750000 1.0000000    1    0
## cart 0.8333333 0.8541667 0.9166667 0.9166667 0.9791667    1    0
## knn  0.8333333 0.9375000 1.0000000 0.9666667 1.0000000    1    0
## svm  0.8333333 0.9166667 1.0000000 0.9500000 1.0000000    1    0
## rf   0.8333333 0.9166667 0.9583333 0.9416667 1.0000000    1    0
## 
## Kappa 
##       Min. 1st Qu. Median   Mean 3rd Qu. Max. NA's
## lda  0.875 0.90625 1.0000 0.9625 1.00000    1    0
## cart 0.750 0.78125 0.8750 0.8750 0.96875    1    0
## knn  0.750 0.90625 1.0000 0.9500 1.00000    1    0
## svm  0.750 0.87500 1.0000 0.9250 1.00000    1    0
## rf   0.750 0.87500 0.9375 0.9125 1.00000    1    0

Bu kod, çeşitli sınıflandırma algoritmalarının (LDA, CART, k-NN, SVM, Random Forest) performans sonuçlarını bir araya getirir ve bu sonuçların özetini oluşturur. resamples() fonksiyonu, belirtilen sınıflandırma modellerini kullanarak çapraz doğrulama sonuçlarını bir araya getirir. Daha sonra, summary() fonksiyonu ile bu sonuçların özeti oluşturulur. Bu özet, farklı algoritmaların performansını karşılaştırmak için kullanılabilir.

dotplot(results)

Bu kod, eğitilmiş bir Linear Discriminant Analysis (LDA) modelinin özetini ekrana basar. train fonksiyonu, belirtilen veri seti üzerinde LDA modelini eğitir ve eğitim sonuçlarını içeren bir nesne oluşturur. print(trained_lda_model) ifadesi, bu nesnenin özetini ekrana basar. Bu çıktı, modelin eğitildiği veri seti, kullanılan parametreler ve eğitim sonuçları gibi temel bilgileri içerir. Bu sayede eğitilmiş modelin yapılandırması ve performansı hakkında genel bir bilgi edinilebilir.

print(fit.lda)
## Linear Discriminant Analysis 
## 
## 120 samples
##   4 predictor
##   3 classes: 'setosa', 'versicolor', 'virginica' 
## 
## No pre-processing
## Resampling: Cross-Validated (10 fold) 
## Summary of sample sizes: 108, 108, 108, 108, 108, 108, ... 
## Resampling results:
## 
##   Accuracy  Kappa 
##   0.975     0.9625

Bu kod, doğrulama veri setindeki Linear Discriminant Analysis (LDA) modelinin performansını değerlendirmek için kullanılır. predict fonksiyonu ile modelin doğrulama veri seti üzerindeki tahminleri alır ve confusionMatrix fonksiyonu ile gerçek sınıflar ile modelin tahmin ettiği sınıflar arasındaki uyumsuzluğu değerlendirir. Bu yöntem, modelin doğruluğunu ve performansını anlamak için yaygın olarak kullanılır.

predictions <- predict(fit.lda, validation)
confusionMatrix(predictions, validation$Species)
## Confusion Matrix and Statistics
## 
##             Reference
## Prediction   setosa versicolor virginica
##   setosa         10          0         0
##   versicolor      0         10         0
##   virginica       0          0        10
## 
## Overall Statistics
##                                      
##                Accuracy : 1          
##                  95% CI : (0.8843, 1)
##     No Information Rate : 0.3333     
##     P-Value [Acc > NIR] : 4.857e-15  
##                                      
##                   Kappa : 1          
##                                      
##  Mcnemar's Test P-Value : NA         
## 
## Statistics by Class:
## 
##                      Class: setosa Class: versicolor Class: virginica
## Sensitivity                 1.0000            1.0000           1.0000
## Specificity                 1.0000            1.0000           1.0000
## Pos Pred Value              1.0000            1.0000           1.0000
## Neg Pred Value              1.0000            1.0000           1.0000
## Prevalence                  0.3333            0.3333           0.3333
## Detection Rate              0.3333            0.3333           0.3333
## Detection Prevalence        0.3333            0.3333           0.3333
## Balanced Accuracy           1.0000            1.0000           1.0000