BÜT PROJESİ

1810504577

MAKİNE ÖĞRENMESİ

Makine öğrenmesi, bilgisayar sistemlerinin verilerden öğrenerek işlevlerini geliştirmesini sağlayan bir yapay zeka alt alanıdır. Makine öğrenmesi algoritmaları, büyük miktarda veriyi analiz ederek, desenleri ve ilişkileri tespit edebilir ve bu bilgileri kullanarak tahmin yapabilir, kararlar alabilir veya problemleri çözebilir. Makine öğrenimi, uygulamaları aracılığıyla çeşitli sektörlerde kullanılmaktadır, örneğin otomotiv, finans, sağlık, pazarlama ve daha birçok alanda. Bu algoritmalara veri sağlandığında, makine öğrenmesi modelleri, bu verilere dayanarak yeni veriler üzerinde tahminler yapabilir veya kararlar verebilir.

1. Support vector(destek vektörü)

Destek Vektör Makineleri (DVM) hem sınıflandırma hem de regresyon görevleri için kullanılabilen güçlü bir denetimli öğrenme algoritmasıdır. DVM’nin arkasındaki temel fikir, yüksek boyutlu bir uzayda verileri sınıflara en iyi şekilde ayıran bir hiper düzlem bulmaktır. Destek vektörleri, karar sınırına en yakın veri noktalarıdır ve optimum hiper düzlemin tanımlanmasında çok önemli bir rol oynar.

R’da bir SVM modeli oluşturmak ve çizmek için e1071 ve caret paketlerini kullanabiliriz. Bunların nasıl kullanılacağına dair bir örnek var:

library(e1071)
library(caret)

Iris veri kümesini yükleyelim, verileri eğitim ve test kümelerine ayıralım.

data(iris)
X <- iris[, 1:4]
y <- iris[, 5]
set.seed(42)
split_index <- createDataPartition(y, p = 0.8, list = FALSE)
X_train <- X[split_index, ]
X_test <- X[-split_index, ]
y_train <- y[split_index]
y_test <- y[-split_index]

eğitim verilerini kullanarak bir SVM modeli oluşturalım ve radyal temel fonksiyon çekirdeği kullanalım.

svm_model <- svm(y_train ~ ., data = data.frame(cbind(y_train, X_train)), kernel = "radial", cost = 1.0)

SVM modelini çizelim.

predictions <- predict(svm_model, newdata = data.frame(X_test))

SVM modelinin test verileri üzerindeki performansını değerlendirmek için predict fonksiyonunu ve confusionMatrix fonksiyonunu kullanabiliriz. Bir örnek ele alalım:

accuracy <- sum(predictions == y_test) / length(y_test)
cat("Doğruluk:", accuracy, "\n")
## Doğruluk: 0.8666667

2. Doğrusal regresyon modeli

Doğrusal regresyon modeli, iki değişken arasındaki ilişkiyi açıklamak için kullanılan istatistiksel bir modeldir. Bu modelde, bağımlı değişkenin değeri, bağımsız değişkenin(s) değeriyle açıklanmaya çalışılır.

Doğrusal regresyon modeli genellikle şu denklemle ifade edilir:

Y = β0 + β1X1 + β2X2 + … + βnXn + ε

Burada Y, bağımlı değişkenin değerini temsil eder. β0, β1, β2, … βn ise regresyon katsayılarıdır ve bağımsız değişkenlerin etkilerini gösterir. X1, X2, … Xn ise bağımsız değişkenlerin değerlerini temsil eder. ε ise hata terimidir ve modelin tahminlerinin gerçek değerden sapmalarını ifade eder.

Doğrusal regresyon modeli, regresyon analizini kullanarak veriye uygun bir doğru denklemi bulmaya çalışır. Bu doğru, veri noktalarının en iyi şekilde uyarlandığı ve hataların minimize edildiği bir doğru olarak belirlenir.

Bu kodda, bir otomobilin ağırlığına ve beygir gücüne bağlı olarak galon başına kilometre değerini tahmin eden çoklu doğrusal regresyon modeli gösterilmektedir.

mtcars veri kümesini yükleyelim.

data(mtcars)

Modeli oluşturalım

model <- lm(mpg ~ wt + hp, data = mtcars)

Yeni veriler üzerinde tahminlerde bulunalım

newdata <- data.frame(wt = c(2.5, 3.0), hp = c(100, 150))
pred <- predict(model, newdata)

Tahminleri yazdıralım.

print(pred)
##        1        2 
## 24.35540 20.82784

Model katsayılarını çıkaralım.

coef <- coef(model)

Katsayıları yazdıracağız

print(coef)
## (Intercept)          wt          hp 
## 37.22727012 -3.87783074 -0.03177295

3. Karar ağacı modeli

Bir karar modeli, bir karara yol açan mantık ve kuralları grafiksel veya tablosal olarak temsil etmenin bir yoludur. Karar modelleri için yaygın bir gösterim, Karar Modeli ve Notasyonu anlamına gelen DMN’dir. DMN, karar modellerini çalıştırmak için karar tablolarının, karar gereksinimleri diyagramlarının ve yeterince basit bir ifade dilinin (FEEL) nasıl oluşturulacağını tanımlayan bir standarttır.

Bir karar tablosu, girdi, koşul ve çıktı sütunlarından oluşan bir kararın basit ve sezgisel bir temsilidir. Tablodaki her satır, girdi değerleri koşullarla eşleştiğinde hangi çıktı değerinin döndürülmesi gerektiğini tanımlayan bir kuralı temsil eder. Örneğin, mevcut mevsime göre akşam yemeğini belirlemek için bir karar tablosu kullanılabilir.

Karar gereksinimleri diyagramı (DRD), farklı kararlar, girdiler ve çıktılar arasındaki bağımlılıkların ve ilişkilerin grafiksel bir gösterimidir. Her bir karar basit bir tabloda tanımlanamadığında, ancak birkaç ara karar veya karmaşık mantık gerektirdiğinde bir DRD kullanışlıdır. Örneğin, bir DRD borçlunun gelirine, kredi puanına ve diğer faktörlere dayalı olarak bir kredi başvurusunun uygunluğunu belirlemek için kullanılabilir.

FEEL, karar tabloları ve DRD’lerdeki koşulları ve ifadeleri ifade etmek için kullanılan bir dildir. FEEL, hem teknik olmayan hem de teknik kullanıcılar için okunması ve yazılması kolay olacak şekilde tasarlanmıştır. FEEL, karar mantığını tanımlamak için çeşitli veri türlerini, operatörleri, fonksiyonları ve mantık yapılarını destekler.

Kod ve örnekler içeren bir karar modeli uygulamak için DMN standardını destekleyen çeşitli araçlar ve kütüphaneler kullanabilirsiniz. Ayrıca, DMN dosyalarını R kullanarak ayrıştırmak ve yürütmek için pyDMNrules gibi paketleri kullanabilirsiniz.

library(rpart)

Burada, özyinelemeli bölümleme ve regresyon ağaçları için yaygın olarak kullanılan rpart paketini kullanarak R’de bir karar ağacı oluşturan bir kod örneği yer almaktadır.

BU veriler İki özellikli (X1 ve X2) ve ikili hedef değişkenli (Y) bir veri kümesi varsayalım

set.seed(123)
veri <- data.frame(X1 = runif(100, 0, 10),
                   X2 = runif(100, 0, 10),
                   Y = sample(c(0, 1), 100, replace = TRUE))

Karar ağacı modelini en axample olarak oluşturun

data <- data.frame(Y = c(1, 2, 3, 4, 5),
  X1 = c(10, 20, 30, 40, 50),
  X2 = c(5, 4, 3, 2, 1))
model <- lm(Y ~ X1 + X2, data = data)
tree_model <- rpart(Y ~ X1 + X2, data = data, method = "class")

Karar ağacını görüntüleyin

summary(model)
## 
## Call:
## lm(formula = Y ~ X1 + X2, data = data)
## 
## Residuals:
##          1          2          3          4          5 
## -4.374e-16  2.222e-16  4.686e-16  1.457e-16 -3.992e-16 
## 
## Coefficients: (1 not defined because of singularities)
##               Estimate Std. Error    t value Pr(>|t|)    
## (Intercept) -2.383e-15  4.848e-16 -4.916e+00   0.0161 *  
## X1           1.000e-01  1.462e-17  6.841e+15   <2e-16 ***
## X2                  NA         NA         NA       NA    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 4.622e-16 on 3 degrees of freedom
## Multiple R-squared:      1,  Adjusted R-squared:      1 
## F-statistic: 4.681e+31 on 1 and 3 DF,  p-value: < 2.2e-16

Karar ağacını kullanarak tahminimiz yapalım.

new_data <- data.frame(X1 = c(3, 7), X2 = c(5, 8))
predictions <- predict(tree_model, new_data, type = "class")
print(predictions)
## [1] 1 1
## Levels: 1 2 3 4 5

4.K- ortalama kümeleme

K-ortalama kümeleme (k-means clustering), bir veri setini belirli bir sayıda grup veya küme halinde ayırmak için kullanılan bir kümeleme algoritmasıdır. Bu algoritma, benzer veri noktalarını aynı grubun içinde toplamak amacıyla veri noktalarını farklı kümelerde gruplandırır.

K-ortalama kümeleme algoritması şu adımları izler:

  1. Başlangıçta, veri noktaları rastgele kümelerde gruplandırılır.
  2. Her bir veri noktası, o veri noktasına en yakın kümeye atanır.
  3. Veri noktalarının kümeleri üzerindeki ağırlık merkezi hesaplanır (centroid).
  4. Her bir veri noktası, en yakın ağırlık merkezi olan kümeye atanır.
  5. Adımlar 3 ve 4 tekrarlanarak, ağırlık merkezleri ve kümeler arasındaki mesafe minimize edilmeye çalışılır.
  6. Ağırlık merkezleri ve kümeler arasındaki mesafe minimum olduğunda, kümeleme işlemi tamamlanır.

K-ortalama kümeleme algoritması, çeşitli uygulamalarda kullanılır. Örneğin, pazarlama analizi, müşteri segmentasyonu, görüntü işleme ve veri madenciliği gibi alanlarda sıkça kullanılır. Bu algoritma sayesinde veri setlerini gruplandırarak, benzer özelliklere sahip veri noktalarını keşfedebilir ve daha iyi bir anlayış elde edebiliriz.

library(ggplot2)

İris veri kümesini yüklelim ve Yalnızca ilk iki özelliği kullanalım.

data(iris)
X <- iris[, c(1, 2)]

K-ortalamalar modelini oluşturalım sonra eğitiyelim

kmeans_model <- kmeans(X, centers = 3, nstart = 20)
cluster_labels <- kmeans_model$cluster

İris veri Kümeleri ve yeni verileri çizelim

plot(X, col = cluster_labels, pch = 19, main = "İris veri kümesi üzerinde K-ortalamalar kümelemesi",
     xlab = "Sepal uzunluk", ylab = "Sepal genişlik")

Sinir ağı

Sinir ağı (Neural Network), insan beyninin çalışma prensiplerinden esinlenerek tasarlanmış, yapay bir zeka modelidir. Sinir ağı, birçok yapay sinir hücresi (neuron) veya düğüm (node) kullanarak bilgiyi işler ve geliştirir.

Sinir ağları, verileri giriş katmanına alır, bu katman üzerinde işlemler yaparak verileri daha karmaşık şekillerde temsil eder ve çıkış katmanında sonuçları üretir. Bu katmanlar arasında birbirleriyle bağlantılar vardır ve her bir bağlantı bir ağırlıkla (weight) belirtilir. Bu ağırlıklar, sinir ağının ne kadar doğru sonuçlar üreteceğini etkileyen parametrelerdir.

Sinir ağları genellikle öğrenme süreci ile çalışır. Öğrenme, ağırlıkların ve bağlantıların optimize edildiği bir süreçtir. Veriler ağa verilir, ağ sonuçları üretir ve bu sonuçlar gerçek sonuçlarla karşılaştırılır. Sonuç ile gerçek sonuç arasındaki hata, ağırlıkların ve bağlantıların ayarlanmasında kullanılır. Hata geri yayılımı (backpropagation) algoritması, bu hataları geriye doğru yayarak ağırlıkların güncellenmesini sağlar.

Sinir ağları, birçok farklı uygulama alanında kullanılır. Örneğin, görüntü işleme, doğal dil işleme, ses tanıma, tahmin analizi gibi alanlarda başarıyla kullanılmaktadır. Çok katmanlı sinir ağları (deep neural networks), derin öğrenme (deep learning) olarak da adlandırılan bir alt dalı oluşturur ve son yıllarda büyük bir popülerlik kazanmıştır.

library(neuralnet)

Boston konut veri setini yükleyelim ve verileri eğitim ve test kümelerine ayıralım.

data(Boston, package = "MASS")
set.seed(123)
train_index <- sample(1:nrow(Boston), 0.8 * nrow(Boston))
train_data <- Boston[train_index, ]
test_data <- Boston[-train_index, ]

Şimdi eğitim verilerini kullanarak bir sinir ağı modeli oluşturacağız

13 giriş nöronu, 5 gizli nöron ve 1 çıkış nöronu sonra doğrusal bir çıktı işlevi kullanalım.

nn_model <- neuralnet(medv ~ ., data = train_data, hidden = 5, linear.output = TRUE)
plot(nn_model)

Bu kod aşağıdaki grafiği oluşturacaktır: Çizim, sinir ağı modelinin yapısını ve ağırlıkları göstermektedir. Giriş katmanında, Boston emlak veri kümesinin 13 özelliğine karşılık gelen 13 nöron bulunmaktadır. Gizli katmanda 5 nöron ve çıkış katmanında ev sahibi tarafından kullanılan evlerin medyan değerine karşılık gelen 1 nöron bulunmaktadır. Ağırlıklar bağlantılar üzerinde sayı olarak, yanlılıklar ise nöronlar üzerinde sayı olarak gösterilmektedir.