R Markdown

This is an R Markdown document. Markdown is a simple formatting syntax for authoring HTML, PDF, and MS Word documents. For more details on using R Markdown see http://rmarkdown.rstudio.com.

When you click the Knit button a document will be generated that includes both content as well as the output of any embedded R code chunks within the document. You can embed an R code chunk like this:

summary(cars)
##      speed           dist       
##  Min.   : 4.0   Min.   :  2.00  
##  1st Qu.:12.0   1st Qu.: 26.00  
##  Median :15.0   Median : 36.00  
##  Mean   :15.4   Mean   : 42.98  
##  3rd Qu.:19.0   3rd Qu.: 56.00  
##  Max.   :25.0   Max.   :120.00

Spaceship

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

library(readr)
test <- read_csv("test.csv")
## Rows: 4277 Columns: 13
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## chr (5): PassengerId, HomePlanet, Cabin, Destination, Name
## dbl (6): Age, RoomService, FoodCourt, ShoppingMall, Spa, VRDeck
## lgl (2): CryoSleep, VIP
## 
## ℹ 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.
View(test)
library(readr)
train <- read_csv("train.csv")
## Rows: 8693 Columns: 14
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## chr (5): PassengerId, HomePlanet, Cabin, Destination, Name
## dbl (6): Age, RoomService, FoodCourt, ShoppingMall, Spa, VRDeck
## lgl (3): CryoSleep, VIP, Transported
## 
## ℹ 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.
View(train)
str(train)
## spc_tbl_ [8,693 × 14] (S3: spec_tbl_df/tbl_df/tbl/data.frame)
##  $ PassengerId : chr [1:8693] "0001_01" "0002_01" "0003_01" "0003_02" ...
##  $ HomePlanet  : chr [1:8693] "Europa" "Earth" "Europa" "Europa" ...
##  $ CryoSleep   : logi [1:8693] FALSE FALSE FALSE FALSE FALSE FALSE ...
##  $ Cabin       : chr [1:8693] "B/0/P" "F/0/S" "A/0/S" "A/0/S" ...
##  $ Destination : chr [1:8693] "TRAPPIST-1e" "TRAPPIST-1e" "TRAPPIST-1e" "TRAPPIST-1e" ...
##  $ Age         : num [1:8693] 39 24 58 33 16 44 26 28 35 14 ...
##  $ VIP         : logi [1:8693] FALSE FALSE TRUE FALSE FALSE FALSE ...
##  $ RoomService : num [1:8693] 0 109 43 0 303 0 42 0 0 0 ...
##  $ FoodCourt   : num [1:8693] 0 9 3576 1283 70 ...
##  $ ShoppingMall: num [1:8693] 0 25 0 371 151 0 3 0 17 0 ...
##  $ Spa         : num [1:8693] 0 549 6715 3329 565 ...
##  $ VRDeck      : num [1:8693] 0 44 49 193 2 0 0 NA 0 0 ...
##  $ Name        : chr [1:8693] "Maham Ofracculy" "Juanna Vines" "Altark Susent" "Solam Susent" ...
##  $ Transported : logi [1:8693] FALSE TRUE FALSE FALSE TRUE TRUE ...
##  - attr(*, "spec")=
##   .. cols(
##   ..   PassengerId = col_character(),
##   ..   HomePlanet = col_character(),
##   ..   CryoSleep = col_logical(),
##   ..   Cabin = col_character(),
##   ..   Destination = col_character(),
##   ..   Age = col_double(),
##   ..   VIP = col_logical(),
##   ..   RoomService = col_double(),
##   ..   FoodCourt = col_double(),
##   ..   ShoppingMall = col_double(),
##   ..   Spa = col_double(),
##   ..   VRDeck = col_double(),
##   ..   Name = col_character(),
##   ..   Transported = col_logical()
##   .. )
##  - attr(*, "problems")=<externalptr>
str(test)
## spc_tbl_ [4,277 × 13] (S3: spec_tbl_df/tbl_df/tbl/data.frame)
##  $ PassengerId : chr [1:4277] "0013_01" "0018_01" "0019_01" "0021_01" ...
##  $ HomePlanet  : chr [1:4277] "Earth" "Earth" "Europa" "Europa" ...
##  $ CryoSleep   : logi [1:4277] TRUE FALSE TRUE FALSE FALSE FALSE ...
##  $ Cabin       : chr [1:4277] "G/3/S" "F/4/S" "C/0/S" "C/1/S" ...
##  $ Destination : chr [1:4277] "TRAPPIST-1e" "TRAPPIST-1e" "55 Cancri e" "TRAPPIST-1e" ...
##  $ Age         : num [1:4277] 27 19 31 38 20 31 21 20 23 24 ...
##  $ VIP         : logi [1:4277] FALSE FALSE FALSE FALSE FALSE FALSE ...
##  $ RoomService : num [1:4277] 0 0 0 0 10 0 0 0 0 0 ...
##  $ FoodCourt   : num [1:4277] 0 9 0 6652 0 ...
##  $ ShoppingMall: num [1:4277] 0 0 0 0 635 263 0 0 0 0 ...
##  $ Spa         : num [1:4277] 0 2823 0 181 0 ...
##  $ VRDeck      : num [1:4277] 0 0 0 585 0 60 0 0 0 0 ...
##  $ Name        : chr [1:4277] "Nelly Carsoning" "Lerome Peckers" "Sabih Unhearfus" "Meratz Caltilter" ...
##  - attr(*, "spec")=
##   .. cols(
##   ..   PassengerId = col_character(),
##   ..   HomePlanet = col_character(),
##   ..   CryoSleep = col_logical(),
##   ..   Cabin = col_character(),
##   ..   Destination = col_character(),
##   ..   Age = col_double(),
##   ..   VIP = col_logical(),
##   ..   RoomService = col_double(),
##   ..   FoodCourt = col_double(),
##   ..   ShoppingMall = col_double(),
##   ..   Spa = col_double(),
##   ..   VRDeck = col_double(),
##   ..   Name = col_character()
##   .. )
##  - attr(*, "problems")=<externalptr>
head(train)
## # A tibble: 6 × 14
##   PassengerId HomePlanet CryoSleep Cabin Destination     Age VIP   RoomService
##   <chr>       <chr>      <lgl>     <chr> <chr>         <dbl> <lgl>       <dbl>
## 1 0001_01     Europa     FALSE     B/0/P TRAPPIST-1e      39 FALSE           0
## 2 0002_01     Earth      FALSE     F/0/S TRAPPIST-1e      24 FALSE         109
## 3 0003_01     Europa     FALSE     A/0/S TRAPPIST-1e      58 TRUE           43
## 4 0003_02     Europa     FALSE     A/0/S TRAPPIST-1e      33 FALSE           0
## 5 0004_01     Earth      FALSE     F/1/S TRAPPIST-1e      16 FALSE         303
## 6 0005_01     Earth      FALSE     F/0/P PSO J318.5-22    44 FALSE           0
## # ℹ 6 more variables: FoodCourt <dbl>, ShoppingMall <dbl>, Spa <dbl>,
## #   VRDeck <dbl>, Name <chr>, Transported <lgl>
head(test)
## # A tibble: 6 × 13
##   PassengerId HomePlanet CryoSleep Cabin Destination   Age VIP   RoomService
##   <chr>       <chr>      <lgl>     <chr> <chr>       <dbl> <lgl>       <dbl>
## 1 0013_01     Earth      TRUE      G/3/S TRAPPIST-1e    27 FALSE           0
## 2 0018_01     Earth      FALSE     F/4/S TRAPPIST-1e    19 FALSE           0
## 3 0019_01     Europa     TRUE      C/0/S 55 Cancri e    31 FALSE           0
## 4 0021_01     Europa     FALSE     C/1/S TRAPPIST-1e    38 FALSE           0
## 5 0023_01     Earth      FALSE     F/5/S TRAPPIST-1e    20 FALSE          10
## 6 0027_01     Earth      FALSE     F/7/P TRAPPIST-1e    31 FALSE           0
## # ℹ 5 more variables: FoodCourt <dbl>, ShoppingMall <dbl>, Spa <dbl>,
## #   VRDeck <dbl>, Name <chr>
unique(train$HomePlanet)
## [1] "Europa" "Earth"  "Mars"   NA
unique(test$HomePlanet)
## [1] "Earth"  "Europa" "Mars"   NA
unique(train$CryoSleep)
## [1] FALSE  TRUE    NA
unique(test$CryoSleep)
## [1]  TRUE FALSE    NA
unique(train$Destination)
## [1] "TRAPPIST-1e"   "PSO J318.5-22" "55 Cancri e"   NA
unique(test$Destination)
## [1] "TRAPPIST-1e"   "55 Cancri e"   "PSO J318.5-22" NA
train$HomePlanet <- addNA(train$HomePlanet)
test$HomePlanet <- addNA(test$HomePlanet)
train$Destination <- addNA(train$Destination)
test$Destination <- addNA(test$Destination)
train$CryoSleep <- addNA(train$CryoSleep)
test$CryoSleep <- addNA(test$CryoSleep)
library(dplyr)
## 
## 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
library(tidyr)
train <- train %>% group_by(HomePlanet,Destination) %>%
  mutate(Age = replace_na(Age,mean(Age, na.rm = TRUE)))
test <- test %>% group_by(HomePlanet,Destination) %>%
  mutate(Age = replace_na(Age,mean(Age, na.rm = TRUE)))
train$VIP <- addNA(train$VIP)
test$VIP <- addNA(test$VIP)
train <- train %>% 
  mutate(RoomService=coalesce(RoomService, 0),
         FoodCourt=coalesce(FoodCourt, 0),
         ShoppingMall=coalesce(ShoppingMall, 0),
         Spa=coalesce(Spa,0),
         VRDeck=coalesce(VRDeck,0))
test <- test %>% 
  mutate(RoomService=coalesce(RoomService, 0),
         FoodCourt=coalesce(FoodCourt, 0),
         ShoppingMall=coalesce(ShoppingMall, 0),
         Spa=coalesce(Spa,0),
         VRDeck=coalesce(VRDeck,0))
library(tidyverse)
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ forcats   1.0.0     ✔ purrr     1.0.2
## ✔ ggplot2   3.4.4     ✔ stringr   1.5.1
## ✔ lubridate 1.9.3     ✔ tibble    3.2.1
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag()    masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
library(explore)
train[c('ailenum','ailesıra')] <- str_split_fixed(train$PassengerId,"_",2)
test[c('ailenum','ailesıra')] <- str_split_fixed(test$PassengerId,"_",2)
train <- train[,c(15,16,1:14)]
test <- test[,c(14,15,1:13)]
train[c('deck', 'num', 'side')] <-str_split_fixed(train$Cabin,'/', 3)
test[c('deck', 'num', 'side')] <-str_split_fixed(test$Cabin,'/', 3)
train <- train[,c(1:6,17,18,19,7:16)]
test <- test[,c(1:6,16,17,18,7:15)]
train[train == ""] <- NA
train[train == ""] <- NA
train %>% describe_all()
## # A tibble: 19 × 8
##    variable     type     na na_pct unique   min  mean   max
##    <chr>        <chr> <int>  <dbl>  <int> <dbl> <dbl> <dbl>
##  1 ailenum      chr       0    0     6217    NA  NA      NA
##  2 ailesıra     chr       0    0        8    NA  NA      NA
##  3 PassengerId  chr       0    0     8693    NA  NA      NA
##  4 HomePlanet   fct       0    0        4    NA  NA      NA
##  5 CryoSleep    fct       0    0        3    NA  NA      NA
##  6 Cabin        chr     199    2.3   6561    NA  NA      NA
##  7 deck         chr     199    2.3      9    NA  NA      NA
##  8 num          chr     199    2.3   1818    NA  NA      NA
##  9 side         chr     199    2.3      3    NA  NA      NA
## 10 Destination  fct       0    0        4    NA  NA      NA
## 11 Age          dbl       0    0       91     0  28.8    79
## 12 VIP          fct       0    0        3    NA  NA      NA
## 13 RoomService  dbl       0    0     1273     0 220.  14327
## 14 FoodCourt    dbl       0    0     1507     0 448.  29813
## 15 ShoppingMall dbl       0    0     1115     0 170.  23492
## 16 Spa          dbl       0    0     1327     0 305.  22408
## 17 VRDeck       dbl       0    0     1306     0 298.  24133
## 18 Name         chr     200    2.3   8474    NA  NA      NA
## 19 Transported  lgl       0    0        2     0   0.5     1
test %>% describe_all()
## # A tibble: 18 × 8
##    variable     type     na na_pct unique   min  mean   max
##    <chr>        <chr> <int>  <dbl>  <int> <dbl> <dbl> <dbl>
##  1 ailenum      chr       0    0     3063    NA  NA      NA
##  2 ailesıra     chr       0    0        8    NA  NA      NA
##  3 PassengerId  chr       0    0     4277    NA  NA      NA
##  4 HomePlanet   fct       0    0        4    NA  NA      NA
##  5 CryoSleep    fct       0    0        3    NA  NA      NA
##  6 Cabin        chr     100    2.3   3266    NA  NA      NA
##  7 deck         chr     100    2.3      9    NA  NA      NA
##  8 num          chr       0    0     1506    NA  NA      NA
##  9 side         chr       0    0        3    NA  NA      NA
## 10 Destination  fct       0    0        4    NA  NA      NA
## 11 Age          dbl       0    0       91     0  28.7    79
## 12 VIP          fct       0    0        3    NA  NA      NA
## 13 RoomService  dbl       0    0      842     0 215.  11567
## 14 FoodCourt    dbl       0    0      902     0 429.  25273
## 15 ShoppingMall dbl       0    0      715     0 173.   8292
## 16 Spa          dbl       0    0      833     0 296.  19844
## 17 VRDeck       dbl       0    0      796     0 305.  22272
## 18 Name         chr      94    2.2   4177    NA  NA      NA
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 )
head(train[,c("PassengerId","ailenum","aile")],20 )
## # A tibble: 20 × 3
##    PassengerId ailenum  aile
##    <chr>       <chr>   <dbl>
##  1 0001_01     0001        0
##  2 0002_01     0002        0
##  3 0003_01     0003        1
##  4 0003_02     0003        1
##  5 0004_01     0004        0
##  6 0005_01     0005        0
##  7 0006_01     0006        1
##  8 0006_02     0006        1
##  9 0007_01     0007        0
## 10 0008_01     0008        1
## 11 0008_02     0008        1
## 12 0008_03     0008        1
## 13 0009_01     0009        0
## 14 0010_01     0010        0
## 15 0011_01     0011        0
## 16 0012_01     0012        0
## 17 0014_01     0014        0
## 18 0015_01     0015        0
## 19 0016_01     0016        0
## 20 0017_01     0017        1
head(test[,c("PassengerId","ailenum","aile")],20 )
## # A tibble: 20 × 3
##    PassengerId ailenum  aile
##    <chr>       <chr>   <dbl>
##  1 0013_01     0013        0
##  2 0018_01     0018        0
##  3 0019_01     0019        0
##  4 0021_01     0021        0
##  5 0023_01     0023        0
##  6 0027_01     0027        0
##  7 0029_01     0029        0
##  8 0032_01     0032        1
##  9 0032_02     0032        1
## 10 0033_01     0033        0
## 11 0037_01     0037        0
## 12 0040_01     0040        1
## 13 0040_02     0040        1
## 14 0042_01     0042        0
## 15 0046_01     0046        1
## 16 0046_02     0046        1
## 17 0046_03     0046        1
## 18 0047_01     0047        1
## 19 0047_02     0047        1
## 20 0047_03     0047        1
train$aile <- ifelse(duplicated(train$ailenum) | duplicated(train$ailenum, fromLast = TRUE),1,0 )
train <- train %>% select(- c(ailenum,ailesıra ))
test <- test %>% select(- c(ailenum,ailesıra ))
train[c('deck', 'num', 'side')] <-str_split_fixed(train$Cabin,'/', 3)
train <- train %>% select(- c(Cabin,num,Name))
test <- test %>% select(- c(Cabin,num,Name))
train$deck <- addNA(train$deck)
test$deck <- addNA(test$deck)
train$side <- addNA(train$side)
test$side <- addNA(test$side)
hist(train$Age)

hist(test$FoodCourt)

logistic

Logistic regression, bir bağımlı değişkenin kategorik (genellikle ikili) olduğu durumlar için kullanılan istatistiksel bir regresyon yöntemidir. Bu yöntem, bağımsız değişkenlerin lineer kombinasyonunu kullanarak bir olayın olasılığını tahmin etmeye çalışır.

Lojistik regresyon, sınıflandırma problemlerinde yaygın olarak kullanılır. Örneğin, bir kişinin bir ürünü satın alıp almayacağını tahmin etmek veya bir hastanın bir hastalığa sahip olup olmadığını belirlemek gibi durumlar için kullanılabilir. Modelin çıktısı genellikle 0 ile 1 arasında bir olasılık değeri olup, belirli bir eşik değeri üzerinde ise bir olayın gerçekleşeceği tahmin edilir.

train_set <- train[2:15]

Bu satır, R programında bir veri çerçevesi veya matris üzerinde işlem yaparak belirli bir alt küme oluşturmayı ifade eder. Bu örnekte train isimli bir veri çerçevesi veya matrisin 2. sıradan (2. satır) 15. sıraya (15. satır) kadar olan satırlarını ve tüm sütunlarını içeren bir yeni veri çerçevesi olan train_set değişkenine atanmaktadır.

test_set <- test[2:14]

Bu satır, R programında bir veri çerçevesi veya matris üzerinde işlem yaparak belirli bir alt küme oluşturmayı ifade eder. Bu örnekte test isimli bir veri çerçevesi veya matrisin 2. sıradan (2. satır) 14. sıraya (14. satır) kadar olan satırlarını ve tüm sütunlarını içeren bir yeni veri çerçevesi olan test_set değişkenine atanmaktadır.

library(caTools)
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)
library(stringr)
logistic = glm(formula = Transported ~ . ,family = binomial, data = training_set)
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
prob_pred = predict(logistic, type = 'response', newdata = testing_set[-13])
y_pred = ifelse(prob_pred > 0.5 , 1 , 0)
y_true <- ifelse(testing_set[11] == TRUE,1, 0)
cm = table(y_true, y_pred)
cm
##       y_pred
## y_true    0    1
##      0  982 1154
##      1   28    9
(982+9)/(982+9+1154+28)
## [1] 0.4560515
logistic_son = glm(formula = Transported ~ .,
                   family = binomial,
                   data = training_set)
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
prob_pred = predict(logistic_son, type = 'response', newdata = test_set)
y_pred = ifelse(prob_pred > 0.5, TRUE, FALSE)
Transported <- as.character(y_pred)
PassengerId <- test$PassengerId
Transported <- as.vector(Transported)
submission <- cbind(PassengerId, Transported)
submission <- as.data.frame(submission)
submission$Transported <- str_to_title(submission$Transported)
write.csv(submission, "sub_logistic.csv", row.names = FALSE, quote = FALSE)

NAİVE

Naive Bayes modeli, sadeliği, zerafeti ve dayanıklılığı nedeniyle ML analistleri için çekici bir alternatif oluşturur. En eski sınıflandırma algoritmalarından biridir ve en basit haliyle bile şaşırtıcı derecede etkilidir. Metin sınıflandırma ve spam filtreleme gibi alanlarda yaygın olarak kullanılmaktadır.

library(e1071)
fit_nb <- naiveBayes(Transported ~ ., data = training_set)
preds <- predict(fit_nb, newdata =testing_set[-11], type = "raw") %>%
  data.frame()
## Warning in predict.naiveBayes(fit_nb, newdata = testing_set[-11], type =
## "raw"): Type mismatch between training and new data for variable 'Spa'. Did you
## use factors with numeric labels for training, and numeric values for new data?
y_pred = ifelse(preds$TRUE. > 0.5, 1,0)
cm = table(y_true, y_pred)
cm
##       y_pred
## y_true    0    1
##      0  535 1601
##      1   25   12
(535+1601)/ (535+1601+25+12)
## [1] 0.9829728
nb_son = naiveBayes(Transported ~ ., data = train_set)
preds <- predict(nb_son, newdata = test_set, type = "raw") %>%
  data.frame()
y_pred = ifelse(preds$TRUE.> 0.5 ,TRUE,FALSE)
Transported <- as.character(y_pred)
PassengerId <- test$PassengerId
Transported <- as.vector(Transported)
submission <- cbind(PassengerId, Transported)
submission <- as.data.frame(submission)
submission$Transported <- str_to_title(submission$Transported)
write.csv(submission, "sub_nb.csv" , row.names = FALSE , quote = FALSE)