UYGULAMALI EKONOMETRI

ISMAEEL ALABED ALMOUSA

2024-01-31


IRIS

İris çiçekleri, soğanlı çok yıllık bitkilerdir. Barbata, Sibirya, Japon, İspanyol ve Çin iris türleri bulunur. Gösterişli çiçekleri olan barbata iris, sakal benzeri yapılarıyla dikkat çeker. Sibirya iris ince yapraklı ve zarif, Japon iris su kenarlarında yetişir. İspanyol iris küçük, renkli çiçeklere sahipken, Çin iris tek çiçeklidir. Irisler genellikle güneşi sever, iyi drenajlı topraklarda yetişir ve bakım gereksinimleri sınırlıdır.

Fisher’ın İris Veri Seti

Fisher’ın Iris Veri Seti, bilgisayar bilimi ve makine öğreniminde yaygın olarak kullanılan bir veri kümesidir. Bu veri seti, setosa, versicolor ve virginica olmak üzere üç iris çiçeği türünü içerir. Her bir çiçek türü için dört özellik ölçümü (uzunluk ve genişlik) içerir. Toplamda 150 örnek bulunur ve sınıflandırma modellerinin geliştirilmesi için kullanılır.

  • read_csv(“Iris.csv”) komutu, “Iris.csv” dosyasını okuyup veri çerçevesine dönüştürdüm. library(readr) ile readr paketi yükledim ve bu fonksiyon kullandım.
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.
  • R programlama dilinde “caret” paketini yüklemek için kullandım. Bu paket, makine öğrenimi modellerinin eğitimi, değerlendirmesi ve ayarlanması için kullanışlı araçlar sunar. Örneğin, veri ön işleme, model eğitimi, hiperparametre ayarı, model değerlendirmesi ve çapraz doğrulama gibi temel görevleri kolaylaştırır
library(caret)
## Loading required package: ggplot2
## Loading required package: lattice
  • R’deki “iris” veri setini yükler. Bu veri seti, çiçek türlerinin ölçümlerini içerir.

Iris veri kümesini ortama ekledim

data("iris")

değişkenine “iris.csv” dosya adını atar. Bu dosya adı, bir CSV formatındaki “iris” veri setini temsil ediyor

Veri kümesini yeniden adlandırım

Veri kümesi <- iris

Dosya adını tanımladım

filename <- "iris.csv"

“Iris” veri setinin sütun isimlerini belirtir. Bu komut, sütun isimlerini sırasıyla “Sepal.Length”, “Sepal.Width”, “Petal.Length”, “Petal.Width” ve “Species” olarak değiştirir.

Veri kümesindeki sütun adlarını ayarladım

colnames(Iris) <- c("Sepal.Length","Sepal.Width","Petal.Length","Petal.Width","Species")

“iris” veri setindeki “Species” değişkenine dayanarak, veriyi 0.80 (80%) eğitim ve 0.20 (20%) doğrulama alt kümelerine böler. Oluşturulan indeksler “validation_index” değişkenine atanır.

Eğitim için kullanabileceğimiz orijinal veri kümesindeki satırların %80’inin bir listesini oluşturdum

validation_index <- createDataPartition(iris$Species, p=0.80, list=FALSE)

“iris” veri setinde önceden belirlenen validation_index indeksine karşılık gelen gözlemleri çıkararak, geriye kalan verileri içeren bir doğrulama (validation) alt kümesini oluşturur ve bu alt küme “validation” adlı değişkene atanır. Yani, eğitim için kullanılacak veri setinden ayrılan bir doğrulama seti elde edilir.

Doğrulama için verilerin %20’sini seçtim

validation <- iris[-validation_index,]

daha önce belirlenen validation_index indeksine karşılık gelen gözlemleri kullanarak “iris” veri setini günceller. Yani, bu komut ile eğitim seti için kullanılacak gözlemleri içeren bir “iris” alt kümesi elde edilir.

Verilerin kalan %80’ini modelleri eğitmek ve test etmek için kullandım

iris <- iris[validation_index,]

“iris” veri setinin boyutunu (satır ve sütun sayısı) gösterir

Veri kümesinin boyutları

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.

Ver özellik için liste türleri

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

“iris” veri setinin ilk altı gözlemini görüntüler. Bu komut, veri setinin başındaki verileri incelemek için kullanılır.

Verilerin ilk 5 satırına bir göz atarım

head(iris)
##   Sepal.Length Sepal.Width Petal.Length Petal.Width Species
## 1          5.1         3.5          1.4         0.2  setosa
## 2          4.9         3.0          1.4         0.2  setosa
## 5          5.0         3.6          1.4         0.2  setosa
## 6          5.4         3.9          1.7         0.4  setosa
## 8          5.0         3.4          1.5         0.2  setosa
## 9          4.4         2.9          1.4         0.2  setosa

“iris” veri setindeki “Species” değişkeninin faktör (factor) türündeki sınıf seviyelerini döndürür. Yani, “Species” değişkeninin alabileceği kategorik değerleri veya sınıf seviyelerini listeler. Bu komut, özellikle sınıflandırma problemlerinde kullanılan hedef değişkenin sınıf etiketlerini görmek için kullanışlıdır.

Sınıfın seviyelerini listeledim

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

Bu iki satır kod, “iris” veri setindeki “Species” değişkeninin sınıf frekanslarını ve yüzdelik oranlarını içeren bir tabloyu oluşturur.

İlk satırda: “Sipariş Tablosu” (frequency table) oluşturulur ve prop.table fonksiyonu ile sınıf yüzdelik oranları hesaplanır. Bu bilgileri içeren “percentage” adlı bir vektör oluşturulur. İkinci satırda: Bu iki satır kod, “iris” veri setindeki “Species” değişkeninin sınıf frekanslarını ve yüzdelik oranlarını içeren bir tabloyu oluşturur. İlk satırda:

percentage <- prop.table(table(iris$Species)) * 100 “Sipariş Tablosu” (frequency table) oluşturulur ve prop.table fonksiyonu ile sınıf yüzdelik oranları hesaplanır. Bu bilgileri içeren “percentage” adlı bir vektör oluşturulur.

İkinci satırda:table(iris$Species) ile sınıf frekansları alınır ve percentage ile önceki adımda hesaplanan yüzdelik oranları içeren bir veri çerçevesi oluşturulur. cbind fonksiyonu, sınıf frekansları ve yüzdelik oranları içeren bu iki bilgiyi birleştirir. Oluşturulan veri çerçevesinde “freq” sütunu sınıf frekanslarını, “percentage” sütunu ise yüzdelik oranları içerir.

Sınıf dağılımını özetledim

percentage <- prop.table(table(iris$Species)) * 100
cbind(freq=table(iris$Species), percentage=percentage)
##            freq percentage
## setosa       40   33.33333
## versicolor   40   33.33333
## virginica    40   33.33333

Bu özet, her sayısal sütun için temel istatistikleri içerir: minimum, 1. çeyrek, medyan, 3. çeyrek, maksimum ve bazı durumlarda ortalamayı içerir. Ayrıca, faktör değişkenler için sınıf seviyelerinin sayısını gösterir.

Örneğin, Sepal Length, Sepal Width, Petal Length ve Petal Width sütunları için minimum, 1. çeyrek, medyan, 3. çeyrek, maksimum değerleri ve Species sütunu için sınıf seviyelerinin sayısını içerir. summary fonksiyonu, veri setini hızlı bir şekilde anlamak için kullanışlı bir araçtır.

Özellik dağılımlarını özetledim

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.175   1st Qu.:2.800   1st Qu.:1.575   1st Qu.:0.300  
##  Median :5.800   Median :3.000   Median :4.400   Median :1.300  
##  Mean   :5.841   Mean   :3.059   Mean   :3.760   Mean   :1.192  
##  3rd Qu.:6.400   3rd Qu.:3.400   3rd Qu.:5.100   3rd Qu.:1.800  
##  Max.   :7.700   Max.   :4.400   Max.   :6.900   Max.   :2.500  
##        Species  
##  setosa    :40  
##  versicolor:40  
##  virginica :40  
##                 
##                 
## 

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.

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.

Giriş ve çıkışı ayırladım

x <- iris[,1:4]
y <- iris[,5]
  • “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)): Bu komut, grafik penceresini bir satırda dört sütuna bölmek için kullanılır.

  • for(i in 1:4) { boxplot(x[,i], main=names(iris)[i]) }: Bu döngü, her bir sütunun boxplot’ını oluşturur ve 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.

  • Sonuç olarak, pencerenin her sütununda bir boxplot olacak şekilde dört ayrı grafik görüntülenir.

Bir görüntüdeki her özellik için kutu grafiği

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

  • “y” değişkeninin (iris veri setindeki “Species” sütunu) grafiğini çizer. Bu durumda, “y” değişkeni kategorik bir değişken olduğu için, basit bir çubuk grafiği (bar plot) oluşturulur. Çubuk grafiği, her bir sınıfın (setosa, versicolor, virginica) veri setinde kaç kez bulunduğunu gösterir. Bu şekilde, sınıfların dağılımını ve frekanslarını hızlı bir şekilde görselleştirmek mümkündür.

Sınıf dökümü için bar grafiği

plot(y)

  • featurePlot(x=x, y=y, plot=“ellipse”) komutu, ç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. Bu matris, her bir özellikle sınıflar arasındaki ilişkiyi anlamak ve potansiyel desenleri belirlemek için bir araç sağlar.

Dağılım grafiği matrisi

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

  • çok değişkenli bir veri setindeki özelliklerin sınıflar içindeki dağılımını göstermek için kutu (box) grafikleri kullanır. Bu komut, her bir özellik için sınıfların merkezi eğilimini, yayılımını ve aykırı değerleri anlamak için kutu grafikleri çizer. Bu sayede sınıflar arasındaki farkları daha ayrıntılı bir şekilde görselleştirmenize yardımcı olur.

Her bir özellik için kutu ve bıyık grafikleri

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

* featurePlot” fonksiyonu ile çizilecek grafiklerin x ve y eksenlerinin ölçeklerinin bağımsız olarak özelleştirilmesini sağlar. Bu özel ayar, her bir özellik için sınıfların dağılımını daha iyi anlamak ve karşılaştırmak için kullanılır.

Bu özellik, x ve y eksenlerinin ölçeklerini “free” olarak ayarlar. “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.

Sınıf değerine göre her özellik için yoğunluk grafikleri

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 çapraz doğrulama yapar. Çapraz doğrulama 10 katlıdır ve değerlendirme metriği olarak doğruluk kullanılır.

10 Kat çapraz doğrulama kullanarak algoritmaları çalıştırdım

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

a) Doğrusal algoritmalar

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

b) Doğrusal olmayan algoritmalar

CART

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

KNN

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

c) Gelişmiş algoritmalar

SVM

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

Rastgele Orman

set.seed(7)
fit.rf <- train(Species~., data=iris, method="rf", metric=metric, trControl=control)
  • 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.

Modellerin doğruluğunu özetlemek

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.7500000 0.8541667 0.9166667 0.9000000 0.9166667    1    0
## knn  0.8333333 0.9166667 1.0000000 0.9583333 1.0000000    1    0
## svm  0.8333333 0.9166667 0.9166667 0.9416667 1.0000000    1    0
## rf   0.7500000 0.9166667 0.9166667 0.9333333 1.0000000    1    0
## 
## Kappa 
##       Min. 1st Qu. Median   Mean 3rd Qu. Max. NA's
## lda  0.875 0.90625  1.000 0.9625   1.000    1    0
## cart 0.625 0.78125  0.875 0.8500   0.875    1    0
## knn  0.750 0.87500  1.000 0.9375   1.000    1    0
## svm  0.750 0.87500  0.875 0.9125   1.000    1    0
## rf   0.625 0.87500  0.875 0.9000   1.000    1    0
  • Bu kod, çeşitli sınıflandırma modellerinin çapraz doğrulama sonuçlarını bir araya getirir ve bu sonuçları görsel olarak karşılaştırmak üzere bir nokta grafiği oluşturur. dotplot(results) komutu, farklı modellerin performansını hızlıca değerlendirmenizi sağlar.

Modellerin doğruluğunu karşılaştırdım

dotplot(results)

* eğitilmiş bir Linear Discriminant Analysis (LDA) modelinin ö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 edinebilirsiniz.

En İyi Modeli özetledim

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, modelin doğruluğunu ve performansını anlamak için kullanılan bir yöntemdir.

Doğrulama veri kümesinde LDA becerisini tahmin ettim

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