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
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 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)
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)