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ı!

Proje açıklamaları

PassengerId - Her yolcu için benzersiz bir Kimlik. Her Kimlik gggg_pp biçimini alır; burada gggg yolcunun birlikte seyahat ettiği grubu belirtir ve pp grup içindeki numaradır. Bir gruptaki insanlar çoğunlukla aile üyeleridir, ancak her zaman değil.

HomePlanet - Yolcunun ayrıldığı gezegen, genellikle daimi ikamet ettikleri gezegen.

CryoSleep - Yolcunun yolculuk süresince animasyonun askıya alınmasını seçip seçmediğini belirtir. Dondurucu uykudaki yolcular kabinlerine hapsedilir.

Cabin - Yolcunun kaldığı kabin numarası. Güverte/numara/yan formunu alır; burada taraf, İskele için P veya Sancak için S olabilir.

Hedef - Yolcunun ineceği gezegen.

Age - Yolcunun yaşı.

VIP - Yolcunun yolculuk sırasında özel VIP hizmeti için ödeme yapıp yapmadığı. RoomService, FoodCourt, Alışveriş Merkezi, Spa, VRDeck - Yolcunun, Spaceship Titanic’in birçok lüks olanağının her birinde fatura ettiği tutar.

Name - Yolcunun adı ve soyadı.

Transported - Yolcunun başka bir boyuta taşınıp taşınmadığı. Bu hedeftir, tahmin etmeye çalıştığınız sütundur.

Bu yarışmada göreviniz, Uzay Gemisi Titanik’in uzay-zaman anomalisiyle çarpışması sırasında bir yolcunun alternatif bir boyuta taşınıp taşınmadığını tahmin etmektir. Bu tahminleri yapmanıza yardımcı olmak için size geminin hasarlı bilgisayar sisteminden kurtarılan bir dizi kişisel kayıt veriliyor.

Verileri Yükleme

train <- read.csv("train.csv")
test <- read.csv("test.csv")
str(train)
## 'data.frame':    8693 obs. of  14 variables:
##  $ PassengerId : chr  "0001_01" "0002_01" "0003_01" "0003_02" ...
##  $ HomePlanet  : chr  "Europa" "Earth" "Europa" "Europa" ...
##  $ CryoSleep   : chr  "False" "False" "False" "False" ...
##  $ Cabin       : chr  "B/0/P" "F/0/S" "A/0/S" "A/0/S" ...
##  $ Destination : chr  "TRAPPIST-1e" "TRAPPIST-1e" "TRAPPIST-1e" "TRAPPIST-1e" ...
##  $ Age         : num  39 24 58 33 16 44 26 28 35 14 ...
##  $ VIP         : chr  "False" "False" "True" "False" ...
##  $ RoomService : num  0 109 43 0 303 0 42 0 0 0 ...
##  $ FoodCourt   : num  0 9 3576 1283 70 ...
##  $ ShoppingMall: num  0 25 0 371 151 0 3 0 17 0 ...
##  $ Spa         : num  0 549 6715 3329 565 ...
##  $ VRDeck      : num  0 44 49 193 2 0 0 NA 0 0 ...
##  $ Name        : chr  "Maham Ofracculy" "Juanna Vines" "Altark Susent" "Solam Susent" ...
##  $ Transported : chr  "False" "True" "False" "False" ...
str(test)
## 'data.frame':    4277 obs. of  13 variables:
##  $ PassengerId : chr  "0013_01" "0018_01" "0019_01" "0021_01" ...
##  $ HomePlanet  : chr  "Earth" "Earth" "Europa" "Europa" ...
##  $ CryoSleep   : chr  "True" "False" "True" "False" ...
##  $ Cabin       : chr  "G/3/S" "F/4/S" "C/0/S" "C/1/S" ...
##  $ Destination : chr  "TRAPPIST-1e" "TRAPPIST-1e" "55 Cancri e" "TRAPPIST-1e" ...
##  $ Age         : num  27 19 31 38 20 31 21 20 23 24 ...
##  $ VIP         : chr  "False" "False" "False" "False" ...
##  $ RoomService : num  0 0 0 0 10 0 0 0 0 0 ...
##  $ FoodCourt   : num  0 9 0 6652 0 ...
##  $ ShoppingMall: num  0 0 0 0 635 263 0 0 0 0 ...
##  $ Spa         : num  0 2823 0 181 0 ...
##  $ VRDeck      : num  0 0 0 585 0 60 0 0 0 0 ...
##  $ Name        : chr  "Nelly Carsoning" "Lerome Peckers" "Sabih Unhearfus" "Meratz Caltilter" ...
library(explore)
## Warning: package 'explore' was built under R version 4.3.2
library(tidyr)
## Warning: package 'tidyr' was built under R version 4.3.2
library(stringr)
library(dplyr)
## Warning: package 'dplyr' was built under R version 4.3.2
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
train %>% describe_all()
## # 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       0    0        4    NA  NA      NA
##  3 CryoSleep    chr       0    0        3    NA  NA      NA
##  4 Cabin        chr       0    0     6561    NA  NA      NA
##  5 Destination  chr       0    0        4    NA  NA      NA
##  6 Age          dbl     179    2.1     81     0  28.8    79
##  7 VIP          chr       0    0        3    NA  NA      NA
##  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       0    0     8474    NA  NA      NA
## 14 Transported  chr       0    0        2    NA  NA      NA
test %>% describe_all()
## # 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       0    0        4    NA  NA      NA
##  3 CryoSleep    chr       0    0        3    NA  NA      NA
##  4 Cabin        chr       0    0     3266    NA  NA      NA
##  5 Destination  chr       0    0        4    NA  NA      NA
##  6 Age          dbl      91    2.1     80     0  28.7    79
##  7 VIP          chr       0    0        3    NA  NA      NA
##  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       0    0     4177    NA  NA      NA

Veri Düzenleme

Cabin Ve Passengerİd sütünleri farkli bilgiler içerdiği için onlari iki ve üç sütünlere ayırıyorum

train[c('ailenum', 'ailesira')] <- str_split_fixed(train$PassengerId,'_',2)
test[c('ailenum', 'ailesira')] <- str_split_fixed(test$PassengerId,'_',2)
train[c('deck', 'num', 'side')] <- str_split_fixed(train$Cabin,'/',3)
test[c('deck', 'num', 'side')] <- str_split_fixed(test$Cabin,'/',3)

Burada Aileli olanları bulup onlara 1 olmayanlar için 0 değerlerini verdim

train$aile<-ifelse(duplicated(train$ailenum)| duplicated(train$ailenum, fromLast = TRUE),1,0)
test$aile<-ifelse(duplicated(test$ailenum)| duplicated(test$ailenum, fromLast = TRUE),1,0)

Gereksiz Sütünleri siliyorum

train <- train %>% select(-c(ailenum,ailesira,num,Name,Cabin))
test <- test %>% select(-c(ailenum,ailesira,num,Name,Cabin))

Boş değerleri NA lar ile doldurdum

train[train == ''] <- NA
test[test == ''] <- NA

Data Cleaning

train %>% describe_all()
## # A tibble: 15 × 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    chr     217    2.5      3    NA  NA       NA
##  4 Destination  chr     182    2.1      4    NA  NA       NA
##  5 Age          dbl     179    2.1     81     0  28.8     79
##  6 VIP          chr     203    2.3      3    NA  NA       NA
##  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 Transported  chr       0    0        2    NA  NA       NA
## 13 deck         chr     199    2.3      9    NA  NA       NA
## 14 side         chr     199    2.3      3    NA  NA       NA
## 15 aile         dbl       0    0        2     0   0.45     1
test %>% describe_all()
## # 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     4277    NA  NA       NA
##  2 HomePlanet   chr      87    2        4    NA  NA       NA
##  3 CryoSleep    chr      93    2.2      3    NA  NA       NA
##  4 Destination  chr      92    2.2      4    NA  NA       NA
##  5 Age          dbl      91    2.1     80     0  28.7     79
##  6 VIP          chr      93    2.2      3    NA  NA       NA
##  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 deck         chr     100    2.3      9    NA  NA       NA
## 13 side         chr     100    2.3      3    NA  NA       NA
## 14 aile         dbl       0    0        2     0   0.45     1
unique(train$HomePlanet)
## [1] "Europa" "Earth"  "Mars"   NA
unique(train$CryoSleep)
## [1] "False" "True"  NA
unique(train$VIP)
## [1] "False" "True"  NA

Tahmını bozmamak için bir kaç değişkendeki NA değerlerini String yanı metin “NA” olarak değiştirdim

train$HomePlanet <- addNA(train$HomePlanet)
test$HomePlanet <- addNA(test$HomePlanet)
train$VIP <- addNA(train$VIP)
test$VIP <- addNA(test$VIP)
train$CryoSleep <- addNA(train$CryoSleep)
test$CryoSleep <- addNA(test$CryoSleep)
train$Destination <- addNA(train$Destination)
test$Destination <- addNA(test$Destination)
train$side <- addNA(train$side)
test$side <- addNA(test$side)
train$deck <- addNA(train$deck)
test$deck <- addNA(test$deck)
train %>% describe_all()
## # A tibble: 15 × 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     179    2.1     81     0  28.8     79
##  6 VIP          fct       0    0        3    NA  NA       NA
##  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 Transported  chr       0    0        2    NA  NA       NA
## 13 deck         fct       0    0        9    NA  NA       NA
## 14 side         fct       0    0        3    NA  NA       NA
## 15 aile         dbl       0    0        2     0   0.45     1
hist(train$Age)

Yolcuların yaşlarının dağılımına baktım yolcuların çoğu 24-25 arasında olduğu için boşlukları 25 ile dolduruyorum

train <- train %>% mutate(Age = coalesce(Age,25))
test <- test %>% mutate(Age= coalesce(Age,0))
train %>% describe_all()
## # A tibble: 15 × 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.8     79
##  6 VIP          fct       0    0        3    NA  NA       NA
##  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 Transported  chr       0    0        2    NA  NA       NA
## 13 deck         fct       0    0        9    NA  NA       NA
## 14 side         fct       0    0        3    NA  NA       NA
## 15 aile         dbl       0    0        2     0   0.45     1
hist(train$RoomService)

hist(train$Spa)

hist(train$ShoppingMall)

hist(train$FoodCourt)

hist(train$VRDeck)

Dağılımlara bakarak yolcuların yarısından fazlasının 0$ harcadığını öğrendim ve boşlukları 0 ler ile doldurdum

train <- train %>% mutate(ShoppingMall = coalesce(ShoppingMall, 0),
                          VRDeck = coalesce(VRDeck, 0),
                          Spa = coalesce(Spa, 0),
                          FoodCourt = coalesce(FoodCourt, 0),
                          RoomService = coalesce(RoomService, 0))
test <- test %>% mutate(ShoppingMall = coalesce(ShoppingMall, 0),
                          VRDeck = coalesce(VRDeck, 0),
                          Spa = coalesce(Spa, 0),
                          FoodCourt = coalesce(FoodCourt, 0),
                          RoomService = coalesce(RoomService, 0))
train %>% describe_all()
## # A tibble: 15 × 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.8     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 Transported  chr       0      0      2    NA  NA       NA
## 13 deck         fct       0      0      9    NA  NA       NA
## 14 side         fct       0      0      3    NA  NA       NA
## 15 aile         dbl       0      0      2     0   0.45     1
train %>% describe_all()
## # A tibble: 15 × 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.8     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 Transported  chr       0      0      2    NA  NA       NA
## 13 deck         fct       0      0      9    NA  NA       NA
## 14 side         fct       0      0      3    NA  NA       NA
## 15 aile         dbl       0      0      2     0   0.45     1
test %>% describe_all()
## # 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   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 deck         fct       0      0      9    NA  NA       NA
## 13 side         fct       0      0      3    NA  NA       NA
## 14 aile         dbl       0      0      2     0   0.45     1

Veriler Tahmina hazir

Logistic Regression

** Logistik regresyon, istatistik ve makine öğrenimi alanlarında kullanılan bir sınıflandırma algoritmasıdır. Temel olarak, bir bağımlı değişkenin (genellikle iki sınıfın olduğu bir durumda) diğer bağımsız değişkenlerle ilişkisini modellemek için kullanılır. Bu ilişkiyi belirlemek için lojistik fonksiyonu kullanılır. **

library(caTools)
## Warning: package 'caTools' was built under R version 4.3.2
train$Transported <- as.logical(train$Transported)

Passengerid hariç bütün değişkenleri farklı değişkene kayıt edıyorum

train_set <- train[2:15]
test_set <- test[2:14]
set.seed(123)
split = sample.split(train_set$Transported, SplitRatio = 0.75)
training_set = subset(train_set, split == TRUE)
testing_set = subset(train_set, split == FALSE)

Bu R dilindeki kod, bir lojistik regresyon modelini oluşturmayı amaçlar.

logistic = glm(formula = Transported ~ ., family = binomial,data = training_set)
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred

Bu R dilindeki kod, oluşturulan lojistik regresyon modeli (logistic modeli) kullanılarak test seti üzerindeki gözlemler için olasılık tahminleri elde etmeyi amaçlar

prob_pred = predict(logistic, type = 'response' ,newdata = testing_set[-11])
## Warning in predict.lm(object, newdata, se.fit, scale = 1, type = if (type == :
## prediction from rank-deficient fit; attr(*, "non-estim") has doubtful cases

Bu R kodu, bir sınıflandırma modelinin tahminlerini belirli bir eşik değeri kullanarak ikili bir sınıfa dönüştürmeyi amaçlar. Eğer bir modelin çıktısı (olasılık tahminleri) belirli bir eşik değerden büyükse, tahmin 1 (genellikle pozitif sınıf); aksi takdirde, tahmin 0 (genellikle negatif sınıf) olacaktır.

y_pred = ifelse(prob_pred > 0.5, 1,0)

Bu R dilindeki kod, belirli bir eşik değeri üzerinden elde edilen olasılık tahminlerini temel alarak sınıflandırma yapmayı amaçlar.

y_true= ifelse(testing_set[11] == TRUE, 1,0)

Bu R dilindeki kod, bir karışıklık matrisi (confusion matrix) oluşturmayı amaçlar. Karışıklık matrisi, bir sınıflandırma modelinin performansını değerlendirmek için kullanılır ve gerçek ve tahmin edilen sınıfların sayılarını gösterir.

cm = table(y_true, y_pred)
cm
##       y_pred
## y_true   0   1
##      0 820 259
##      1 190 904
(820+904)/(820+904+259+190)
## [1] 0.7933732

Bu R kodu, bir lojistik regresyon modeli oluşturmayı ve bu modeli kullanarak sınıflandırma tahminleri yapmayı amaçlamaktadır. İki bloktan oluşan bu kodlarda, birinci blokta lojistik regresyon modeli kurulurken, ikinci blokta bu model kullanılarak sınıflandırma tahminleri yapılır.

logistic_son = glm(formula = Transported ~ ., family = binomial, data = train_set)
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
prob_pred <- predict(logistic_son, type = 'response', newdata = test_set)
## Warning in predict.lm(object, newdata, se.fit, scale = 1, type = if (type == :
## prediction from rank-deficient fit; attr(*, "non-estim") has doubtful cases
y_pred <- ifelse(prob_pred > 0.5, TRUE, FALSE)
Transported <- as.character(y_pred)
Transported <- as.vector(Transported)
PassengerId <- test$PassengerId

Bu R kodu, iki vektörü yan yana (sütunlarını birleştirerek) içeren bir matris ya da veri çerçevesi oluşturmayı amaçlar. Bu tür bir birleştirme işlemi, genellikle model tahminlerini ve tahminlere karşılık gelen gözlem kimliklerini birleştirmek ve bir sunum ya da başka bir amaç için kullanmak için yapılır.

submission <- cbind(PassengerId, Transported)
submission <- as.data.frame(submission)
submission$Transported <- str_to_title(submission$Transported)
write.csv(submission, "submission_logistic.csv" , row.names = FALSE, quote = FALSE)

Naive Bayes

Naive Bayes, istatistiksel bir sınıflandırma (classification) algoritmasıdır ve özellikle metin madenciliği ve makine öğrenmesi uygulamalarında sıkça kullanılır. Bu algoritma, Bayes teoremi temel alınarak çalışır ve “naive” (saf) olarak adlandırılır, çünkü bir örneğin sınıfını belirlerken özellikler arasındaki bağımsızlık varsayımını yapar.

Naive Bayes, öğrenme ve tahmin aşamalarından oluşur. Öğrenme aşamasında, algoritma eğitim verilerini analiz eder ve sınıflandırma için kullanılacak özellikler arasındaki olasılıkları belirler. Tahmin aşamasında ise, yeni bir örnek verildiğinde, bu özelliklere dayalı olarak en olası sınıfı tahmin eder.

Bu R kodu, e1071 paketini kullanarak Naive Bayes sınıflandırma modeli kurmayı ve bu modeli kullanarak test veri setindeki gözlemleri sınıflandırmayı amaçlamaktadır.

library(e1071)
## Warning: package 'e1071' was built under R version 4.3.2
fit_nb <- naiveBayes(Transported ~ ., data = training_set)
preds <- predict(fit_nb, newdata =testing_set[-11], type ="raw") %>% data.frame()

Bu R kodu, Naive Bayes modeli tarafından yapılan sınıflandırma skorlarına dayalı olarak bir ikili sınıflandırma eşiği belirleyerek, sınıflandırma tahminlerini elde etmeyi amaçlar.

y_pred = ifelse(preds$TRUE. > 0.5, 1, 0)
cm = table(y_true, y_pred)
cm
##       y_pred
## y_true    0    1
##      0  510  569
##      1   78 1016
(510+1016)/(510+1016+569+78)
## [1] 0.7022549
nb_son = naiveBayes(Transported ~ ., data = train_set)
perd <- predict(nb_son, newdata = test_set, type = "raw") %>% data.frame()
y_pred = ifelse(preds$TRUE. > 0.5, TRUE, FALSE)
Transported <- as.character(y_pred)
Transported <- as.vector(Transported)
PassengerId <- test$PassengerId
submission <- cbind(PassengerId, Transported)
## Warning in cbind(PassengerId, Transported): number of rows of result is not a
## multiple of vector length (arg 2)
submission <- as.data.frame(submission)
submission$Transported <- str_to_title(submission$Transported)
write.csv(submission, "sub_nb.csv" , row.names = FALSE, quote = FALSE)

SVM

Çok Sınıflı Sınıflandırma: SVM, doğrudan çok sınıflı sınıflandırma problemleriyle başa çıkmak için tasarlanmamıştır. Ancak, bu sorun, birkaç ikili sınıflandırma problemiyle çözülebilir.

Bu R dilindeki kod, e1071 paketinde bulunan svm (Support Vector Machines) fonksiyonunu kullanarak bir Destek Vektör Makineleri (Support Vector Machines, SVM) sınıflandırma modeli oluşturmayı amaçlar. İşte bu kodun açıklamaları:

Bu R kodu, e1071 paketi kullanılarak bir destek vektör makinesi (SVM) sınıflandırma modeli kurmayı ve bu modeli kullanarak test veri setindeki gözlemleri sınıflandırmayı amaçlamaktadır.

library(e1071)
fit_svm <- svm(Transported ~ ., data = training_set, type = 'C-classification', kernel = 'linear')
preds <- predict(fit_svm, newdata = testing_set, type = "raw") %>% data.frame()
y_pred = ifelse(preds$. == TRUE, 1, 0)
cm = table(y_true, y_pred)
cm
##       y_pred
## y_true   0   1
##      0 831 248
##      1 173 921
(831+921)/(831+921+248+173)
## [1] 0.8062586
svm_son = svm(Transported ~ ., data = train_set,
               type = 'C-classification',
               kernel = 'linear')
preds <- predict(svm_son, newdata = test_set, type = "raw") %>% data.frame()
y_pred = preds$.
Transported <- as.character(y_pred)
Transported <- as.vector(Transported)
PassengerId <- test$PassengerId
submission <- cbind(PassengerId,  Transported)
submission <- as.data.frame(submission)
submission$Transported <- str_to_title(submission$Transported)
write.csv(submission, "submission_svm.csv", row.names = FALSE, quote = FALSE)