Spaceship Titanic
Kozmik bir gizemi çözmek için veri bilimi becerilerinize ihtiyaç duyulan 2912 yılına hoş geldiniz. Dört ışık yılı öteden bir sinyal aldık ve işler pek iyi görünmüyor.
Uzay Gemisi Titanik, bir ay önce fırlatılan yıldızlararası bir yolcu gemisiydi. Gemide neredeyse 13.000 yolcu bulunan gemi, güneş sistemimizden göçmenleri yakın yıldızların yörüngesinde bulunan üç yeni yaşanabilir dış gezegene taşımak üzere ilk yolculuğuna çıktı.
Dikkatsiz Uzay Gemisi Titanic, ilk varış noktası olan kavurucu 55 Cancri E’ye giderken Alpha Centauri’yi dönerken, bir toz bulutunun içine gizlenmiş bir uzay-zaman anormalliğiyle çarpıştı. Ne yazık ki 1000 yıl öncesindeki adaşı ile benzer bir kaderle karşılaştı. Gemi sağlam kalmasına rağmen yolcuların neredeyse yarısı alternatif bir boyuta taşındı!
İlk önce elimizdeki data verilerini library kodunu kullanarak R yüklememiz gerekiyor.
DATALARI İNDİRMEK VE PAKETLERİ YÜKLEMEK
Projemizde kullandığımız dataları daha iyi okunur hale ve daha etkili kod yazabilmek için “tidyverse” paketini yükleyelim.
Data verilerini raporlamak ve özetlemek için “explore” paketini yükleyelim.
Şimdi datalarımızı ilk önce kontrol edelim elimizdeki verileri öğrenelim.
## # A tibble: 14 × 8
## variable type na na_pct unique min mean max
## <chr> <chr> <int> <dbl> <int> <dbl> <dbl> <dbl>
## 1 PassengerId chr 0 0 8693 NA NA NA
## 2 HomePlanet chr 201 2.3 4 NA NA NA
## 3 CryoSleep lgl 217 2.5 3 0 0.36 1
## 4 Cabin chr 199 2.3 6561 NA NA NA
## 5 Destination chr 182 2.1 4 NA NA NA
## 6 Age dbl 179 2.1 81 0 28.8 79
## 7 VIP lgl 203 2.3 3 0 0.02 1
## 8 RoomService dbl 181 2.1 1274 0 225. 14327
## 9 FoodCourt dbl 183 2.1 1508 0 458. 29813
## 10 ShoppingMall dbl 208 2.4 1116 0 174. 23492
## 11 Spa dbl 183 2.1 1328 0 311. 22408
## 12 VRDeck dbl 188 2.2 1307 0 305. 24133
## 13 Name chr 200 2.3 8474 NA NA NA
## 14 Transported lgl 0 0 2 0 0.5 1
## # A tibble: 13 × 8
## variable type na na_pct unique min mean max
## <chr> <chr> <int> <dbl> <int> <dbl> <dbl> <dbl>
## 1 PassengerId chr 0 0 4277 NA NA NA
## 2 HomePlanet chr 87 2 4 NA NA NA
## 3 CryoSleep lgl 93 2.2 3 0 0.37 1
## 4 Cabin chr 100 2.3 3266 NA NA NA
## 5 Destination chr 92 2.2 4 NA NA NA
## 6 Age dbl 91 2.1 80 0 28.7 79
## 7 VIP lgl 93 2.2 3 0 0.02 1
## 8 RoomService dbl 82 1.9 843 0 219. 11567
## 9 FoodCourt dbl 106 2.5 903 0 439. 25273
## 10 ShoppingMall dbl 98 2.3 716 0 177. 8292
## 11 Spa dbl 101 2.4 834 0 303. 19844
## 12 VRDeck dbl 80 1.9 797 0 311. 22272
## 13 Name chr 94 2.2 4177 NA NA NA
Öğrenilen bilgilere göre datalarımızda bilinmeyen verilerin çoğunluğu ve verilen bilgilerden ‘PassengerId’ ve ‘Cabin’ sütunlarının birden fazla bilginin tek bir sütunda birleştirilmiş olması verileri okumamızı zorlaştırıyor. Bunun için ‘PassengerId’ sütununu “ailenum ve ailesıra”, ‘Cabin’ sütununu ise “deck, num ve side” olmak üzere ayırıp okumayı kolaylaştıralım. Yaptığımız işlemleri her iki data içinde kullanmalıyız.
PassengerId Ayrıştırma
Cabin Ayrıştırma
train[c('deck',"num", "side")]<- str_split_fixed(train$Cabin, "/",3)
test[c('deck',"num", "side")]<- str_split_fixed(test$Cabin, "/",3)Şimdi ‘Cabin’ sütunu fazlalık oluşturduğu için verilerden kaldıralım..
Datalarımıza eklemeler yapıldıktan sonra boş kutucuklar varsa onları “NA” değeriyle dolduralım. Bu işlem bizi daha iyi sonuca ulaştırmayı sağlayacak.
Yaptığımız işlemleri şimdi kontrol edelim.
TRAİN İÇİN DESCRİBE_ALL
## # A tibble: 18 × 8
## variable type na na_pct unique min mean max
## <chr> <chr> <int> <dbl> <int> <dbl> <dbl> <dbl>
## 1 PassengerId chr 0 0 8693 NA NA NA
## 2 HomePlanet chr 201 2.3 4 NA NA NA
## 3 CryoSleep lgl 217 2.5 3 0 0.36 1
## 4 Destination chr 182 2.1 4 NA NA NA
## 5 Age dbl 179 2.1 81 0 28.8 79
## 6 VIP lgl 203 2.3 3 0 0.02 1
## 7 RoomService dbl 181 2.1 1274 0 225. 14327
## 8 FoodCourt dbl 183 2.1 1508 0 458. 29813
## 9 ShoppingMall dbl 208 2.4 1116 0 174. 23492
## 10 Spa dbl 183 2.1 1328 0 311. 22408
## 11 VRDeck dbl 188 2.2 1307 0 305. 24133
## 12 Name chr 200 2.3 8474 NA NA NA
## 13 Transported lgl 0 0 2 0 0.5 1
## 14 ailenum chr 0 0 6217 NA NA NA
## 15 ailesıra chr 0 0 8 NA NA NA
## 16 deck chr 199 2.3 9 NA NA NA
## 17 num chr 199 2.3 1818 NA NA NA
## 18 side chr 199 2.3 3 NA NA NA
TEST İÇİN DESCRİBE_ALL
## # A tibble: 17 × 8
## variable type na na_pct unique min mean max
## <chr> <chr> <int> <dbl> <int> <dbl> <dbl> <dbl>
## 1 PassengerId chr 0 0 4277 NA NA NA
## 2 HomePlanet chr 87 2 4 NA NA NA
## 3 CryoSleep lgl 93 2.2 3 0 0.37 1
## 4 Destination chr 92 2.2 4 NA NA NA
## 5 Age dbl 91 2.1 80 0 28.7 79
## 6 VIP lgl 93 2.2 3 0 0.02 1
## 7 RoomService dbl 82 1.9 843 0 219. 11567
## 8 FoodCourt dbl 106 2.5 903 0 439. 25273
## 9 ShoppingMall dbl 98 2.3 716 0 177. 8292
## 10 Spa dbl 101 2.4 834 0 303. 19844
## 11 VRDeck dbl 80 1.9 797 0 311. 22272
## 12 Name chr 94 2.2 4177 NA NA NA
## 13 ailenum chr 0 0 3063 NA NA NA
## 14 ailesıra chr 0 0 8 NA NA NA
## 15 deck chr 100 2.3 9 NA NA NA
## 16 num chr 100 2.3 1506 NA NA NA
## 17 side chr 100 2.3 3 NA NA NA
Yaptığımız kontrolde görüldüğü üzere ‘PassengerId’ ve ‘Cabin’ sütunlarını doğru bi şekilde ayırmışız. Ancak eksik verileri “NA” değerleriyle değiştirme işleminde eksiklikler mevcut. Bu eksiklikleri her bir verilen veri için her iki datada da aşağıdaki kodları kullanarak eksik bilgileri dolduralım.
EKSİK DEĞERLERİ DOLDURMA
HomePlanet
CryoSleep
Destination
VIP
deck
num
side
Burada kullandığımız kod chr(karakter) değerine sahip veri bilgileri için kullandık. Bu veri bilgileri sözel ifadeler belirttiği için ‘NA’ değeri kullanıldı.
Verilen verilerin kaç tür bilgiye sahip olduğunu öğrenmek için ‘levels’ kodu kullanılır. Örnek olarak HomePlanet bilgisini kullanalım.
## [1] "Earth" "Europa" "Mars" NA
Görüldüğü üzere eksik verileri NA değerleriyle değiştirdiğimizde bu NA değeri bize bir bilgiymiş gibi göstermiyor ve tahmin yapma işleminde doğru tahmine ulaştırmada sıkıntı yaratacaktır. Bu NA eksik bilgi değerini “NA” etiketi atamak için aşağıdaki kodu kullanabiliriz. Her iki data içinde bulunan chr(karakter) verileri için kullanmalıyız.
HomePlanet
levels(train$HomePlanet)[is.na(levels(train$HomePlanet))] <- "NA"
levels(test$HomePlanet)[is.na(levels(test$HomePlanet))] <- "NA"CryoSleep
levels(train$CryoSleep)[is.na(levels(train$CryoSleep))] <- "NA"
levels(test$CryoSleep)[is.na(levels(test$CryoSleep))] <- "NA"Destination
levels(train$Destination)[is.na(levels(train$Destination))] <- "NA"
levels(test$Destination)[is.na(levels(test$Destination))] <- "NA"VIP
levels(train$VIP)[is.na(levels(train$VIP))] <- "NA"
levels(test$VIP)[is.na(levels(test$VIP))] <- "NA"deck
levels(train$deck)[is.na(levels(train$deck))] <- "NA"
levels(test$deck)[is.na(levels(test$deck))] <- "NA"side
levels(train$side)[is.na(levels(train$side))] <- "NA"
levels(test$side)[is.na(levels(test$side))] <- "NA"Şimdi yaptığımız işlemi ‘levels’ kodunu kullanarak kontrol edelim. Örnek olarak side verisini alalım.
## [1] "P" "S" "NA"
## [1] "P" "S" "NA"
Görüldüğü üzere NA bilgisini “NA” etiketiyle değiştirmiş olduk.
Yukarıda yaptığımız işlemlerin hepsi chr(karakter) sözel veri bilgisine sahip veriler içindi. Sayısal ve logical (dbl ve lgl) değerler için ‘NA’ değeri girilmez. Bu eksik değerler için ‘NA’ değeri yerine ortalamalarını girebiliriz. Train datası için ‘Transported’ verisine göre test datası için ise ‘HomePlanet’ verisine göre değişkenleri gruplandıralım.
FoodCourt
train <- train %>% mutate(FoodCourt = coalesce(FoodCourt, 0))
test <- test %>% mutate(FoodCourt = coalesce(FoodCourt, 0))Age
RoomService
train <- train %>% mutate(RoomService = coalesce(RoomService, 0))
test <- test %>% mutate(RoomService = coalesce(RoomService, 0))ShoppingMall
train <- train %>% mutate(ShoppingMall = coalesce(ShoppingMall, 0))
test <- test %>% mutate(ShoppingMall = coalesce(ShoppingMall, 0))Spa
VRDeck
train <- train %>% mutate(VRDeck = coalesce(VRDeck, 0))
test <- test %>% mutate(VRDeck = coalesce(VRDeck, 0))## # A tibble: 18 × 8
## variable type na na_pct unique min mean max
## <chr> <chr> <int> <dbl> <int> <dbl> <dbl> <dbl>
## 1 PassengerId chr 0 0 8693 NA NA NA
## 2 HomePlanet fct 0 0 4 NA NA NA
## 3 CryoSleep fct 0 0 3 NA NA NA
## 4 Destination fct 0 0 4 NA NA NA
## 5 Age dbl 0 0 80 0 28.2 79
## 6 VIP fct 0 0 3 NA NA NA
## 7 RoomService dbl 0 0 1273 0 220. 14327
## 8 FoodCourt dbl 0 0 1507 0 448. 29813
## 9 ShoppingMall dbl 0 0 1115 0 170. 23492
## 10 Spa dbl 0 0 1327 0 305. 22408
## 11 VRDeck dbl 0 0 1306 0 298. 24133
## 12 Name chr 200 2.3 8474 NA NA NA
## 13 Transported lgl 0 0 2 0 0.5 1
## 14 ailenum chr 0 0 6217 NA NA NA
## 15 ailesıra chr 0 0 8 NA NA NA
## 16 deck fct 0 0 9 NA NA NA
## 17 num fct 0 0 1818 NA NA NA
## 18 side fct 0 0 3 NA NA NA
## # A tibble: 17 × 8
## variable type na na_pct unique min mean max
## <chr> <chr> <int> <dbl> <int> <dbl> <dbl> <dbl>
## 1 PassengerId chr 0 0 4277 NA NA NA
## 2 HomePlanet fct 0 0 4 NA NA NA
## 3 CryoSleep fct 0 0 3 NA NA NA
## 4 Destination fct 0 0 4 NA NA NA
## 5 Age dbl 0 0 79 0 28.0 79
## 6 VIP fct 0 0 3 NA NA NA
## 7 RoomService dbl 0 0 842 0 215. 11567
## 8 FoodCourt dbl 0 0 902 0 429. 25273
## 9 ShoppingMall dbl 0 0 715 0 173. 8292
## 10 Spa dbl 0 0 833 0 296. 19844
## 11 VRDeck dbl 0 0 796 0 305. 22272
## 12 Name chr 94 2.2 4177 NA NA NA
## 13 ailenum chr 0 0 3063 NA NA NA
## 14 ailesıra chr 0 0 8 NA NA NA
## 15 deck fct 0 0 9 NA NA NA
## 16 num fct 0 0 1506 NA NA NA
## 17 side fct 0 0 3 NA NA NA
Göründüğü üzere bütün boş olan verileri NA veya ortalamalar ile doldurduk ama name verisine herhangi bir işlem yapmadık çünkü name verisi bize tahmin yapmada herhangi bir kolaylık sağlamayacaktır. Bunun yerine PassengerID verisi bize yardımcı olabilecektir. name verisi bir işimize yaramayacağı için her iki datada da silebiliriz. Bunun için aşağıdaki kodu kullanabiliriz.
‘ailenum ve ailesıra’ verilerini de silelim.
Böylelikle datalarımızı temizlemiş olup daha iyi tahminlerde bulunabiliriz.
RAPORLAMA
Şimdi temizlediğimiz data verilerinin raporlarını oluşturalım. Bunun için ilk önce ‘DataExplorer’ paketi indirilir ve daha sonra library kodu kullanılarak dataya yüklenir. Bu işlem yapıldıktan sonra ‘create_report’ kodu kullanılarak verilerin raporu oluşturulur.
TRAİN
##
|
| | 0%
|
|. | 2%
|
|.. | 5% [global_options]
|
|... | 7%
|
|.... | 10% [introduce]
|
|.... | 12%
|
|..... | 14% [plot_intro]
|
|...... | 17%
|
|....... | 19% [data_structure]
|
|........ | 21%
|
|......... | 24% [missing_profile]
|
|.......... | 26%
|
|........... | 29% [univariate_distribution_header]
|
|........... | 31%
|
|............ | 33% [plot_histogram]
|
|............. | 36%
|
|.............. | 38% [plot_density]
|
|............... | 40%
|
|................ | 43% [plot_frequency_bar]
|
|................. | 45%
|
|.................. | 48% [plot_response_bar]
|
|.................. | 50%
|
|................... | 52% [plot_with_bar]
|
|.................... | 55%
|
|..................... | 57% [plot_normal_qq]
|
|...................... | 60%
|
|....................... | 62% [plot_response_qq]
|
|........................ | 64%
|
|......................... | 67% [plot_by_qq]
|
|.......................... | 69%
|
|.......................... | 71% [correlation_analysis]
|
|........................... | 74%
|
|............................ | 76% [principal_component_analysis]
|
|............................. | 79%
|
|.............................. | 81% [bivariate_distribution_header]
|
|............................... | 83%
|
|................................ | 86% [plot_response_boxplot]
|
|................................. | 88%
|
|................................. | 90% [plot_by_boxplot]
|
|.................................. | 93%
|
|................................... | 95% [plot_response_scatterplot]
|
|.................................... | 98%
|
|.....................................| 100% [plot_by_scatterplot]
## "C:/Program Files/RStudio/resources/app/bin/quarto/bin/tools/pandoc" +RTS -K512m -RTS "C:\Users\Win10\Desktop\finalproB\report.knit.md" --to html4 --from markdown+autolink_bare_uris+tex_math_single_backslash --output pandoc1a8c5dd821ce.html --lua-filter "C:\Users\Win10\AppData\Local\R\win-library\4.3\rmarkdown\rmarkdown\lua\pagebreak.lua" --lua-filter "C:\Users\Win10\AppData\Local\R\win-library\4.3\rmarkdown\rmarkdown\lua\latex-div.lua" --embed-resources --standalone --variable bs3=TRUE --section-divs --table-of-contents --toc-depth 6 --template "C:\Users\Win10\AppData\Local\R\win-library\4.3\rmarkdown\rmd\h\default.html" --no-highlight --variable highlightjs=1 --variable theme=yeti --mathjax --variable "mathjax-url=https://mathjax.rstudio.com/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML" --include-in-header "C:\Users\Win10\AppData\Local\Temp\RtmpcZCsZf\rmarkdown-str1a8c3c197303.html"
TEST
##
|
| | 0%
|
|. | 2%
|
|.. | 5% [global_options]
|
|... | 7%
|
|.... | 10% [introduce]
|
|.... | 12%
|
|..... | 14% [plot_intro]
|
|...... | 17%
|
|....... | 19% [data_structure]
|
|........ | 21%
|
|......... | 24% [missing_profile]
|
|.......... | 26%
|
|........... | 29% [univariate_distribution_header]
|
|........... | 31%
|
|............ | 33% [plot_histogram]
|
|............. | 36%
|
|.............. | 38% [plot_density]
|
|............... | 40%
|
|................ | 43% [plot_frequency_bar]
|
|................. | 45%
|
|.................. | 48% [plot_response_bar]
|
|.................. | 50%
|
|................... | 52% [plot_with_bar]
|
|.................... | 55%
|
|..................... | 57% [plot_normal_qq]
|
|...................... | 60%
|
|....................... | 62% [plot_response_qq]
|
|........................ | 64%
|
|......................... | 67% [plot_by_qq]
|
|.......................... | 69%
|
|.......................... | 71% [correlation_analysis]
|
|........................... | 74%
|
|............................ | 76% [principal_component_analysis]
|
|............................. | 79%
|
|.............................. | 81% [bivariate_distribution_header]
|
|............................... | 83%
|
|................................ | 86% [plot_response_boxplot]
|
|................................. | 88%
|
|................................. | 90% [plot_by_boxplot]
|
|.................................. | 93%
|
|................................... | 95% [plot_response_scatterplot]
|
|.................................... | 98%
|
|.....................................| 100% [plot_by_scatterplot]
## "C:/Program Files/RStudio/resources/app/bin/quarto/bin/tools/pandoc" +RTS -K512m -RTS "C:\Users\Win10\Desktop\finalproB\report.knit.md" --to html4 --from markdown+autolink_bare_uris+tex_math_single_backslash --output pandoc1a8c7e0b3688.html --lua-filter "C:\Users\Win10\AppData\Local\R\win-library\4.3\rmarkdown\rmarkdown\lua\pagebreak.lua" --lua-filter "C:\Users\Win10\AppData\Local\R\win-library\4.3\rmarkdown\rmarkdown\lua\latex-div.lua" --embed-resources --standalone --variable bs3=TRUE --section-divs --table-of-contents --toc-depth 6 --template "C:\Users\Win10\AppData\Local\R\win-library\4.3\rmarkdown\rmd\h\default.html" --no-highlight --variable highlightjs=1 --variable theme=yeti --mathjax --variable "mathjax-url=https://mathjax.rstudio.com/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML" --include-in-header "C:\Users\Win10\AppData\Local\Temp\RtmpcZCsZf\rmarkdown-str1a8c3c2216e1.html"
ÇUBUK GRAFİĞİ YORUMLAMA
Bu raporlara baktığımızda train datasındaki Çubuk Grafiğini incelediğimizde;
Bu çubuk grafiğinde
‘Destination’(varılacak gezegen) grafiğini incelediğimizde en çok gitmek
istenilen gezegen TRAPPIST-1e’iken en az gitmek istenilen gezegen ise
PSOJ318.5-22 gezegenidir. Nereye gideceği bilinmeyen yolcuların sayısı
ise 0-200 arasında bi değerdir.
Şimdi bir histogram grafiği çizip yorum yapalım. Train datasından HomePlanet ve Age verilerini alalım. Bunun için aşağıdaki kodları kullanabiliriz.
HİSTOGRAM GRAFİĞİ YORUMLAMA
ÖRNEK1
ggplot(train, aes(x = Age)) +
geom_histogram(fill = "white", color = "black") +
facet_grid(HomePlanet ~ .)Bu grafiği incelediğimizde hangi gezegenden (HomePlanet) hangi yaş (Age) grupları ne kadar kişi gitmiştir onu görebiliriz. Grafikteki bilgiler “Earth, Europa, Mars ve NA(yani bilinmeyen)” gezegenlerimiz ve “Age” yani yaş bilgileri bulunuyor. Bu grafiği yorumlamak istediğimizde yaş gruplarının çoğunluğu Earth gezegeninden gittiği görülüyor. Earth gezegeninden giden çoğunluk yaş grubu 20-40 yaş grupları arasıdır.
Şimdide HomePlanet gezegenlerinden gidenlerin hangi gezegene gittiklerini yani Destination gezegenlerinden hangisine gittiklerini inceleyelim.
ÖRNEK2
ggplot(train, aes(x = HomePlanet)) +
geom_histogram(stat = "count", fill = "white", color = "black") +
facet_grid(Destination ~ .)Bu grafik verilerini incelediğimizde Earth gezegeninden giden kişilerin 3000’den fazlasının TRAPPIST-1e gezegenine, en azının bilinmeyen bir gezegene gittiği görülüyor. Europa gezegeninden giden kişilerin en azı PSO J318.5-22 gezegenine gitmiştir.
Şimdi tahminlerde bulunabiliriz.
TAHMİN OLUŞTURMA
Tahmin oluşturmak için ilk önce veri setleri oluşturmamız gerekiyor. Oluşturacağımız veri setleri bize tahmin yapmada yardımcı olacaktır. Oluşturacağımız veri setlerinin isimlerini “trainseti ve testseti” olacak şekilde oluşturalım.
Bu oluşturduğumuz veri setleri train setindeki son 16 gözlemi test setindeki son 15 gözlemi içerir.
Data setlerini oluşturduktan sonra tahminde bulunmak için ilk önce kullanacağımız paketi yükleyelim daha sonra her seferinde aynı rastgelelikte tahminlerde bulunmak için veya analizlerde tekrarlığı arttırmak için ‘set.seed’ kodunu kullanalım.
Daha sonra oluşturduğumuz veri setlerini belirtilen oranda iki ayrı alt küme oluşturmak için aşağıdaki kodları kullanırız. Yeni oluşturacağımız iki alt kümenin isimleri sırasıyla ‘trainaltküme’ ve ‘testaltküme’ olsun.
split = sample.split(trainseti$Transported, SplitRatio = 0.80)
trainaltküme = subset(trainseti, split == TRUE)
testaltküme= subset(trainseti, split == FALSE)Şimdi “NAİVE BAYES” modelini kullanarak bir tahmin işleminde bulunalım. İlk önce ‘e1071’ paketini yükleyelim.
NAİVE BAYES MODELİ
library(e1071)
fit_nb <- naiveBayes(Transported ~., data = trainaltküme)
preds <- predict(fit_nb, newdata = testaltküme, type = "raw") %>%
data.frame()Burada kullanılan kodlardan ‘fit_nb’ isimli olan NAİVE BAYES modeli üzerinden sınıflandırma oluşturur. ‘preds’ isimli kod ise bu model ve sınıflandırma üzerinden tahminde bulunur.
Daha sonra yaptığımız sınıflandırmalarda tahmin edilen olasılık 0.5 den büyük ise y_pred değeri ‘1’ olacak aksi takdirde ‘0’ olacaktır.
Şimdi bir karşıtlık matrisi kuralım ve yaptığımız sınıflandırmaların tahmin performansına bakalım.
## y_pred
## y_true 0 1
## 0 444 419
## 1 70 806
## [1] 0.7188039
Yaptığımız bu işlemlerden sonra ‘naivebayes_sonucu’ adı verdiğimiz matrisini oluşturalım.
Daha sonra bu matrisi bir veri setine dönüştürelim.
Bu veri setini düzenliyelim Transported sütununda ki bilgilerin baş harfini büyük geri kalanını küçük yazmak için aşağıdaki kodu kullanalım.
Bu veri setini şimdi bir CSV dosyasına yazmak için aşağıdaki kodu kullanalım.
Böylelikle NAİVEBAYES modelinde tahmine ulaşmış bulunuyoruz. Tahmin sonucumuzu öğrenmek için kaggle.com sitesine girip dataları aldığımız SPACESHİP TİTANİC bölümünde submissions SUBMİT PREDİCTİON işlemi yaparak sonucumuzu öğrenebiliriz.
NAİVEBAYES SONUÇ
Görüldüğü üzere sonucumuz 0.71662 yani yaklaşık %72’lik bir sonuca ulaştığımızı görüyoruz. Bu da yeterli bir düzeyde tahmin yaptığımızı gösterir.
SVM MODELİ
SVM modeli nedir?
SVM (Support Vector Machine), bir makine öğrenimi algoritmasıdır ve hem sınıflandırma (classification) hem de regresyon (regression) problemlerini çözmek için kullanılabilir. SVM, özellikle sınıflandırma problemlerinde etkili bir şekilde çalışan ve yüksek boyutlu veri setleriyle başa çıkabilen bir algoritmadır.
SVM’in temel amacı, veri noktalarını iki veya daha fazla sınıf arasında bir hiper düzlemle en iyi şekilde ayırmaktır. Sınıflar arasındaki bu hiper düzlem, veri noktalarını en iyi şekilde ayıran ve sınıflandırma hatasını minimize eden bir düzlemdir. SVM, bu hiper düzlemi belirlerken destek vektörleri kullanır. Destek vektörler, sınıflar arasındaki hiper düzleme en yakın olan veri noktalarını ifade eder.
SVM modeliyle tahminde bulunalım. İlk önce gereken paketleri yükleyelim.
library(e1071)
fit_svm <- svm(Transported ~ ., data = trainaltküme,
type = 'C-classification',
kernel = 'linear')
preds <- predict(fit_svm, newdata = testaltküme, type = "raw") %>%
data.frame()## y_pred
## y_true 0 1
## 0 683 180
## 1 191 685
## [1] 0.786659
SVM MODELİ SONUCU
SVM modelinden aldığımız sonuca göre
yaklaşık %80’lik doğru tahminde bulmuşuz. NaiveBayes modeline göre
oldukça iyi bir sonuç aldık.
Şimdi SVM RADİAL yani KERNEL adı verdiğimiz modeli kullanarak tahminde bulunalım.
SVM RADİAL(KERNEL) MODELİ
KERNEL SONUÇ
KERNEL sonucumuzu da aldık. Sonuca
göre şuan da kullandığımız 3 modelden en iyi sonucu KERNEL modeli vermiş
oldu. Tahminlerde bulunduğumuz da KERNEL modeli en iyi şekilde bize
yardımcı olacaktır.