├── .gitignore ├── 0-R_ile_Veribilime_Giris.pdf ├── BAGGING.Rmd ├── CART-SINIFLANDIRMA.R ├── CART.Rmd ├── EDA.Rmd ├── GBM-CLASSIFICATION.R ├── GBM.R ├── Giris_Egitimi ├── R-Project-1.R ├── R-Project-2.R ├── R-Project-3.R ├── R-Project-4.R ├── R-Project-5.R ├── R-Project-6.R ├── R-Project-7.R └── R-Project-8.R ├── Istanbul_Population_Analyse.R ├── KNN.R ├── Kullanılan_Kütüphaneler.R ├── MClust Algoritması.R ├── PCA.R ├── PCR.R ├── PLS.R ├── R-Programming-for-Data-Science.Rproj ├── README.md ├── R_ile_Veribilime_Giris.Rmd ├── Ridge-Regression.R ├── SVM.R ├── Universite_cinsiyet_oranlari.R ├── XGBOOST.Rmd ├── XGBoost-Classification.R ├── YSA-Classification.R ├── aykiri-gozlemler.R ├── datasets ├── Advertising.csv ├── cancer.csv ├── cancer2.csv ├── house-prices-advanced-regression-techniques │ ├── data_description.txt │ ├── sample_submission.csv │ ├── test.csv │ └── train.csv ├── sherlock.txt └── veri.csv ├── grafiklerle_kesifci_veri_analizi.R ├── hiyerarşik_kümeleme.R ├── logistic-regression.R ├── metin_madenciligi.R ├── tahmin-ile-eksik-veri-atama.R ├── tarih_saat_değişkenleri.R ├── test.R ├── titanic_r.Rmd ├── yapay-sinir-aglari.R └── İstatistiksel-Testler.R /.gitignore: -------------------------------------------------------------------------------- 1 | .Rproj.user 2 | .Rhistory 3 | .RData 4 | .Ruserdata 5 | -------------------------------------------------------------------------------- /0-R_ile_Veribilime_Giris.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RegaipKURT/R-Programming-for-Data-Science/ed385c3bcfcfebdb66d09f522f1ea257482c52c9/0-R_ile_Veribilime_Giris.pdf -------------------------------------------------------------------------------- /BAGGING.Rmd: -------------------------------------------------------------------------------- 1 | --- 2 | title: "BAGGING TREES" 3 | output: html_notebook 4 | --- 5 | 6 | # BAGGING TREES (Bootstrap Agregating) 7 | 8 | ## Kütüphanelerin Yüklenmesi 9 | ```{r} 10 | library(caret) 11 | library(tidyverse) 12 | library(AppliedPredictiveModeling) 13 | library(pls) #kismi en kucuk kareler ve pcr icin 14 | library(elasticnet) 15 | library(broom) #tidy model icin 16 | library(glmnet) 17 | library(MASS) 18 | library(ISLR) 19 | library(PerformanceAnalytics) 20 | library(funModeling) 21 | library(Matrix) 22 | library(kernlab) #svm 23 | library(e1071) #svm icin 24 | library(rpart) #cart icin 25 | library(pgmm) #olive data seti icin 26 | library(dslabs) 27 | library(rpart.plot) #rpart gorsel icin 28 | library(partykit) #karar agaci gorseli icin 29 | library(ipred) #bagging icin 30 | library(randomForest) 31 | library(gbm) 32 | library(nnet) 33 | library(neuralnet) 34 | library(GGally) 35 | library(NeuralNetTools) #garson fonksiyonu icin 36 | library(FNN) 37 | library(dplyr) 38 | library(ggpubr) 39 | ``` 40 | 41 | ## Verisetinin yüklenmesi 42 | 43 | ```{r} 44 | df <- Boston 45 | head(df) 46 | ``` 47 | 48 | ### Veriye grafikler ve foksiyonlar yardımıyla ilk bakış: 49 | 50 | ```{r} 51 | profiling_num(df) 52 | glimpse(df) 53 | summary(df) 54 | ggpairs(df) 55 | pairs(df,pch=18) 56 | ``` 57 | 58 | ### Train-Test Ayrımı 59 | 60 | ```{r} 61 | set.seed(3456) 62 | train_indeks <- createDataPartition(df$medv, p=0.8, list = F, times = 1) 63 | train <- df[train_indeks, ] 64 | test <- df[-train_indeks, ] 65 | train 66 | 67 | train_x <- train %>% dplyr::select(-medv) 68 | train_y <- train$medv 69 | test_x <- test %>% dplyr::select(-medv) 70 | test_y <- test$medv 71 | ``` 72 | 73 | ## Bagging Tree Kurulması 74 | 75 | ```{r} 76 | # 1. yöntem 77 | bag_tree <- ipredbagg(train_y, train_x) 78 | bag_tree 79 | names(bag_tree) 80 | # 2. yöntem 81 | bag_tree2 <- bagging(medv~., data = train) 82 | summary(bag_tree2) 83 | 84 | # random forest ile kullanımı 85 | # Eğer random forest ın mtry parametresi bağımsız değişken sayısına eşitlenirse bagging yapılmış olur. 86 | bag_forest <- 87 | randomForest( 88 | medv ~ ., 89 | data = train, 90 | mtry = ncol(train) - 1, #veya ncol(train_x) yazıp 1 çıkarmayabilirdik 91 | importance = T, 92 | ntrees = 500 93 | ) 94 | bag_forest 95 | summary(bag_forest) 96 | importance(bag_forest) # değişkenlerinönem düzeyleri 97 | varImpPlot(bag_forest) 98 | ``` 99 | 100 | 101 | ## Tahmin 102 | 103 | Biz burada bag_forest ile tahmin yapıp test hatamıza bakacağız. 104 | 105 | ```{r} 106 | pred_y <- predict(bag_forest, test_x) 107 | 108 | defaultSummary(data.frame(obs=test_y, 109 | pred=pred_y)) 110 | 111 | ``` 112 | 113 | 114 | #### Acaba bagging yapmanın tek bir ağaçla tahmine göre hatayı düşürmeye katkısı nedir? Bunu görmek için bir plot çizdirip sonuçlarına bakalım. 115 | 116 | ```{r} 117 | plot(bag_forest, col="dodgerblue", lwd=2, 118 | main = "Bagged Trees: Hata ve Ağaç Sayısı Karşılaştırılması") 119 | grid() 120 | ``` 121 | 122 | 123 | Gördüğümüz gibi ağaç sayısı arttıkça hatamız düşüyor 124 | 125 | ## Model Tuning 126 | 127 | Model Tuning işlemini random forest üzerinden mtry değerini bağımsız değişken sayısına eşitleyerek yapacağız. 128 | 129 | ```{r} 130 | ctrl <- trainControl(method = "cv", number = 10) 131 | 132 | mtry <- ncol(train_x) 133 | tune_grid <- expand.grid(mtry = mtry) 134 | 135 | bag_tune <- train(train_x, train_y, 136 | method="rf", 137 | tuneGrid = tune_grid, 138 | trainControl=ctrl) 139 | bag_tune 140 | ``` 141 | 142 | Aslında br tune işleminden daha çok validasyon işlemi yapmış olduk. 143 | 144 | ## BONUS: RANDOM FOREST 145 | 146 | Random Forest için burdan devem etmek daha anlaışılır olur. 147 | 148 | ```{r} 149 | rf_fit <- randomForest(train_x, train_y, importance = T) 150 | #büyük veri setlerinde importance parametresi işlemi yavaşlatabilir. 151 | 152 | importance(rf_fit) 153 | varImpPlot(rf_fit) 154 | # var importance plot 155 | ``` 156 | 157 | ### Random Forest ile Tahmin 158 | 159 | ```{r} 160 | pred_y <- predict(rf_fit, test_x) 161 | 162 | plot(pred_y, test_y, xlab="Tahmin Edilen Değerler", 163 | ylab="Gerçek Değerler", 164 | main="Random Forest: \nTahmin ve Gerçek Değer Karşılaştırması", 165 | col="turquoise4", pch=19) 166 | 167 | grid() 168 | 169 | defaultSummary(data.frame(obs=test_y, 170 | pred=pred_y)) 171 | ``` 172 | 173 | Hatamızı hesapladıktan sonra görüyoruz ki iyi bir sonuç ortaya çıkmış. 174 | 175 | ## Model Tuning 176 | 177 | Random Forest için tune edilecek iki parametre vardır. Bunlardan birincisi mtry ikincisi ise ntrees argümanı. BU iki değeri arayarak en iyi sonucu verenleri kullanabiliriz. 178 | 179 | ```{r} 180 | ctrl <- trainControl(method = "cv", number = 10) 181 | 182 | tune_grid <- expand.grid(mtry = c(2:8)) 183 | 184 | rf_tune <- train(train_x, train_y, 185 | method="rf", 186 | tuneGrid = tune_grid, 187 | trainControl=ctrl) 188 | rf_tune 189 | plot(rf_tune) 190 | 191 | rf_tune$results %>% filter(mtry == as.numeric(rf_tune$bestTune)) 192 | 193 | defaultSummary(data.frame(obs=test_y, 194 | pred=predict(rf_tune, test_x))) 195 | ``` 196 | 197 | Sonuç olarak 6 değerini mtry argümanı için en iyi değer olarak bulduk. 198 | 199 | ## Random Search ile Model Tune 200 | 201 | Burada bir önerim var: Çok fazla sayıda mtry argümanı verip sonuç beklemek yerine mantıklı bir aralıkta 3 tane sayı vererek grafiğini çizdirirsek, grafiğin en düşük olduğu noktada yeniden aralık daraltılarak arama yapmak daha mantıklı olacaktır. 202 | 203 | ```{r} 204 | ctrl <- trainControl(method = "cv", number = 10, search = "random") 205 | 206 | tune_grid <- expand.grid(mtry = c(2:8)) 207 | 208 | rf_random_tune <- train(train_x, train_y, 209 | method="rf", 210 | tuneLength = 5, #kaç rasgele deneme yapacağı 211 | trainControl=ctrl) 212 | 213 | rf_random_tune 214 | plot(rf_random_tune) 215 | 216 | rf_random_tune$results %>% filter(mtry == as.numeric(rf_random_tune$bestTune)) 217 | 218 | defaultSummary(data.frame(obs=test_y, 219 | pred=predict(rf_random_tune, test_x))) 220 | ``` 221 | 222 | Random olarak mtry için 2,4,7,10,13 değelerini denemiş ve en optimum değer olarak 7 yi seçmiş. Biz ise 6 değerinin en düşük RMSE değerinde olduğunu biliyoruz ve 6 ya en yakın olanı seçmesi son derece mantıklı. 223 | 224 | 225 | 226 | 227 | 228 | 229 | 230 | 231 | 232 | -------------------------------------------------------------------------------- /CART-SINIFLANDIRMA.R: -------------------------------------------------------------------------------- 1 | 2 | #install.packages("ISLR") 3 | library(ISLR) 4 | #install.packages("tidyverse") 5 | library(tidyverse) 6 | #install.packages("funModeling") 7 | library(funModeling) 8 | #install.packages("caret") 9 | library(caret) 10 | #install.packages("pROC") 11 | library(pROC) 12 | #install.packages("class") 13 | library(class)#knn icin 14 | #install.packages("e1071") 15 | library(e1071)#knn icin 16 | #install.packages("kernlab") 17 | library(kernlab) #svm icin 18 | #install.packages("ROCR") 19 | library(ROCR) #roc icin 20 | #install.packages("neuralnet") 21 | library(neuralnet) 22 | #install.packages("GGally") 23 | library(GGally) 24 | #install.packages("nnet") 25 | library(nnet) 26 | #install.packages("rpart") 27 | library(rpart) 28 | #install.packages("cli") 29 | library(cli) 30 | #install.packages("tree") 31 | library(tree) 32 | #install.packages("rpart.plot") 33 | library(rpart.plot) 34 | #install.packages("randomForest") 35 | library(randomForest) 36 | #install.packages("gbm") 37 | library(gbm) 38 | #install.packages("xgboost") 39 | library(xgboost) 40 | #install.packages("DiagrammeR") 41 | library(DiagrammeR) 42 | #install.packages("mlbench") 43 | library(mlbench) 44 | library(ISLR) 45 | 46 | df <- Carseats 47 | str(df) 48 | summary(df) 49 | hist(df$Sales) 50 | df$Sales <- factor(ifelse(df$Sales>7.5, "H", "L")) 51 | summary(df$Sales) 52 | 53 | 54 | set.seed(123) 55 | train_indeks <- createDataPartition(df$Sales, 56 | p = .8, 57 | list = FALSE, 58 | times = 1) 59 | 60 | 61 | train <- df[train_indeks,] 62 | test <- df[-train_indeks,] 63 | 64 | 65 | train_x <- train %>% dplyr::select(-Sales) 66 | train_y <- train$Sales 67 | test_x <- test %>% dplyr::select(-Sales) 68 | test_y <- test$Sales 69 | #tek bir veri seti 70 | training <- data.frame(train_x, Sales = train_y) 71 | 72 | 73 | #model kurma 74 | set_tree <- tree(Sales~., data = df) 75 | summary(set_tree) 76 | plot(set_tree) 77 | text(set_tree) 78 | 79 | tree_class <- rpart(Sales~., data = df, method = "class") 80 | rpart.plot(tree_class) 81 | summary(tree_class) 82 | 83 | tree_class 84 | plotcp(tree_class) 85 | 86 | # en düşük hatayı veren cp parametresini modelin içinden alma 87 | # biraz uzun ve karmaşık ama lazım. 88 | min_cp <- tree_class$cptable[which.min(tree_class$cptable[,"xerror"]), "CP"] 89 | min_cp 90 | 91 | # min_cp ile karar ağacını budamak 92 | tree_pruned <- prune(tree = tree_class, cp = min_cp) 93 | rpart.plot(tree_pruned) 94 | 95 | tree_class 96 | tree_pruned 97 | 98 | prp(tree_class, type = 1) 99 | 100 | y_pred <- predict(tree_pruned, test_x, type="class") 101 | 102 | #test için cm 103 | confusionMatrix(test_y, y_pred, positive = "H") 104 | 105 | pred_y_tr <- predict(tree_pruned, train_x, type="class") 106 | confusionMatrix(train_y, pred_y_tr) 107 | 108 | 109 | 110 | # model tuning işlemleri 111 | 112 | # cv.tree ile model tune etme işlemi 113 | seat_tree <- tree(Sales ~ . , data = train) 114 | 115 | set.seed(12312153) 116 | seat_tree_cv <- cv.tree(seat_tree, FUN = prune.misclass, K = 10) 117 | min_tree <- which.min(seat_tree_cv$dev) 118 | seat_tree_cv[min_tree] 119 | par(mfrow = c(1,2)) 120 | plot(seat_tree_cv) 121 | plot(seat_tree_cv$size, 122 | seat_tree_cv$dev / nrow(train), 123 | type = "b", 124 | xlab = "Agac Boyutu/Dugum Sayisi", ylab = "CV Yanlis Siniflandirma Orani") 125 | 126 | 127 | # caret ile model tune işlemi 128 | set.seed(123) 129 | ctrl <- trainControl(method="cv", 130 | summaryFunction = twoClassSummary, 131 | classProbs = TRUE) 132 | 133 | 134 | cart_tune <- train( 135 | x = train_x, 136 | y = train_y, 137 | method = "rpart", 138 | tuneLength = 50, 139 | metric = "ROC", 140 | trControl = ctrl) 141 | 142 | plot(cart_tune) 143 | 144 | confusionMatrix(predict(cart_tune, test_x), test_y, positive = "H") 145 | 146 | #RANDOM FOREST İLE SINIFLANDIRMA 147 | 148 | rf_fit <- randomForest(Sales~., data = train, ntree=150, mtry=10) 149 | 150 | pred_y <- predict(rf_fit, test_x) 151 | 152 | test_y 153 | pred_y 154 | #test hatası 155 | confusionMatrix(pred_y, test_y, positive = "H") 156 | #train hatası 157 | confusionMatrix(predict(rf_fit, train_x), train_y, positive = "H") 158 | 159 | 160 | # model tuning 161 | ctrl <- trainControl(method = "cv", number = 10, search='grid') 162 | 163 | rf_grid <- expand.grid(data.frame(mtry=c(1:10))) 164 | rf_tune <- train(Sales~., data=train, tuneGrid = rf_grid, trControl=ctrl, 165 | method="rf", metric = 'Accuracy') 166 | 167 | plot(rf_tune) 168 | predict(rf_tune, test_x) 169 | confusionMatrix(predict(rf_tune, test_x), test_y, positive = "H") 170 | 171 | 172 | 173 | 174 | 175 | 176 | 177 | 178 | 179 | 180 | 181 | 182 | 183 | 184 | 185 | 186 | 187 | 188 | 189 | 190 | 191 | 192 | 193 | 194 | 195 | 196 | 197 | 198 | 199 | 200 | 201 | 202 | 203 | -------------------------------------------------------------------------------- /CART.Rmd: -------------------------------------------------------------------------------- 1 | --- 2 | title: "CART" 3 | output: html_notebook 4 | --- 5 | 6 | # CART (Classification and Regression Trees) 7 | 8 | ## Kütüphanelerin Yüklenmesi 9 | ```{r} 10 | library(caret) 11 | library(tidyverse) 12 | library(AppliedPredictiveModeling) 13 | library(pls) #kismi en kucuk kareler ve pcr icin 14 | library(elasticnet) 15 | library(broom) #tidy model icin 16 | library(glmnet) 17 | library(MASS) 18 | library(ISLR) 19 | library(PerformanceAnalytics) 20 | library(funModeling) 21 | library(Matrix) 22 | library(kernlab) #svm 23 | library(e1071) #svm icin 24 | library(rpart) #cart icin 25 | library(pgmm) #olive data seti icin 26 | library(dslabs) 27 | library(rpart.plot) #rpart gorsel icin 28 | library(partykit) #karar agaci gorseli icin 29 | library(ipred) #bagging icin 30 | library(randomForest) 31 | library(gbm) 32 | library(nnet) 33 | library(neuralnet) 34 | library(GGally) 35 | library(NeuralNetTools) #garson fonksiyonu icin 36 | library(FNN) 37 | library(dplyr) 38 | library(ggpubr) 39 | ``` 40 | 41 | ## Verisetinin yüklenmesi 42 | 43 | ```{r} 44 | df <- read.csv("Advertising.csv") 45 | df <- df[-1] 46 | head(df) 47 | ``` 48 | 49 | ### Veriye grafikler ve foksiyonlar yardımıyla ilk bakış: 50 | 51 | ```{r} 52 | profiling_num(df) 53 | summary(df) 54 | ggpairs(df) 55 | pairs(df,pch=18) 56 | 57 | ``` 58 | 59 | ## Model Kurma Aşaması 60 | 61 | Örnek olması açısından televizyon ile satışlar arasında bir ağaç modeli kuralım 62 | 63 | ```{r} 64 | cart_tree <- rpart(sales~TV, data = df) 65 | cart_tree 66 | ``` 67 | 68 | Şimdi bir de bütün değişkenlerle model kuralım: 69 | ```{r} 70 | cart_tree <- rpart(sales~., data = df) 71 | cat("Modelin çıktısı: \n") 72 | cart_tree 73 | cat("Model içinden okunabilecek özellikler:\n") 74 | names(cart_tree) 75 | cat("Değişkenlerin modeldeki önemleri:\n") 76 | cart_tree$variable.importance 77 | ``` 78 | 79 | 80 | Modeli plot ile görselleştirebiliriz: 81 | ```{r} 82 | plot(cart_tree, margin=0.1, main="Cart Tree Karar Ağacı") 83 | text(cart_tree, col="blue") # cart tree içinden text alıp ekledik plota 84 | ``` 85 | 86 | Daha güzel görselleştirme de yapan bir kütüphane var ve son derece basit. 87 | rpart içinden kullanılabilir. 88 | ```{r} 89 | prp(cart_tree) 90 | rpart.plot(cart_tree) 91 | 92 | ``` 93 | 94 | Bu ağaç yapısı kaç tane köke sahip olmalı ve nerden budamalıyım gibi sorular için yine rpart içinden şu grafiği kullanabiliriz: 95 | ```{r} 96 | plotcp(cart_tree) 97 | ``` 98 | 99 | Karar ağacının eksenlerde gösterimi: 100 | Kolay anlaşılması için modeli sadece TV değişkeniyle kurduğum haliyle tekrar çalıştırdım. 101 | ```{r} 102 | df %>% mutate(y_tahmin = predict(cart_tree))%>% 103 | ggplot()+ 104 | geom_point(aes(TV, sales)) + 105 | geom_step(aes(TV, y_tahmin, col=y_tahmin)) 106 | ``` 107 | 108 | Yatay çizgileri sayarsak algoritmanın kaç parçaya bölerek karar ağacı oluşturduğunu görebilir. Yatay çizgilerin sayısı 7 parça, yani 7'ye bölünmüş. 109 | Peki neden 7'ye böldükten sonra durdu ve ileri gitmedi. Bunu anlamak için karmaşıklık parametresine bakmamız ve anlamamız lazım. 110 | 111 | ### Karmaşıklık Parametresi 112 | 113 | #### Karmaşıklık parametresi ve minsplit. 114 | 115 | minsplit karar ağacının en son kökünde kaç tane gözlem sayısı kalacağını belirtir. Yani ağaç yapısı kurulduktan sonra karar ağacında ilerlerken, en son ağaca geldiğimiz zaman karar verilecek sadece iki gözlem kalmış olacak. 116 | 117 | Karmaşıklık parametresi ise ne kadar dallanma olacağını ifade eden parametredir. Karmaşıklık parametresi ne kadar düşük olursa o kadar fazla ağaç oluşur. 118 | 119 | Anlamak için modelimizi yeniden kuralım: 120 | 121 | ```{r} 122 | cart_tree <- rpart(sales~TV, data = df, 123 | control = rpart.control(minsplit = 2, cp=0)) 124 | 125 | #cart_tree #yazdırarak ne kadar uzun bir yapı oluştuğunu görebiliriz. 126 | 127 | #tekrar görselleştirip yukarıdaki görsel ile farkına bakalım 128 | df %>% mutate(y_tahmin = predict(cart_tree))%>% 129 | ggplot()+ 130 | geom_point(aes(TV, sales)) + 131 | geom_step(aes(TV, y_tahmin, col=y_tahmin)) 132 | ``` 133 | 134 | ### Karar ağacının budanması 135 | 136 | Eğer yukarıda bahsettiğimiz ağaç budama (prune) işlemini yapmak istersek aynı isimli prune fonksiyonuyla bunu yapabiliriz. 137 | 138 | ```{r} 139 | pruned_cart <- prune(cart_tree, cp = 0.01) 140 | ``` 141 | 142 | Yine görselleştirip sonuca bakalım: 143 | 144 | ```{r} 145 | df %>% mutate(y_tahmin = predict(pruned_cart))%>% 146 | ggplot()+ 147 | geom_point(aes(TV, sales)) + 148 | geom_step(aes(TV, y_tahmin, col=y_tahmin)) 149 | ``` 150 | 151 | Gördüğümüz üzere daha uzantısız bir ağaç oluştu. Modeli yazdırıp bakarsak daha rahat anlaşılabilir ne yaptığımız. 152 | 153 | ```{r} 154 | pruned_cart 155 | ``` 156 | 157 | Grafiğini çizip iki grafik araındaki farkı görelim karşılaştıralım. 158 | 159 | ```{r} 160 | rpart.plot(cart_tree) 161 | rpart.plot(pruned_cart) 162 | ``` 163 | 164 | 165 | ## Model Tuning 166 | 167 | train fonksiyonu içindeki method değerinini rpart yaptığımızda karmaşıklık partametresini, rpart2 yaptımızda ise maksimum derinlik parametresini tune etmiş oluruz. 168 | ```{r} 169 | 170 | ctrl <- trainControl(method = "cv", number = 10) 171 | 172 | cart_grid <- data.frame( 173 | cp = seq(0, 0.5, len=25) 174 | ) 175 | 176 | cart_tune <- train(sales~., data = df, 177 | method = "rpart", 178 | trControl = ctrl, 179 | tuneGrid = cart_grid, 180 | preProc = c("center", "scale")) 181 | 182 | cart_tune 183 | cart_tune$bestTune 184 | cart_tune$finalModel 185 | plot(cart_tune) 186 | rpart.plot(cart_tune$finalModel, main="Final Modelinin Yapısı") 187 | ``` 188 | 189 | 190 | 191 | ## Sonuç 192 | 193 | Sonuç olarak ağaçlar bazen en dallanmış budaklanmış halleriyle :) bazen de budanmış veya optimum düzeyde oluşturulmuş haliyle kullanılabilir. 194 | 195 | Eğer genelleme yapmasını istemediğimiz, genellenebilir bir model kurmak istemediğimiz bir durum varsa, karar ağacını en uzatmamız daha iyi olur. Çünkü mevcut durumu tanımlamada karar ağaçları en son birime kadar inerek karar alınmasını sağlayabilir. Örnek olarak sadece o anki belirli bir şirkete eleman alırken verilecek maaşı belirlemek için karar ağacı en dallanmaış haliyle kullanılırsa en iyi sonucu verir. Ama eğer biz kurduğumuz modeli başka şirketler için de kullanmak istiyorsak, yani genellenebilir bir model istiyorsak, optimum noktada ağacı sonlandırmak daha doğru sonuç verir. 196 | 197 | Nihayatinde, genellenebilirlik kaygısı olmayan, mevcut durumu tanımlayan modellerde cp = 0, minsplit = 2 olarak belirlenebilir. Ama genel bir model kurulup kullanılmak istendiğinde optimum noktadan kesmek daha doğru karar vermemizi sağlar. 198 | 199 | 200 | -------------------------------------------------------------------------------- /EDA.Rmd: -------------------------------------------------------------------------------- 1 | --- 2 | title: "KEŞİFÇİ VERİ ANALİZİ" 3 | output: html_notebook 4 | author: Regaip KURT 5 | --- 6 | 7 | This is an [R Markdown](http://rmarkdown.rstudio.com) Notebook. When you execute code within the notebook, the results appear beneath the code. 8 | 9 | Try executing this chunk by clicking the *Run* button within the chunk or by placing your cursor inside it and pressing *Ctrl+Shift+Enter*. 10 | 11 | ### Kütüphanelerin Yüklenmesi 12 | 13 | ```{r} 14 | library(tidyverse) 15 | library(ggplot2) 16 | ``` 17 | 18 | ### Değişken Türlerinin Ayarlanması 19 | 20 | ```{r} 21 | veri <- mpg 22 | print(veri) 23 | glimpse(veri) 24 | ``` 25 | 26 | class değişkeni chr tipinde ama bizim bunu factor tipine dönüştürmemiz gerekiyor. 27 | ```{r} 28 | veri$class <- factor(veri$class) 29 | glimpse(veri) 30 | ``` 31 | 32 | displ değişkeninin değerleri 2'den büyükse 1 değilse 0 olacak şekilde değiştirelim. 33 | ```{r} 34 | veri$displ <- ifelse(veri$displ > 2, 1, 0) 35 | veri$displ <- as.factor(veri$displ) 36 | glimpse(veri) 37 | ``` 38 | 39 | ### Veriye İlk Bakış 40 | #### Genel fonksiyonlar 41 | ```{r} 42 | head(veri) #ilk 5 satır 43 | tail(veri) # son 5 satır 44 | colnames(veri) #kolon isimleri 45 | rownames(veri) # satır isimleri (çok fazla veride anlamı olmaz) 46 | nrow(veri) # satır sayısı 47 | ncol(veri) # dolon sayısı (özellik veya değişken sayısı da denilebilir.) 48 | glimpse(veri) # veriye ve değişkenlerine hızlı bakış 49 | summary(veri) #verinin istatistikleri 50 | fivenum(veri$cty) # bir kolonun 5'li istatistik değerini direk döndürür 51 | levels(veri$class) # kategorik değişkenleri içeren bir sütundaki kategoriler. 52 | ``` 53 | 54 | ### Sürekli ve Kategorik Değişken Özetleri 55 | 56 | Sürekli değişkenlerin özetleri için funModelling kütüphanesinden hızlıca yararlanılabilir. 57 | 58 | ```{r} 59 | library(funModeling) #yüklü olmayabilir. yüklenmesi gerekir. 60 | profiling_num(veri) 61 | plot_num(veri) 62 | 63 | ``` 64 | 65 | ### Kategorik Değişkenlerle ilgili bilgi alınması 66 | 67 | Burada yine funModelling kütüphanesi kullanılabilir *ŞİDDETLE ÖNERİLİR!* 68 | ```{r} 69 | freq(veri) #Sadece tek fonksiyonun yaptığı işlere dikkat et! 70 | ``` 71 | 72 | ### Daha detaylı bir bakış 73 | 74 | ```{r} 75 | library(psych) #yüklü değilse yüklenmeli 76 | describe(veri) 77 | describe.by(veri, group = veri$class) #bir sınıf oluşturup ona göre özetleme 78 | #ancak ve ancak kategorik bir değişkene göre sınıflandırma yapılabilir!!! 79 | 80 | library(Hmisc) # yüklü olmayabilir, yüklenmeli 81 | Hmisc::describe(veri) # psych ile aynı isimde describe fonksiyonu o yüzden hmisc:: ile belirttik. 82 | library(pastecs) #yüklü olmayabilir. 83 | stat.desc(veri) 84 | 85 | ``` 86 | 87 | ## DataFrame'lerin interaktif Keşfi 88 | 89 | ### d3Tree Kütüphanesi 90 | 91 | ```{r} 92 | #install.packages("d3Tree") 93 | #d3tree ile bir ağaç yapısı oluşturabiliriz. 94 | library(d3Tree) 95 | d3tree(list( 96 | root = df2tree(veri, 97 | rootname = "veri", 98 | struct = as.data.frame(veri)), 99 | layout = "collapse" 100 | )) 101 | ``` 102 | 103 | ### xplorerr Kütüphanesi 104 | 105 | Bu kütüphane veriyi incelememiz için bir shiny application şeklindedir ve kolaylık sağlayabilir. 106 | ```{r} 107 | #install.packages("xplorerr") 108 | library("xplorerr") 109 | app_descriptive() 110 | ``` 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | 125 | 126 | 127 | 128 | 129 | 130 | 131 | 132 | -------------------------------------------------------------------------------- /GBM-CLASSIFICATION.R: -------------------------------------------------------------------------------- 1 | 2 | 3 | library(ISLR) 4 | library(tidyverse) 5 | library(funModeling) 6 | library(caret) 7 | library(pROC) 8 | library(class)#knn icin 9 | library(e1071)#knn icin 10 | library(kernlab) #svm icin 11 | library(ROCR) #roc icin 12 | library(neuralnet) 13 | library(GGally) 14 | library(nnet) 15 | library(rpart) 16 | library(cli) 17 | library(tree) 18 | library(rpart.plot) 19 | library(randomForest) 20 | library(gbm) 21 | library(xgboost) 22 | library(DiagrammeR) 23 | library(mlbench) 24 | library(ISLR) 25 | 26 | df <- Carseats 27 | str(df) 28 | summary(df) 29 | hist(df$Sales) 30 | df$Sales <- factor(ifelse(df$Sales>7.5, "H", "L")) 31 | summary(df$Sales) 32 | 33 | 34 | set.seed(123) 35 | train_indeks <- createDataPartition(df$Sales, 36 | p = .8, 37 | list = FALSE, 38 | times = 1) 39 | 40 | 41 | train <- df[train_indeks,] 42 | test <- df[-train_indeks,] 43 | 44 | 45 | train_x <- train %>% dplyr::select(-Sales) 46 | train_y <- train$Sales 47 | test_x <- test %>% dplyr::select(-Sales) 48 | test_y <- test$Sales 49 | #tek bir veri seti 50 | training <- data.frame(train_x, Sales = train_y) 51 | 52 | train$Sales <- as.factor(ifelse(as.numeric(train$Sales)==2,1,0)) 53 | train_y <- as.factor(ifelse(as.numeric(train_y)==2,1,0)) 54 | 55 | train$Sales <- as.numeric(train$Sales) 56 | train <- transform(train, Sales = Sales - 1) 57 | 58 | gbm_fit <- gbm(Sales~., data = train, 59 | shrinkage = 0.01, 60 | distribution = "bernoulli", 61 | cv.folds = 5, 62 | n.trees = 3000, 63 | verbose = F) 64 | 65 | gbm_fit 66 | summary(gbm_fit) 67 | 68 | gbm.perf(gbm_fit, method = "cv") 69 | plot.gbm(gbm_fit, 3, gbm.perf(gbm_fit, method = "cv")) 70 | 71 | y_pred <- predict.gbm(gbm_fit, test_x, type = "response") 72 | y_pred <- ifelse(y_pred<0.5, "H","L") 73 | y_pred <- as.factor(y_pred) 74 | 75 | confusionMatrix(test_y, y_pred, positive = "H") 76 | -------------------------------------------------------------------------------- /GBM.R: -------------------------------------------------------------------------------- 1 | rm(list = ls()) 2 | 3 | library(caret) 4 | library(tidyverse) 5 | library(AppliedPredictiveModeling) 6 | library(pls) #kismi en kucuk kareler ve pcr icin 7 | library(elasticnet) 8 | library(broom) #tidy model icin 9 | library(glmnet) 10 | library(MASS) 11 | library(ISLR) 12 | library(PerformanceAnalytics) 13 | library(funModeling) 14 | library(Matrix) 15 | library(kernlab) #svm 16 | library(e1071) #svm icin 17 | library(rpart) #cart icin 18 | library(pgmm) #olive data seti icin 19 | library(dslabs) 20 | library(rpart.plot) #rpart gorsel icin 21 | library(partykit) #karar agaci gorseli icin 22 | library(ipred) #bagging icin 23 | library(randomForest) 24 | library(gbm) 25 | library(nnet) 26 | library(neuralnet) 27 | library(GGally) 28 | library(NeuralNetTools) #garson fonksiyonu icin 29 | library(FNN) 30 | library(dplyr) 31 | library(ggpubr) 32 | 33 | df <- Boston 34 | head(df) 35 | 36 | profiling_num(df) 37 | glimpse(df) 38 | summary(df) 39 | ggpairs(df) 40 | pairs(df,pch=18) 41 | 42 | set.seed(3456) 43 | train_indeks <- createDataPartition(df$medv, p=0.8, list = F, times = 1) 44 | train <- df[train_indeks, ] 45 | test <- df[-train_indeks, ] 46 | train 47 | 48 | train_x <- train %>% dplyr::select(-medv) 49 | train_y <- train$medv 50 | test_x <- test %>% dplyr::select(-medv) 51 | test_y <- test$medv 52 | 53 | gbm_fit <- gbm(medv ~., data = train, distribution = "gaussian", 54 | n.trees = 5000, 55 | interaction.depth = 1, 56 | shrinkage = 0.01) 57 | #shrinkage parametresi learning rate'e karşılık geliyor. 58 | gbm_fit 59 | summary(gbm_fit) 60 | 61 | defaultSummary(data.frame(obs=train_y, 62 | pred=gbm_fit$fit)) 63 | 64 | # parametrelerle oynayarak yeniden model deneyelim 65 | 66 | gbm_fit <- gbm(medv ~., data = train, distribution = "gaussian", 67 | n.trees = 10000, 68 | interaction.depth = 1, 69 | shrinkage = 0.01, 70 | cv.folds = 5) 71 | 72 | gbm.perf(gbm_fit, method = "cv") 73 | 74 | defaultSummary(data.frame(obs=train_y, 75 | pred=gbm_fit$fit)) 76 | 77 | 78 | # train için RMSE = 2.45 oldu. Ama test hatamızı da hesaplayıp sonucu görelim 79 | 80 | pred_y <- predict(gbm_fit, test_x) 81 | 82 | #pred_y <- predict(gbm_fit, test_x, n.trees = 500) 83 | # predict fonksiyonuyla gbm kullanılırken n.trees ile kaç ağaç kullanılacağı belirlenebilir. 84 | 85 | defaultSummary(data.frame(obs=test_y, 86 | pred=pred_y)) 87 | 88 | plot(predict(gbm_fit, test_x, n.trees = 5000), test_y, 89 | xlab = "Tahmin Edilen", ylab = "Gercek", 90 | main = "Tahmin Edilen vs Gercek: GBM", 91 | col = "dodgerblue", pch = 20) 92 | 93 | grid() 94 | 95 | abline(0, 1, col = "darkorange", lwd = 2) 96 | 97 | 98 | #gbm için model tuning 99 | 100 | # 4 tane parametreyi optimize edebiliriz: 101 | # 1) n.trees, 2) interaction_depth (karmaşıklık katsayısı), 3)shrinkage, 4)minode 102 | 103 | #minode eğitim seti içindeki gözlem sayısı 104 | 105 | ctrl <- trainControl(method = "cv", number = 10, search = "grid") 106 | 107 | gbm_grid <- expand.grid(interaction.depth = seq(1,7, by = 2), 108 | n.trees = seq(100,1000, 50), 109 | shrinkage = c(0.01, 0.1), 110 | n.minobsinnode = c(10:20) 111 | ) 112 | 113 | gbm_fit <- train(train_x, train_y, method = "gbm", 114 | trControl = ctrl, tuneGrid = gbm_grid, verbose=FALSE) 115 | 116 | plot(gbm_fit) 117 | gbm_fit$finalModel 118 | 119 | gbm_fit$results %>% 120 | filter(n.trees == as.numeric(gbm_fit$bestTune$n.trees) & 121 | interaction.depth == as.numeric(gbm_fit$bestTune$interaction.depth) & 122 | shrinkage == as.numeric(gbm_fit$bestTune$shrinkage) & 123 | n.minobsinnode == as.numeric(gbm_fit$bestTune$n.minobsinnode)) 124 | 125 | 126 | defaultSummary(data.frame(obs = test_y, 127 | pred = predict(gbm_fit, test_x))) 128 | 129 | " 130 | shrinkage interaction.depth n.minobsinnode n.trees RMSE Rsquared MAE 131 | 1 0.1 5 10 700 3.1 0.9 2.2 132 | 133 | RMSESD RsquaredSD MAESD 134 | 1 0.87 0.036 0.36 135 | " 136 | 137 | 138 | 139 | 140 | 141 | 142 | 143 | 144 | 145 | 146 | 147 | 148 | 149 | 150 | 151 | 152 | 153 | -------------------------------------------------------------------------------- /Giris_Egitimi/R-Project-1.R: -------------------------------------------------------------------------------- 1 | # R programlama için örnek kodlar 2 | 3 | print("Merhaba R") # ekrana bir şey yazdırma 4 | 5 | # Değişkene değer atama 6 | a = 3 7 | 3 -> a 8 | a <- 3 9 | a 10 | # her üç durumda da a'nın değeri 3 olarak belirleniyor. 11 | yazi = "Merhaba R" # string ifadeler "" içinde belirtilir. 12 | yazi 13 | 14 | # Matematiksel operatörler 15 | b = 50 16 | c = 90 17 | 18 | b/c 19 | b+c 20 | b-c 21 | b*c 22 | 23 | d = 5 24 | e = 2 25 | 26 | d^e #üs alma şlemi 27 | #seri oluşturma 28 | seri = seq(30:10) 29 | seri2 = c(10:20) #10'dan 20'ye kadar sayılar serisi 30 | seri3 = c(20:10) #20'den 10 a kadar sayılar serisi 31 | seri4 = c(10,20) #sadece 10 ve 20 den oluşan seri 32 | 33 | #seri işlemleri 34 | 35 | seri[6] #serinin 6. elemanı 36 | 37 | seri3[c(2,3,4)] #seri 3 ün 2,3, ve 4. elemanları sırasıyla 38 | seri3[2:4] #hemen üstteki ile aynı işi yapıyor 39 | seri2[seri2<16 & seri2 >12] #seri2 nin 16 dan küçük ve 12'den büyük elemanları 40 | seri[seri>15 | seri <15] #serinin 15 ten büyük veya 15 ten küçük elemanları (hepsi) 41 | # & işareti ve anlamına gelir. | işareti ise veya anlamına gelir. 42 | # bu işaretler yukarıdaki gibi işlemlerde kullanılabilir. 43 | 44 | #seri elemanlarını birleştirme 45 | paste(c("x","y"), 0:10, sep = ",") 46 | paste(c(3,5), 0:10, sep = "*") 47 | paste(c(10), 0:5, sep = "*") 48 | paste(seri3, seri2, sep = "-") #seri3 ve seri2 elemanlarını "-" işaretiyle birleştirecek 49 | 50 | 51 | #Matematiksel fonksiyonalar 52 | 53 | log10(10) #log10 tabanında 10 54 | log(3, 9) #logaritma 9 tabanında 3 55 | tan(45) 56 | 57 | # Fonksiyon oluşturma 58 | g = function(x,y) 59 | { 60 | (x^2) - (2*y) + 6 61 | } 62 | 63 | 64 | -------------------------------------------------------------------------------- /Giris_Egitimi/R-Project-2.R: -------------------------------------------------------------------------------- 1 | a = seq(from=5, to=25, by=3) #5'ten 25'e 3 artarak giden dizi 2 | b = seq(from=40, to = 18, by = -4) #40'tan 18'e kadar 4 azalarak giden dizi 3 | c = seq(from=1, to = 10, by = 1.5) 4 | 5 | d = rep(10:14, times=3) 6 | # yukarıdaki kod ile 10 dan 14 e kadar olan sayilari 3 kere tekrar ettik 7 | e = rep(seq(from=1, to=2, by=0.25), times=2) 8 | #1'den 2'ye kadar 0.25 artarak giden sayıları 2 kez tekrar ettik 9 | 10 | length(e) #e serisinin eleman sayısı yani uzunluğu 11 | a / 3 # a dizisinin her elemanını 3 e böler 12 | a -2 #a nın her elemanından 2 çıkarır 13 | 14 | max(a) #a'nın en büyük elemanı 15 | min(b) #c'nin en küçük elemanı 16 | 17 | a = 5:9 #a 5'den 9'a kadar sayılar 18 | 19 | a[-2] # a'nın 2. elemanı dışındakiler 20 | 21 | a[-2:-4] #a'nın 2. vew4. elemanları arasındakiler hariç kısmı 22 | 23 | a + d # a ve d vektörlerini topladık 24 | #iki vektörün toplanması için boyutlar aynı veya birbirinin katı olmalıdır. 25 | #sadece toplama değil bütün işlemlerde geçerlidir. 26 | 27 | x = 60:64 28 | 29 | a *x 30 | 31 | 32 | # MATRİSLER 33 | 34 | matris_row = matrix(1:9, ncol = 3, byrow = TRUE) 35 | matris_col = matrix(1:9, nrow = 3, byrow = FALSE) 36 | matris = matrix(1:8, nrow = 2, byrow = TRUE) 37 | # kolon sayısı veya satır sayısından istenilen birisi belirtilebilir. 38 | 39 | #kolon veya satır bazlı matris yapısı elemanlara erişimi etkiler 40 | # aşağıdaki örneklerde bu fark görülebilir. 41 | matris_row[4] #4. eleman (2 boyutlu vektör mantığına göre) (2) 42 | matris_col[4] #4. eleman (2 boyutlu vektör mantığına göre) (4) 43 | 44 | matris_col[3,2] # 3.satır 2. sütun elemanı (6) 45 | matris_row[3,2] # 3.satır 2. sütun elemanı (8) 46 | 47 | matris[1,] # 1. satır elemanlarına erişim. 48 | matris[,2] # 2. sütun elemanlarına erişim. 49 | 50 | matris[-2,2] # 2. sütunun 2. elemanı hariç olanlar kısmı 51 | 52 | matris[1, -3] # matrisin 1. satırında 3. eleman hariç olanlar 53 | 54 | matris_col / matris_row # matris bölümü. işlemlerin hepsinde boyut aynı olmalı 55 | #dizilerle yapılan işlemlerin hepsi matrislerle de yapılabilir. 56 | 57 | -------------------------------------------------------------------------------- /Giris_Egitimi/R-Project-3.R: -------------------------------------------------------------------------------- 1 | veri = iris # iris veri setini yükledik. #datasets i import etmeden yüklemez. 2 | y = veri[5] #verinin 5. kolunu 3 | x = veri[1:4] # verinin 1. ve 4. kolonları arası 4 | 5 | names(veri) # verinin başlıkları 6 | mean(veri$Sepal.Length) #veri den sonra dolar koyarak sütunun ortalaması alınabilir. 7 | 8 | attach(iris) #iris verisini R içine yükledik direk erişim için 9 | Sepal.Length #attach yaptıktan sonra direk veri sütununu çağırabiliyoruz. 10 | detach(iris) # hafızadan iris verisini sildik. attach büyük verilerde çok hafıza kullanır 11 | class(iris$Sepal.Width) # veideki sütunu tipini gösterir. 12 | class(iris$Species) 13 | 14 | dim(iris) # iris verisetinin boyutu 15 | 16 | summary(iris) # veriseti ile ilgili istatistiki bilgileri gösterir(her sütun için) 17 | 18 | iris$Sepal.Length[iris$Species == "setosa"]#ne yaptık altta açıklayalım 19 | 20 | #iris'in sepal length değerlerini yazdır ama bu değerler species kolonu setosa olanlar olsun sadece 21 | #daha farklı yapıp anlayalım 22 | 23 | iris$Petal.Width[iris$Sepal.Length>=5.2] 24 | #iris in petal width kolonunu al ama buna karşılık gelen sepal length 5.2 den küçük olsun 25 | 26 | setos_low = iris$Sepal.Length[iris$Species=="setosa" & iris$Sepal.Length<=5.2] 27 | setos_low 28 | setos_high = iris$Sepal.Length[iris$Species=="virginica" & iris$Sepal.Length>=6.0] 29 | setos_high 30 | 31 | data1 = iris[iris["Species"] =="versicolor" & iris$Petal.Length>5.0,] 32 | #irisin species i veriscolor ve sepal length i 5 den büyük olan değerlerini aldık. 33 | data1 34 | versi = iris[iris["Species"] == "versicolor",] #versicolor olanları seçtik 35 | #sondaki virgül bütün veriyi almamızı sağlar. yani uyuşan tüm satır ve kolonlar 36 | versi 37 | 38 | #veriyi faktör verisine veya numerik veriye dönüştürme 39 | as.factor(iris$Species) 40 | as.factor(iris$Sepal.Length) 41 | summary(iris) 42 | class(iris$Sepal.Length) 43 | class(iris$Species) 44 | iris$Species = as.numeric(iris$Species) 45 | class(iris$Species) 46 | summary(iris) 47 | iris$Species = as.factor(iris$Species) 48 | #veri tipinin değiştiğini görebiliriz. bu özellik veri biliminde sıkça kullanılır. 49 | #sınıflandırma gibi problemlerde lazım olacaktır. 50 | 51 | #veriye bir kolon ekleme 52 | #örneğin species versicolor ve sepal length > 5 ise 53 | #oluşan true false kolonunu iris içine ekleyelim 54 | 55 | iris = cbind(iris, iris$Species==2 & iris$Sepal.Length>5.1) 56 | 57 | #VERILERI CALISMA ORTAMINDA GORMEK ISTERSENIZ ASAGIDAKI KODU SILINIZ.. 58 | rm(list = ls()) # ls ile dönen bütün listeyi sil 59 | #yukarıdaki konutla kısa yoldan bütün çalışma alanını temizledik. 60 | -------------------------------------------------------------------------------- /Giris_Egitimi/R-Project-4.R: -------------------------------------------------------------------------------- 1 | # R Project Ortamın Kaydedilmesi ve Scriptler 2 | 3 | x = c(1,2,3,4,5,6) # liste oluşturma 4 | x = seq(1:6) # 1'den 6'ya kadar olan sayılar için bu şekilde de oluşturabiliriz. 5 | getwd() # şu anki çalışma dizinini gösterir 6 | 7 | setwd("/home/pars") # çalışma dizinini yeniden istediğimiz bir yere belirtebiliriz. 8 | 9 | save.image("kayit.rdata") #şu anki çalışma içeriğimizi bir dosyaya kaydettik. 10 | 11 | load("kayit.rdata") # kaydettiğimiz dosyayı çalışma ortamına yükeldik. 12 | 13 | load(file.choose()) #burada açılan pencereden de yüklemek istediğimiz dosyayı seçebiliriz. 14 | # yukarıdaki konutu program yazarken veriyi yüklemek için de kullanabiliriz. 15 | ls # dosyayı yükledikten sonra oluşturduğumuz x burada görünecek. 16 | #denemek için programı açıp kapatın ve değişkenlerin yüklendiğini göreceksiniz. 17 | 18 | #remove(list = ls()) # oluşturduğumuz bütün değişkenleri hafızadan sildik 19 | -------------------------------------------------------------------------------- /Giris_Egitimi/R-Project-5.R: -------------------------------------------------------------------------------- 1 | # R Paketler ve Grafikler 2 | 3 | installed.packages() # sistemde yüklü olan paketleri gösterir. 4 | 5 | require("readxl") # hata verecek çünkü paket yüklü değil 6 | #require() pythondaki import veya c# daki using gibi dışardan modülleri yükler. 7 | 8 | install.packages("readxl") #internetten bu paketi yükleyecek 9 | #excel ile ilgili işlem yapmak için bir pakettir readxl 10 | 11 | require("readxl") #şimdi paketi sorunsuz import edecek. (Yüklemesi uzun sürebilir.) 12 | 13 | veri = iris #iris verisini kullanacağız ve veri değişkenine atadık 14 | #yan tarafta packages içinde datasets e tıklayıp başka verileri de kullanabilirsiniz 15 | 16 | head(veri) #verinin baş kısmını göster 17 | 18 | barplot(veri$Sepal.Length) # sepal length in barplot grafiği 19 | 20 | table(veri$Species) # özelliklerin tablo halinde dağılımı (grafik değil) 21 | 22 | barplot(table(veri$Species)) # şimdi grafik şeklinde dağılımı gösterecek 23 | 24 | dagilim = table(veri$Species) # dagilim değişkenine dağılımları atadık 25 | dagilim #şimdi bu değişkenle dağılımı gösterelim 26 | 27 | yuzdeler = table(veri$Species) / 150 #yüzde olarak görmek için toplam sayıya böldük. 28 | barplot(yuzdeler) 29 | 30 | #barplot grafiğinin özelleştirilmesine bakalım 31 | 32 | barplot(table(veri$Species)/150, xlab = "Yaprak Türü", ylab = "Yüzde oranı", main = "YÜZDE DAĞILIM GRAFİĞİ", names.arg=c("1. Yaprak Türü", "2. Yaprak Türü", "3. Yaprak Türü"), col = c("blue", "red", "yellow")) 33 | # bazı özellikleri c() fonksiyonu ile liste halinde verdiğimize dikkat edelim 34 | help("barplot") #kullanabileceğimiz özellikleri görelim help ile 35 | 36 | pie(table(veri$Species), xlab = "Yaprak Türü", ylab = "Yüzde oranı", main = "YÜZDE DAĞILIM GRAFİĞİ", names.arg=c("1. Yaprak Türü", "2. Yaprak Türü", "3. Yaprak Türü"), col = c("blue", "red", "yellow")) # pasta grafiği oluşturma 37 | 38 | boxplot(veri$Sepal.Length) # sayıların hangi aralıkta değiştiğini görmemize yarar. 39 | boxplot(veri$Sepal.Width ~ veri$Species, col=c("green","red", "blue")) #sepal width in dağılım aralığını yaprak türüne göre gördük 40 | #ortada görünen kutu içindeki kalın çizgi ortalamadır. alt ve üstteki çizgiler max ve min değerleri gösterir. 41 | 42 | hist(veri$Sepal.Length, xlab = "Sepal Length", freq = FALSE) #histogram grafiği çizdirme 43 | #histogram ın barplot dan farkı her girdi için değil aralık grafiği oluşturur. 44 | 45 | hist(veri$Petal.Width, freq = FALSE) 46 | hist(veri$Petal.Width) 47 | lines(veri$Sepal.Width) 48 | 49 | getwd() # çalışma dizinini bulmak için 50 | setwd("/home/pars/Masaüstü/PARS/R_Projects/") #çalışma dizinini değiştirmek için 51 | getwd() # kontrol edelim nerde olduğumuzu 52 | 53 | cancer = read.csv("cancer.csv", header = TRUE) # cancer isimli nternetten indirdiğim datayı yükledim 54 | # kodun bulunduğu dizinde var indirip çalışma dizinine atın. 55 | head(cancer) 56 | hist(as.numeric(cancer$age), col="blue", freq = FALSE) #yaş kolonunun histogram grafiği 57 | lines(density(as.numeric(cancer$age)), col="red", lwd=2) # çizgi ile yoğunluk çizer. 58 | box(which = "plot") # grafiğin etrafına çerçeve koyar. 59 | help("box") # help ile daha fazla özellik görüntülenebilir 60 | 61 | names(cancer) # cancer verisindeki kolon isimleri 62 | stem(as.numeric(cancer$deg.malig)) # as numeric yapmamın sebebi numerik olmayan verileri görüntülemiyor 63 | stem(as.numeric(cancer$deg.malig), scale = 0.1) #ölçek aralığını onda birine düşürdük 64 | 65 | 66 | 67 | -------------------------------------------------------------------------------- /Giris_Egitimi/R-Project-6.R: -------------------------------------------------------------------------------- 1 | #TAB tuşuna basarak kod tamamlayıcı kullanılabilir. 2 | #R Grafikler (Stacked Barchart, Mosaic Plot, Plot) 3 | 4 | barplot(iris$Sepal.Length) 5 | 6 | tablo = table(iris$Species, iris$Sepal.Length<5.5) 7 | 8 | #sepal length değerinin 5.5 ten küçük veya büyük olmasına göre yaprak tiplerini ayırdık 9 | #true olanlar küçük false olanlar büyük 5.5 ten 10 | tablo 11 | 12 | barplot(tablo, beside = TRUE, legend.text = TRUE) #barplot u şimdi tabloyla çizelim 13 | #besaide yan yana çizer. yazmazsak üst üste çizecektir. 14 | 15 | box(which = "plot") # grafiği kutu içine aldık 16 | 17 | mosaicplot(tablo) # aşağı yukarı aynı ama daha farklı bir görünüm ile 18 | 19 | cor(iris$Sepal.Length, iris$Sepal.Width) #korelasyon hesaplama 20 | #DİKKAT! Eğer veri setinde eksik veya N/A değerler varsa hesaplamaz. 21 | 22 | 23 | cor(iris$Sepal.Length, iris$Sepal.Width, use = "complete.obs") 24 | #use ile complete observations yani tamamlanmış gözlemleri kullandık 25 | #veri setinde eksik veri olması durumunda use ile düzeltilebilir bu durum 26 | help("cor") # kullanılacak diğer ayarlara bakabiliriz. 27 | #korelasyon değeri 1 veya -1'e yakınsa kuvvetli korelasyon var demektir 28 | #korelasyon = değişim katsayısı veya ilişkililik diyebiliriz. 29 | plot(iris$Sepal.Length, iris$Petal.Length, pch=2, col="blue") #pch işaretleme tipini değiştirir. 30 | #bu grafikte yüksek bir ilişki olduğu görünüyor. şimdi cor ile bakalım var mı diye. 31 | cor(iris$Sepal.Length, iris$Petal.Length) 32 | #görüldüğü gibi 0.8 gibi yüksek bir oran çıktı 33 | plot(iris$Sepal.Length, iris$Petal.Length, pch=2, col="blue", main="İris Grafiği" , cex=1.5, cex.axis=2, cex.lab=1.5, cex.main=1.5) 34 | #cex default 1 değerindedir ve işaretleri büyütür ve küçültür. 35 | plot(iris$Sepal.Length, iris$Petal.Length, col=2, col.axis=3, col.lab=4) 36 | #col.isim ile color değerleri değiştirilebilir. 37 | plot(iris$Sepal.Length, iris$Petal.Length, pch=2,font=2, font.axis=3, font.lab=1) 38 | #font ile yazı tipine ait özelliklker belirlenebilir 39 | summary(iris) # iris datasının istatistiksel özellikleri 40 | plot(iris$Sepal.Length[iris$Species=="virginica"], iris$Petal.Length[iris$Species=="virginica"], pch="v", col="red") 41 | #sepal length ve petal lenth grafiğini sadece virginica türleri için çizdirdik 42 | points(iris$Sepal.Length[iris$Species=="versicolor"], iris$Petal.Length[iris$Species=="versicolor"], pch="s", col="blue", ) 43 | #points aynı grafiğin üstüne başka bir şey daha çizdirmek istersek kullanılır 44 | 45 | par(mfrow=c(1,2)) #grafiği 1satır ve 2 kolon olmak üzere iki bölgeye böler 46 | # grafiklerimizi par komutunun ardından çizdirmemiz gerekiyor 47 | plot(iris$Sepal.Length[iris$Species=="virginica"], iris$Petal.Length[iris$Species=="virginica"], pch="v", col="red") 48 | plot(iris$Sepal.Length[iris$Species=="versicolor"], iris$Petal.Length[iris$Species=="versicolor"], pch="s", col="blue", ) 49 | #böylece 2 bölgeye farklı grafikler çizebiliriz. 50 | par(mfrow=c(1,1)) 51 | 52 | summary(iris) 53 | plot(iris$Sepal.Length, iris$Petal.Length, axes=F) #axesleri false yaptık yani çizmedik 54 | #şimdi axis leri kendimiz dolduralım istediğimiz gibi 55 | axis(side=1, at=c(4.300, 5.843, 7.900), labels =c("min", "mean","max")) 56 | axis(side=2, at=c(1.000, 3.758, 6900), labels = c("min", "mean", "max")) 57 | axis(side=3, at=c(5.100, 5.800, 6.400), labels=c("1.qrt", "median", "3.qrt"), col="red") 58 | 59 | abline(lm(iris$Sepal.Length~iris$Petal.Length), col="green") 60 | #abline ile eksenlerdeki veriler arası ilişkiyi çizdirdik grafiğimizin üstüne 61 | -------------------------------------------------------------------------------- /Giris_Egitimi/R-Project-7.R: -------------------------------------------------------------------------------- 1 | # R ile İstatistiksel Dağılımlar 2 | 3 | #binom dağılımı bir olayın arka arkaya meydana gelme sıklığını hesaplar 4 | help("dbinom") 5 | dbinom(x=10, prob = 1/6, size = 20) 6 | 7 | #Normal dağılım 8 | help("pnorm") 9 | dnorm(x=10, mean = 0, sd=20) 10 | pnorm(q=0, mean = 2, sd=10) 11 | pnorm(q=0, mean = 2, sd=10, lower.tail = FALSE) 12 | 13 | x = 0:25 #şimdi x gibi bir dizi için normal dağılıma bakalım 14 | dnorm(x, mean = 12, sd=12) # x dizisi için normal dağılım değerleri 15 | 16 | a = dnorm(x, mean = 12, sd=12) # a değişkenine atayıp toplamına bakmak istiyorum sayıların 17 | sum(a) # 0.72 çıktı ama ne yaptım ben de bilmiyorum. niye öyle çıktı acaba? 18 | 19 | plot(x, a) #plot grafiğini çizdirince ne yaptığımız çok daha iyi anlaşılıyor 20 | abline(v=12) # 12 yi orta değer belirlediğim için oraya bir çizgi koyduk grafikte 21 | 22 | #POISSON Dağılımı 23 | help("dpois") 24 | dpois(x=3, lambda = 10) #x=3 lambda=10 için dağılım 25 | dpois(x=1:7, lambda = 10) # dizi için de kullanılabilir. 26 | x=1:50 27 | a = dpois(x, lambda = 10) 28 | plot(x,a) # yine grafik ile daha iyi anlaşılıyor 29 | 30 | #Student-T Dağılımı veya T-Dağılımı 31 | qt(0.25, df=25) 32 | pt(0.40, df=10) 33 | help("qt") #kullanacağımız parametrelere bakabiliriz help ile 34 | 35 | #aşağıdaki dağılımlar da istatistikte sıkça kullanılır. bakmakta fayda var. 36 | help(pf) # f dağılımı 37 | help(pexp) # üssel(exponential) dağılım 38 | -------------------------------------------------------------------------------- /Giris_Egitimi/R-Project-8.R: -------------------------------------------------------------------------------- 1 | # R One Sample ve Two Sample T dağılım Testleri 2 | 3 | # t dağılımı veya t testi iki durmu karşılaştırmak ve sonuca etkisini bulmak için kullanılır 4 | # H0: u1=u2 (0 hipotezi denen bu durum iki ortalama birbirine eşittir anlamına gelir) 5 | # H1: u1=!u2 H1 hipotezimiz ise tam tersi (yani iki dağılımın ortalaması eşit değil demek) 6 | 7 | # iki farklı grup üzerinde analiz yapacaksak t testine bakarak ortalamalar eşitse 8 | # iki grubu aynı kabul edip analizimizin iki taraf için özdeş olduğunu söyleyebiliriz. (KESİN DEĞİL, BAŞKA ŞEYLERE DE BAKMAK GEREKEBİLİR) 9 | # Ama eğer farklı çıkıyorsa KESİNLİKLE bu iki grubu ayırıp ayrı ayrı analiz etmek gerekir! 10 | 11 | setwd("Masaüstü/PARS/R_Projects/") #çalışma ortamını verinin olduğu yere aldık 12 | cancer = read.csv("cancer2.csv") # cancer verisetini yükledik 13 | 14 | summary(cancer) #verisetinin istatistiksel özeti 15 | 16 | help("t.test") #t test 17 | 18 | a = t.test(cancer$age) # one sample two test 19 | comment(a) = " 20 | %95 doğrulukla(kesinlikle) verisetinin ortalması 61.26330 ve 63.63143 arasında değişiyormuş. 21 | Ortalama ise 62.44737 imiş. 22 | " 23 | a 24 | comment(a) 25 | 26 | #şimdi bazı ayarları değiştirelim 27 | t.test(cancer$age, conf.level = 0.99, alternative = "greater", mu=63) 28 | # %99 doğrulukla 63 den büyük mü ortalama => test ettik. 29 | 30 | #TWO-SAMPLE T-TEST 31 | #Yaş ve cinsiyet arasındaki ilişki 32 | 33 | boxplot(cancer$age ~ cancer$sex) #boxplot ile ortalamaların nasıl dağıldığını grafikleştirelim 34 | t.test(cancer$age ~ cancer$sex) 35 | t.test(cancer$age ~ cancer$sex, mu=62, alt="less") 36 | 37 | #aşağıdaki şekilde değişkene atayıp verisetindeki gibi özelliklerini çağırabiliriz. 38 | sonuc = t.test(cancer$age ~ cancer$sex, mu=62, alt="two.sided") 39 | sonuc$statistic 40 | sonuc$p.value 41 | sonuc$alternative 42 | 43 | -------------------------------------------------------------------------------- /Istanbul_Population_Analyse.R: -------------------------------------------------------------------------------- 1 | calculate_annual_growth <- function(year_one,year_two,pop_y1, pop_y2,city) { 2 | annual_growth <- (((pop_y2 - pop_y1) / pop_y1) * 100) / (year_two-year_one) 3 | message <- paste("From", year_one, "to", year_two, "the population of", city, "grew by approximately", annual_growth, "% each year.") 4 | print(message) 5 | return(annual_growth) 6 | } 7 | # Write your code starting here: 8 | city <- "Istanbul, Turkey" 9 | pop_y1 <- 691000 10 | pop_y2 <- 15029231 11 | pop_y3 <- 983000 12 | pop_y4 <- 8831800 13 | year_one <- 1927 14 | year_two <- 2017 15 | year_three <- 1950 16 | year_four <- 2000 17 | pop_change <- pop_y2 - pop_y1 18 | pop_change2 <- pop_y4 - pop_y3 19 | percentage_gr <- (pop_change-pop_y1) *100 20 | percentage_gr2 <- (pop_change2-pop_y3) *100 21 | 22 | pop_list <- list(pop_y1, pop_y3, pop_y4, pop_y2) 23 | year_list <- list(year_one,year_three,year_four,year_two) 24 | 25 | 26 | annual_gr <- percentage_gr / (year_two - year_one) 27 | annual_gr2 <- percentage_gr2 / (year_four - year_three) 28 | cag <- calculate_annual_growth (year_one,year_two,pop_y1, pop_y2,city) 29 | print (annual_gr) 30 | cag2 = calculate_annual_growth (year_three,year_four,pop_y3, pop_y4,city) 31 | print (annual_gr2) 32 | plot(x = year_list, y = pop_list, xlab = "Yıllar", ylab = "Nüfus",col = "dark red") 33 | lines(x=year_list, y=pop_list) 34 | help("plot") 35 | -------------------------------------------------------------------------------- /KNN.R: -------------------------------------------------------------------------------- 1 | #install.packages("ISLR") 2 | library(ISLR) 3 | #install.packages("tidyverse") 4 | library(tidyverse) 5 | #install.packages("funModeling") 6 | library(funModeling) 7 | #install.packages("caret") 8 | library(caret) 9 | #install.packages("pROC") 10 | library(pROC) 11 | #install.packages("class") 12 | library(class)#knn icin 13 | #install.packages("e1071") 14 | library(e1071)#knn icin 15 | #install.packages("kernlab") 16 | library(kernlab) #svm icin 17 | #install.packages("ROCR") 18 | library(ROCR) #roc icin 19 | #install.packages("neuralnet") 20 | library(neuralnet) 21 | #install.packages("GGally") 22 | library(GGally) 23 | #install.packages("nnet") 24 | library(nnet) 25 | #install.packages("rpart") 26 | library(rpart) 27 | #install.packages("cli") 28 | library(cli) 29 | #install.packages("tree") 30 | library(tree) 31 | #install.packages("rpart.plot") 32 | library(rpart.plot) 33 | #install.packages("randomForest") 34 | library(randomForest) 35 | #install.packages("gbm") 36 | library(gbm) 37 | #install.packages("xgboost") 38 | library(xgboost) 39 | #install.packages("DiagrammeR") 40 | library(DiagrammeR) 41 | #install.packages("mlbench") 42 | library(mlbench) 43 | 44 | rm(list = ls()) 45 | 46 | df <- Default 47 | head(df) 48 | train <- df[1:8000,] 49 | test <- df[8001:10000,] 50 | 51 | train_y <- train["default"] 52 | test_y <- test["default"] 53 | 54 | train_x <- train %>% dplyr::select(-default) 55 | test_x <- test %>% dplyr::select(-default) 56 | #knn algoritması 57 | 58 | #knn için bütün değişkenlerin numerik olması gerekir. 59 | #çünkü knn uzaklık metrikleri ile çalışır ve ölçebilmesi için numerik olması gerekir. 60 | 61 | knn_train <- train 62 | knn_test <- test 63 | 64 | knn_train$student <- as.numeric(knn_train$student) 65 | knn_test$student <- as.numeric(knn_test$student) 66 | 67 | knn_test$default <- as.numeric(knn_test$default) 68 | knn_train$default <- as.numeric(knn_train$default) 69 | 70 | knn_train <- knn_train %>% select(-default) 71 | knn_test <- knn_test %>% select(-default) 72 | 73 | knn_model <- knn(train = knn_train, test = knn_test, 74 | cl = train_y$default, k = 5) 75 | 76 | class_error <- function(gercek, tahmin) { 77 | return( 78 | data.frame(sin_hatasi = mean(gercek != tahmin), 79 | dogruluk = 1-mean(gercek != tahmin))) 80 | } 81 | 82 | class_err <- function(gercek, tahmin) { 83 | 84 | mean(gercek != tahmin) 85 | 86 | } 87 | 88 | summary(knn_model) 89 | summary(test_y$default) 90 | deger <- class_error(train_y$default, knn_model) 91 | 92 | deger 93 | ctrl <- trainControl(method = "cv", number = 10, search = "grid", 94 | summaryFunction = twoClassSummary, 95 | classProbs = T, 96 | savePredictions = TRUE) 97 | 98 | knn_grid <- data.frame(k=c(1:20)) 99 | 100 | knn_fit <- train(knn_train, train_y$default, 101 | method="knn", 102 | trControl = ctrl, 103 | metric="ROC", 104 | preProc = c("center", "scale"), 105 | tuneGrid=knn_grid) 106 | 107 | plot(knn_fit) 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | -------------------------------------------------------------------------------- /Kullanılan_Kütüphaneler.R: -------------------------------------------------------------------------------- 1 | " 2 | AŞAĞIDA BULUNAN KÜTÜPHANELERİ YORUM SATIRI OLMAKTAN ÇIKARIP 3 | TEK SEFERDE YÜKLEYEBİLİRSİNİZ. UZUN SÜRECEKTİR AMA İLK KURULUMDA 4 | YÜKLENMESİNDE FAYDA OLAN, İŞLERİ KOLAYLAŞTIRAN KÜTÜPHANELERDİR. 5 | 6 | HEMEN ALTINDA KÜTÜPHANELER YÜKLENEREK DENEMESİ YAPILABİLİR. 7 | HATA ALINMASI DURUMUNDA HATA MESAJINDAKİ BİLGİLERE BAKARAK 8 | SİSTEMDE EKSİK PAKETLER VARSA KURULMALIDIR. 9 | " 10 | 11 | # install.packages("ggplot2") # görselleştirme kütüphanesi 12 | # install.packages(ggpubr) 13 | # install.packages("tidyverse") 14 | # install.packages("mclust") # mclust kümeleme algoritması - büyük veri setlerinde kümeleme 15 | # install.packages("dplyr") 16 | # install.packages("ISLR") 17 | # install.packages("pls")#kismi en kucuk kareler ve pcr icin 18 | # install.packages("PerformanceAnalytics") 19 | # install.packages("funModeling") 20 | # install.packages("caret") 21 | # install.packages("pROC") 22 | # install.packages("class") 23 | # install.packages("e1071")#knn-svm gibi algoritmalar icin 24 | # install.packages("kernlab") #svm için 25 | # install.packages("ROCR") #roc için (roc curve gibi) 26 | # install.packages("neuralnet") 27 | # install.packages("GGally") 28 | # install.packages("nnet") 29 | # install.packages("rpart") #ağaç algoritmaları vb. 30 | # install.packages("rpart.plot")#rpart gorsel icin 31 | # install.packages(partykit) #karar agaci gorseli icin 32 | # install.packages("cli") 33 | # install.packages("tree") 34 | # install.packages("randomForest") 35 | # install.packages("gbm") 36 | # install.packages("xgboost") 37 | # install.packages("DiagrammeR") 38 | # install.packages("mlbench") 39 | # install.packages("broom") #tidy model icin 40 | # install.packages("elasticnet") 41 | # install.packages("glmnet") 42 | # install.packages("MASS") 43 | # install.packages("Matrix") 44 | # install.packages("pgmm") #olive data seti icin 45 | # install.packages("dslabs") 46 | # install.packages("ipred") #bagging icin 47 | # install.packages("NeuralNetTools") #garson fonksiyonu icin 48 | # install.packages("FNN") 49 | # install.packages("AppliedPredictiveModeling") 50 | 51 | 52 | library(ggplot2) 53 | library(mclust) 54 | library(dplyr) 55 | library(pls) 56 | library(PerformanceAnalytics) 57 | library(ISLR) 58 | library(tidyverse) 59 | library(funModeling) 60 | library(caret) 61 | library(pROC) 62 | library(class) 63 | library(e1071) 64 | library(kernlab) 65 | library(ROCR) 66 | library(neuralnet) 67 | library(GGally) 68 | library(nnet) 69 | library(rpart) 70 | library(cli) 71 | library(tree) 72 | library(rpart.plot) 73 | library(gbm) 74 | library(xgboost) 75 | library(DiagrammeR) 76 | library(mlbench) 77 | library(AppliedPredictiveModeling) 78 | library(elasticnet) 79 | library(broom) 80 | library(glmnet) 81 | library(MASS) 82 | library(Matrix) 83 | library(pgmm) 84 | library(dslabs) 85 | library(partykit) 86 | library(ipred) 87 | library(randomForest) 88 | library(NeuralNetTools) 89 | library(FNN) 90 | library(ggpubr) 91 | -------------------------------------------------------------------------------- /MClust Algoritması.R: -------------------------------------------------------------------------------- 1 | # mclust özellikle büyük veri setleri üzerinde hızlı çalışan bir kümeleme ve sınıflandırma algoritmasıdır. 2 | # mclust hem sınıflandırma hem kümeleme yapabilir. (Sınıflandırma gözetimli, kümeleme gözetimsiz algoritmadır.) 3 | 4 | #Default olarak R içinde yok. O yüzden dışardan yüklememiz lazım 5 | install.packages("mclust") # paketin yüklenmesini bekleyelim 6 | 7 | require(mclust) # mclust kütüphanesini kullanmak için yükledik 8 | 9 | help("mclust") #help metodunun altındaki örneklerde nasıl kullanıldığı görülebilir 10 | 11 | setwd("Masaüstü/PARS/R_Projects/") # çalışma dizinini kendinize göre belirleyin 12 | 13 | #VERİYİ BU ŞEKİLDE DE SEÇMEK MÜMKÜN. AKILDA BULUNSUN LAZIM OLUR DİYE 14 | yol = file.choose() #ayrıca bu şekilde seçilirse verinin çalışma dizini ile aynı yerde olmasına gerek kalmaz. 15 | deneme_Verisi = read.csv(yol) #çalışma dizini değiştirmeden seçmek istiyorsanız böyle kullanabilirsiniz. 16 | # özellikle program şeklinde kod yazarken lazım olacaktır. Çünkü kullanıcının hatasız devam etmesini sağlar. 17 | 18 | remove(deneme_Verisi) #deneme verisini silelim 19 | remove(list=ls()) # temizleyelim tüm yüklenen verileri(üstte yaptık gerek yok ama garanti temiz olsun) 20 | 21 | cancer1 = read.csv("cancer.csv") 22 | #ben cancer verisini yükledim. siz herhangi bir veriyi seçebilirsiniz kümelemeye uygun olmak şartıyla. 23 | 24 | x = cancer1[,1:9] # verimizin 1 ve 9 kolonları arasını tahminde kullanılcak veriler olarak kullanacağız. 25 | y = cancer1[10] # verinin 10. kolonu tahmin etmek istediğimiz sınıf olsun 26 | 27 | #ilk başta bütün veriyle eğitmeyi görelim 28 | model1 = Mclust(cancer1) #modeli otomatik olarak eğitti ve optimal küme sayısını buldu. 29 | 30 | #Optimal küme veya sınıf sayısını görmek için 31 | model1$G 32 | 33 | #veriye ait grafikleri görebiliriz. 34 | plot(model1) # buradan 0 ile çıkmayı unutmayın yoksa alttaki kod çalışmaz. 35 | plot(model1, what = "classification") # grafik ismi verilerek de çalıştırmak mümkün 36 | plot(model1, what = "density") 37 | 38 | #mclust SINIFLANDIRMA ALGORİTMASI, ŞİMDİ MClustDA modeli ile sınıflandırma yapalım 39 | 40 | #şimdi belirli verilerden tahmin yapmayı görelim (yani sınıflandırma kısmı) 41 | remove(list = ls()) # eski verilerin tamamımını kaldırdık hafızadan 42 | 43 | veri = iris # iris verisetini kullanalım 44 | veri$Species = as.numeric(veri$Species) 45 | x = veri[,1:4] #verinin ilk 4 kolonu 46 | y = veri[5] #verinin son kolonu (tahmin edilcek sınıf) 47 | 48 | model = MclustDA(veri[,1:4], veri$Species) #y kısmını yani 2. kısmı veri$kolon_adı şeklinde yazın 49 | #ben x vey y yi belirtirken y = veri[5] şeklinde yaptığımda hata aldım, o yüzden y = veri$kolon şeklinde yazın 50 | 51 | summary(model) #modelin özeti ve gayet başarılı bir sınıflandırma olduğu görülüyor. 52 | plot(model, what="scatterplot") #yukarıdaki grafiklerle benzer şekilde oluşturulabilir. 53 | plot(model) 54 | 55 | # densityMclust() modelini de deneyebilirsiniz. Onu öğrenilmesi ve kullanılması için eksik bıraktım. 56 | -------------------------------------------------------------------------------- /PCA.R: -------------------------------------------------------------------------------- 1 | #HIZLICA UYGULAMAK İÇİN 2 | #veriseti 3 | df <- USArrests 4 | 5 | #pca uygulanması 6 | pca <- prcomp(df) 7 | pca$rotation <- -pca$rotation 8 | pca$x <- -pca$x 9 | #görselleştirilmesi 10 | biplot(pca) 11 | 12 | # PCA İÇİN GEREKLİ ADIMLAR 13 | " 14 | 1- Veri ön işleme ve Kovaryans Matrislerinin incelenmesi 15 | (Çünkü varyanslar PCA için önemli) 16 | 17 | 2 - Ölçeklendirme - Scale 18 | 3 - Özdeğerler ve Özdeğerler Vektörlerinin OLuşturulması 19 | 4 - Temel Bileşen Skorlarının Hesaplanması 20 | 5 - Bileşenleri Görselleştirme ve Yorumlama 21 | 6 - Bileşen Sayısına Karar vermek 22 | 7 - PCA Uygulanması 23 | " 24 | 25 | #Ölçeklendirme 26 | df <- USArrests 27 | s_df <- apply(df, 2, scale) 28 | 29 | #Özdeğerler ve Özdeğerler Matrislerinin Hesaplanması 30 | cov_df <- cov(s_df) 31 | cov_df 32 | 33 | ei_df <- eigen(cov_df) 34 | ei_df 35 | str(ei_df) 36 | ei_df$values 37 | ei_df$vectors 38 | 39 | p <- ei_df$vectors[,1:2] 40 | 41 | row.names(p) <- rownames(cov_df) 42 | colnames(p) <- c("PC1","PC2") 43 | 44 | # Temel Bileşen Skorlarının Hesaplanması 45 | pc_bir <- as.matrix(s_df) %*% p[,1] 46 | pc_iki <- as.matrix(s_df) %*% p[,2] 47 | 48 | PC <- data.frame(Eyaletler=row.names(USArrests), PC1=pc_bir, PC2=pc_iki) 49 | 50 | # Bileşenlerin Görselleştirilmesi ve Yorumlanması 51 | 52 | ggplot(PC, aes(PC1, PC2)) + 53 | modelr::geom_ref_line(h=0)+ 54 | modelr::geom_ref_line(v=0)+ 55 | geom_text(aes(label=Eyaletler), size=3)+ 56 | ggtitle("İlk İki Asal Bileşen")+ 57 | xlab("Birinci Asal Bileşen") + 58 | ylab("İkinci Asal Bileşen") 59 | 60 | # Açıklanan Varyans Oranlarına Bakarak Bileşen Sayısına Karar Vermek 61 | 62 | avo <- ei_df$values / sum(ei_df$values) 63 | avo 64 | round(avo,2) 65 | 66 | #avo ya yani açıklanan varyans oranı baktığımız zaman ilk iki bileşen ile 67 | # verisetindeki varyansın %87 sini açıklayabiliyoruz 68 | # 1. bil = %62, 2. bil = %25 69 | 70 | avo_plot <- qplot(c(1:4), avo) + 71 | geom_line() + 72 | xlab("Temel Bilesen") + 73 | ylab("AVO") + 74 | ggtitle("Scree Plot") + 75 | ylim(0, 1) 76 | 77 | kum_avo <- qplot(c(1:4), cumsum(avo)) + 78 | geom_line() + 79 | xlab("Temel Bilesen Sayisi") + 80 | ggtitle("Kumulatif Yamac Grafigi") + 81 | ylim(0,1) 82 | 83 | library(gridExtra) 84 | grid.arrange(avo_plot, kum_avo, ncol = 2) 85 | 86 | #SON ADIM - PCA UYGULAMA - EN BAŞTAKİ KODLAR 87 | pca <- prcomp(df) 88 | pca$rotation <- -pca$rotation 89 | pca$x <- -pca$x 90 | #görselleştirilmesi 91 | biplot(pca) 92 | 93 | -------------------------------------------------------------------------------- /PCR.R: -------------------------------------------------------------------------------- 1 | library(ISLR) 2 | library(caret) 3 | library(dplyr) 4 | library(ggplot2) 5 | library(funModeling) 6 | library(PerformanceAnalytics) 7 | library(pls) 8 | df <- Hitters 9 | df <- na.omit(df) 10 | rownames(df) <- c() 11 | 12 | train_indeks <- createDataPartition(df$Salary, p = 0.8, times = 1) 13 | head(train_indeks) 14 | train <- df[train_indeks$Resample1, ] 15 | test <- df[-train_indeks$Resample1, ] 16 | 17 | train_x <- train %>% dplyr::select(-Salary) 18 | train_y <- train %>% dplyr::select(Salary) 19 | test_x <- test %>% dplyr::select(-Salary) 20 | test_y <- test %>% dplyr::select(Salary) 21 | 22 | training <- data.frame(train_x, Salary = train_y) 23 | 24 | plot_num(training) 25 | summary(training) 26 | profiling_num(training) 27 | chart.Correlation(df %>% dplyr::select(-c("League", "NewLeague", "Division"))) 28 | 29 | #model kurulması 30 | 31 | lm_fit <- lm(Salary~., data = training) 32 | summary(lm_fit) 33 | 34 | # model nesnesi içinden alabileceğimiz değerleri görmek için şunları kullanabiliriz 35 | names(lm_fit) 36 | attributes(lm_fit) 37 | 38 | sonuc <- data.frame(obs=training$Salary, pred=lm_fit$fitted.values) 39 | defaultSummary(sonuc) 40 | 41 | pred = predict(lm_fit, test_x) 42 | sonuc_test <- data.frame(obs=test_y$Salary , pred=pred) 43 | 44 | defaultSummary(sonuc_test) 45 | 46 | # model_validation 47 | 48 | kontrol <- trainControl(method = "cv", number = 10) 49 | 50 | #bu şekilde herhangi bir fonksiyonun bütün parametrelerini görebiliriz. 51 | names(trainControl()) 52 | lm_val_fit <- 53 | train( 54 | x = train_x, 55 | y = train_y$Salary, 56 | method = "lm", 57 | trControl = kontrol 58 | ) 59 | 60 | lm_val_fit 61 | summary(lm_val_fit) 62 | names(lm_val_fit) 63 | lm_val_fit$bestTune 64 | lm_val_fit$finalModel 65 | 66 | 67 | #principle component regression - PCR 68 | 69 | pcr_fit <- pcr(Salary~., data=training, scale=T, validation="CV") 70 | summary(pcr_fit) 71 | validationplot(pcr_fit) 72 | names(pcr_fit) 73 | defaultSummary(data.frame(obs=training$Salary, 74 | pred= as.vector(pcr_fit$fitted.values))) 75 | 76 | predict(pcr_fit, test_x) 77 | 78 | defaultSummary(data.frame(obs = training$Salary, 79 | pred = as.vector(predict( 80 | pcr_fit, test_x, ncomp = 1:3 81 | )))) 82 | 83 | # öbyle bir döngü ilew kaç bileşende ne kadar etki olduğunu görebiliriz. 84 | for (i in c(1:19)) { 85 | print(as.character(i)) 86 | 87 | print(defaultSummary(data.frame(obs = test_y$Salary, 88 | pred = as.vector(predict( 89 | pcr_fit, test_x, ncomp = i 90 | ))))) 91 | i = i + 1 92 | } 93 | 94 | 95 | #ben sürekli yukarıdaki gibi bir döngüyle uğraşmak istemediğim için 96 | # bir fonksiyon yazıp daha sonra da gerektiğinde kullanmak istiyorum 97 | 98 | pcr_tune <- function(model, x, y) { 99 | num_of_iter=length(x) 100 | for (i in c(1:num_of_iter)) { 101 | cat("COMPONENTS:", i) 102 | cat("\n") 103 | print(defaultSummary(data.frame(obs = y[,1], 104 | pred = as.vector(predict( 105 | model, x, ncomp = i 106 | ))))) 107 | cat("\n") 108 | i = i + 1 109 | if (i=num_of_iter) { 110 | remove(i) 111 | 112 | } 113 | } 114 | } 115 | 116 | ayarlar <- pcr_tune(model=pcr_fit, x=test_x, y = test_y) 117 | #yazdığmız fonksiyon düzgün çalışıyor 118 | 119 | kontrol <- trainControl(method = "CV", number = 10) 120 | set.seed(100) 121 | pcr_ayar <- train(train_x, train_y$Salary, 122 | method="pcr", 123 | trContol = kontrol, 124 | tuneLength = 20, 125 | preProc = c("center", "scale") 126 | ) 127 | pcr_ayar 128 | pcr_ayar$finalModel 129 | 130 | plot(pcr_ayar) 131 | 132 | 133 | 134 | 135 | 136 | 137 | 138 | 139 | 140 | 141 | 142 | 143 | 144 | 145 | 146 | 147 | 148 | 149 | 150 | 151 | 152 | 153 | -------------------------------------------------------------------------------- /PLS.R: -------------------------------------------------------------------------------- 1 | library(ISLR) 2 | library(caret) 3 | library(dplyr) 4 | library(ggplot2) 5 | library(funModeling) 6 | library(PerformanceAnalytics) 7 | library(pls) 8 | df <- Hitters 9 | df <- na.omit(df) 10 | rownames(df) <- c() 11 | 12 | train_indeks <- createDataPartition(df$Salary, p = 0.8, times = 1) 13 | head(train_indeks) 14 | train <- df[train_indeks$Resample1, ] 15 | test <- df[-train_indeks$Resample1, ] 16 | 17 | train_x <- train %>% dplyr::select(-Salary) 18 | train_y <- train %>% dplyr::select(Salary) 19 | test_x <- test %>% dplyr::select(-Salary) 20 | test_y <- test %>% dplyr::select(Salary) 21 | 22 | training <- data.frame(train_x, Salary = train_y) 23 | 24 | plot_num(training) 25 | summary(training) 26 | profiling_num(training) 27 | chart.Correlation(df %>% dplyr::select(-c("League", "NewLeague", "Division"))) 28 | 29 | #model kurulması 30 | 31 | lm_fit <- lm(Salary~., data = training) 32 | summary(lm_fit) 33 | 34 | # model nesnesi içinden alabileceğimiz değerleri görmek için şunları kullanabiliriz 35 | names(lm_fit) 36 | attributes(lm_fit) 37 | 38 | sonuc <- data.frame(obs=training$Salary, pred=lm_fit$fitted.values) 39 | defaultSummary(sonuc) 40 | 41 | pred = predict(lm_fit, test_x) 42 | sonuc_test <- data.frame(obs=test_y$Salary , pred=pred) 43 | 44 | defaultSummary(sonuc_test) 45 | 46 | # model_validation 47 | 48 | kontrol <- trainControl(method = "cv", number = 10) 49 | 50 | #bu şekilde herhangi bir fonksiyonun bütün parametrelerini görebiliriz. 51 | names(trainControl()) 52 | lm_val_fit <- 53 | train( 54 | x = train_x, 55 | y = train_y$Salary, 56 | method = "lm", 57 | trControl = kontrol 58 | ) 59 | 60 | lm_val_fit 61 | summary(lm_val_fit) 62 | names(lm_val_fit) 63 | lm_val_fit$bestTune 64 | lm_val_fit$finalModel 65 | 66 | 67 | #principle component regression - PCR 68 | 69 | pcr_fit <- pcr(Salary~., data=training, scale=T, validation="CV") 70 | summary(pcr_fit) 71 | validationplot(pcr_fit) 72 | names(pcr_fit) 73 | defaultSummary(data.frame(obs=training$Salary, 74 | pred= as.vector(pcr_fit$fitted.values))) 75 | 76 | predict(pcr_fit, test_x) 77 | 78 | defaultSummary(data.frame(obs = training$Salary, 79 | pred = as.vector(predict( 80 | pcr_fit, test_x, ncomp = 1:3 81 | )))) 82 | 83 | # öbyle bir döngü ilew kaç bileşende ne kadar etki olduğunu görebiliriz. 84 | for (i in c(1:19)) { 85 | print(as.character(i)) 86 | 87 | print(defaultSummary(data.frame(obs = test_y$Salary, 88 | pred = as.vector(predict( 89 | pcr_fit, test_x, ncomp = i 90 | ))))) 91 | i = i + 1 92 | } 93 | 94 | 95 | #ben sürekli yukarıdaki gibi bir döngüyle uğraşmak istemediğim için 96 | # bir fonksiyon yazıp daha sonra da gerektiğinde kullanmak istiyorum 97 | 98 | pcr_tune <- function(model, x, y) { 99 | num_of_iter=length(x) 100 | for (i in c(1:num_of_iter)) { 101 | cat("COMPONENTS:", i) 102 | cat("\n") 103 | print(defaultSummary(data.frame(obs = y[,1], 104 | pred = as.vector(predict( 105 | model, x, ncomp = i 106 | ))))) 107 | cat("\n") 108 | i = i + 1 109 | if (i=num_of_iter) { 110 | remove(i) 111 | 112 | } 113 | } 114 | } 115 | 116 | ayarlar <- pcr_tune(model=pcr_fit, x=test_x, y = test_y) 117 | #yazdığmız fonksiyon düzgün çalışıyor 118 | 119 | kontrol <- trainControl(method = "CV", number = 10) 120 | set.seed(100) 121 | pcr_ayar <- train(train_x, train_y$Salary, 122 | method="pcr", 123 | trContol = kontrol, 124 | tuneLength = 20, 125 | preProc = c("center", "scale") 126 | ) 127 | pcr_ayar 128 | pcr_ayar$finalModel 129 | 130 | plot(pcr_ayar) 131 | 132 | # PLS - PARTIAL LEAST SQUARES 133 | pls_fit <- plsr(Salary~., data=training) 134 | summary(pls_fit) 135 | validationplot(pls_fit, val.type = "MSEP") 136 | 137 | defaultSummary(data.frame(obs=test_y$Salary, pred=as.vector( 138 | predict(pls_fit, test_x) 139 | ))) 140 | 141 | kontrol <- trainControl(method = "CV", number = 10) 142 | set.seed(100) 143 | pls_ayar <- train(train_x, train_y$Salary, 144 | method="pls", 145 | trContol = kontrol, 146 | tuneLength = 20, 147 | preProc = c("center", "scale") 148 | ) 149 | pls_ayar 150 | pls_ayar$finalModel 151 | 152 | plot(pls_ayar) 153 | 154 | 155 | 156 | 157 | 158 | 159 | 160 | 161 | 162 | 163 | 164 | 165 | 166 | 167 | 168 | 169 | 170 | 171 | 172 | 173 | 174 | 175 | 176 | 177 | 178 | 179 | 180 | 181 | 182 | 183 | 184 | 185 | 186 | 187 | 188 | 189 | 190 | 191 | 192 | 193 | -------------------------------------------------------------------------------- /R-Programming-for-Data-Science.Rproj: -------------------------------------------------------------------------------- 1 | Version: 1.0 2 | 3 | RestoreWorkspace: Default 4 | SaveWorkspace: Default 5 | AlwaysSaveHistory: Default 6 | 7 | EnableCodeIndexing: Yes 8 | UseSpacesForTab: Yes 9 | NumSpacesForTab: 2 10 | Encoding: UTF-8 11 | 12 | RnwWeave: Sweave 13 | LaTeX: pdfLaTeX 14 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # R-Project-Giris 2 | R programlama dili örnek kodları. 3 | Veri Bilimi ve Makine Öğrenmesi için oluşturulmuştur. 4 | 5 | Kullanılan verisetleri datasets klasörü içinde bulunabilir. 6 | -------------------------------------------------------------------------------- /R_ile_Veribilime_Giris.Rmd: -------------------------------------------------------------------------------- 1 | --- 2 | title: "R ile Veri Bilimi'ne Giriş" 3 | output: 4 | pdf_document: default 5 | html_document: 6 | df_print: paged 7 | --- 8 | 9 | ### Verisetinin yüklenmesi ve verisetiyle ilgili işlemler 10 | 11 | ```{r} 12 | data("mtcars") #mtcars isimli r içinde bulunan bir verisetini yükledik 13 | mtcars # verisetini görüntüleme 14 | print("Verisetinin Boyutu:") 15 | dim(mtcars) # verisetinin boyutu 16 | 17 | ``` 18 | 19 | Verisetimiz 32 gözlemden(satırdan) oluşan ve 11 sütunu(niteliği) bulunan arabaların belirli özelliklerini içeren bir veriseti. Özelliklerini tam olarak anlamak için internetten araştırma yapılabilir. Veya R'ın help kısmına mtcars yazıp gelen açıklamaya bakılabilir. 20 | 21 | Curse of Dimensionality yani "Boyut Laneti" denilen 1950'lerde ortaya koyulmuş bir kavram vardır. Bu kavrama göre boyut arttıkça karmaşıklık artar ama ama modelin başarım sonucu hakkında bir şey söylenemez. Yani daha fazla özellik ile bir veri üzerinde çalışmak daha iyi sonuç alacağımız anlamına gelmez ama karmaşıklığı artıracağı kesindir. 22 | 23 | Bu veriseti içindeki değişkenlerin türlerini görüp veriyi anlamaya çalışalım. 24 | ```{r} 25 | summary(mtcars) 26 | ``` 27 | 28 | Normalde burada bütün değişkenlerin numerik değerler olduğu görülüyor. 29 | Biz bu değerler üzerine bir model kurabiliriz, hatta gayet güzel bir accuracy değeri de alırız. Fakat böyle bir model kurmak hata olur. Çünkü anlaşılacağı gibi buradaki bütün değerler sayısal değil. 30 | 31 | Peki bir değerin sayısal olmadığını nasıl anlarız? 32 | Eğer sayısal bir nitelik içerisinde 0 sayısı mutlak yokluğu ifade ediyorsa o değişken sayısal bir değer ifade eder. Yok eğer, 0 değeri mutlak yokluğu değil de bir değeri ifade ediyorsa o zaman o değer sayısal değil kategoriktir diyebiliriz. 33 | 34 | Hemen Örnek verelim: 35 | mtcars veriseti açıklamasında vs kısmına bakalım: 36 | vs Engine (0 = V-shaped, 1 = straight) 37 | 38 | Burada "vs" kısmının motorun v olup olmadığını belirttiği görülüyor ve bu özellik 0 ve 1 değerlerini alıyor sadece. Peki burada 0 kısmı mutlak yokluk mu ifade ediyor yoksa bir başka değeri mi gösteriyor. Tabi ki bu motorun v olup olmadığını, yani başka bir değeri gösteriyor. Yani bu değişken sayısal değildir. 39 | 40 | O zaman bu sütunu sayısal değerden kategorik değişkene çevirelim ki modelimiz burada nasıl çalışacağını daha iyi anlayabilsin. 41 | 42 | ```{r} 43 | mtcars$cyl <- as.factor(mtcars$cyl) #kategorik (faktör) değişkene çevirme) 44 | 45 | #şimdi diğer kategorik değişkenleri de dönüştürelim 46 | mtcars$vs <- as.factor(mtcars$vs) 47 | mtcars$am <- as.factor(mtcars$am) 48 | mtcars$gear <- as.factor(mtcars$gear) 49 | mtcars$carb <- as.factor(mtcars$carb) 50 | 51 | str(mtcars) #şimdi tekrar özelliklere bakalım 52 | summary(mtcars) #temel istatistiklere yeniden bakalım 53 | ``` 54 | 55 | 56 | Şimdi veri içindeki değerlere nasıl ulaşabileceğimizi görelim 57 | 58 | ```{r} 59 | mtcars[1,2] # 1. satır 2. eleman 60 | mtcars[2, ] # 2. satır tüm elemanlar 61 | 62 | mtcars["hp"] # hp sütununu getirir. 63 | #is.na(mtcars) # veriseti içinde eksik değer var mı? 64 | ``` 65 | 66 | İçinde eksik veriler de olan kendi verisetimizi oluşturalım 67 | 68 | 69 | ```{r} 70 | veriseti <- c(3,5,NA,7,NA) 71 | veriseti 72 | print("Toplam Eksik Veri Sayısı:") 73 | sum(is.na(veriseti)) 74 | print("Eksik Verilerin Konumları (İndeksleri):") 75 | which(is.na(veriseti)) 76 | ``` 77 | 78 | Eğer eksik verilere rağmen ortalama hesaplamak istersek 79 | ```{r} 80 | mean(veriseti, na.rm = TRUE) 81 | ``` 82 | 83 | Eğer matris şeklinde bir veriseti oluşturmak istersek, matrix komutunu kullanırız. Eksik değerlerin toplamını sum ile görebilirken, kolon bazında, her kolonda kaç eksik değer olduğunu görmek için colsums ifadesini kullanırız. 84 | 85 | ```{r} 86 | matris <- matrix(c(1:5, NA), nrow = 2) 87 | veri <- as.data.frame(matris) 88 | veri 89 | colSums(is.na(veri)) 90 | print(sum(is.na(veri))) 91 | ``` 92 | 93 | Görüldüğü gibi "as.veritipi" şeklinde bir veriyi istediğimiz tipe çevirebiliyoruz. Fakat bir verisetinde çalışırken yaptığımız dönüştürmelere dikkat etmemiz gerekir. Örneğin; as.integer ve as.numeric fonksiyonları tek başına bir ifadeyle düzgün çalışırken bir veriseti üzerinde çalıştırdığımızda veriyi ascii hale çevirebilir ve veri kaybı yaşayabiliriz. Ayrıca kategorik değişkenleri numerik olarak almamak için numeric ve integer fonksiyonlarını dikkatli kullanmalıyız. 94 | ```{r} 95 | a <- "12" 96 | b1 <- as.integer(a) 97 | b2 <- as.numeric(a) 98 | print(a) 99 | print(b1) 100 | print(b2) 101 | ``` 102 | 103 | Vektör oluşturmak istediğimizde seq() fonksiyonunu kullanırız. 104 | ```{r} 105 | d <- seq(from=1, to = 5, by = 0.5) 106 | d 107 | ``` 108 | 109 | 110 | Verisetinin içinden belirli özelliklere sahip verileri ayıklamak ve yeni bir veriseti oluşturmak istersek which fonksiyonundan yardım alabiliriz. 111 | Örneğin Sepal Length'i 7 den büyük ve Petal Width'i de 2.1'den büyük olan gözlemleri iris veriseti içinden alıp yeni_data isimli bir verisetine atayalım 112 | ```{r} 113 | yeni_data <- iris[which(iris$Petal.Width>2.1 & iris$Sepal.Length>7),] 114 | yeni_data 115 | ``` 116 | ### VERİSETİNDEKİ EKSİK GÖZLEMLERİ DOLDURMANIN YÖNTEMLERİ 117 | 118 | 1) DOĞRUSAL İNTERPOLASYON YÖNTEMİ: Bir doğru üzerindeki eksik bir noktayı bulmaya çalışır. Dolayısıyla formülü nokta formülüne benzerdir. Verisetinde doğrusallık varsa bir başka değişkendeki doğrusal artışın kendi değişkenimiz üzerindeki etkisinden faydalanarak eksik değerleri bulabiliriz. 119 | 120 | 2) MAKSİMUM BEKLENTİ YÖNTEMİ: İlk olarak belirlenen bir ratgele değer üzerinden belirlenen hassasiyete ulaşılana kadar, aritmetik ortalamanın rastgele değerden farkı yine aritmetik ortalamaya eklenerek devam edilir. Ortalamanın belirlenen değerden farkı hassasiyet değerinden küçük olana kadar devam edilir ve belirlenen değere ulaşıldığında bütün eksik gözlemler o değerle doldurulur. 121 | 122 | 3) JACKKNIFE YÖNTEMİ: Maksimum beklentiden farklı olarak bütün eksik değerlerin aynı sonuçla doldurulması yerine, her eksik değer için ayrı hesaplama yapılmasıdır. Bir kere hesaplanan değer artık bilinen değer olarak kabul edilip hesalamada bu değer bilinenler arsında kullanılır. 123 | 124 | 4) MODELLEME YÖNTEMİ: Belirli bir model belirlenerek bu model ile eksik değerler tahmin edilir. 125 | 126 | 5) EKSİK VERİYİ SİLME: Bu yöntemde eksik veriler silinir. Fakat veriseti küçükse bu yöntemi tercih etmek verisetini daha da küçülteceğinden modelin başarısını etkileyecektir. 127 | 128 | Eksik Verilerle Çalışmak için Kullanacağımız Kütüphaneler 129 | 130 | ```{r} 131 | library(VIM) 132 | library(missForest) 133 | library(mice) 134 | library(ISLR) # İÇİNDEN BASKETBOL VERİSETİNİ KULLANACAĞIZ 135 | library(Hmisc) 136 | library(e1071) 137 | ``` 138 | Yukarıdaki Paketlerin yaptığı işleri şöyle sıralayabliriz. 139 | 140 | #### 1)Mice Paketi: (Multivariate Imputation via Chained Equations) 141 | 142 | Regresyon tabanlı olarak eksik verileri tahmin eder. Sürekli değişkenler için lineer regresyon kategorik değişkenler için ise logistic resression kullanılır. 143 | Paketteki Yöntemler: 144 | 145 | - PMM (Predictive Mean Matching): Sayısal değişkenler için kullanılır. 146 | 147 | - logreg (Logistic Regression): İkili (binary) değişkenler için kullanılır. 148 | 149 | - ployreg (Bayesian Polynomial Regression): 2 ya da daha fazla faktör değişkenler için. 150 | 151 | - Proportional Odds Model: İki ya da daha fazla sıralı değişkenler için. 152 | 153 | #### 2)missForest Paketi: 154 | 155 | Adından da anlaşılacağı gibi eksik verileri random forest yöntemiyle doldurmayı sağlar. Bu paketi lineer olmayan bir yöntem kullanmak istediğimizde kullanabiliriz. Non-parametric tahminleme yönetemiyle çalışır, yani verinin normal dağılmış olması veya 30 gözlemden büyük olması gerekmez, dolayısıyla daha özgür çalışırız. Kullanacağımız fonksiyon paketadı ile aynı olan missForest fonksiyonudur. 156 | 157 | #### 3) VIM Paketi: 158 | 159 | Özellikle eksik verilerin görselleştirilmesi için kullanılır. aggr ve barMiss fonksiyonları eksik veriyi görselleştirmek için kullanılır. 160 | 161 | #### 4) Hmisc Paketi: 162 | 163 | Bu paket daha tek bir alana yönelmek yerine daha çoklu bir kullanım amacıyla sunulmuştur. Veri manipülasyonu, görselleştirmesi, eksik veri doldurma ve modelleme için birçok fonksiyon içerir. help("hmisc") yazarak özellik ve fonksiyonlara ulaşılabilir. 164 | 165 | #### 5)e1071 Paketi: 166 | 167 | Bu paket SVM algoritması ile ilgili uygulamaları içerir. Eksik verileri SVM algoritması kullanarak doldurmak istiyorsak bu paketi kullanırız. 168 | 169 | Eksik verileri görselleştirmek için VIM kütüphanesini kullanabiliriz. Bu kütüphane içinde veri doldurmak için de yöntemler vardır. 170 | 171 | ```{r} 172 | veri <- Hitters 173 | aggr(veri) 174 | barMiss(veri) 175 | ``` 176 | 177 | Şimdi kendimiz eksik veriler oluşturup gözlemleyelim. İris verisetini kullanacağız. 178 | 179 | Bunun için missforest içinden eksik veri oluşturmaya yarayan prodNa isimli bir fonksiyon kullanacağız. Daha sonra mice kütüphanesinden md.pattern fonksiyonu ile eksik verileri görselleştireceğiz. 180 | 181 | ```{r} 182 | missedData <- prodNA(iris, noNA = 0.2) #0.2 oranında rasgele eksik gözlem oluşturacak 183 | 184 | missedData <- subset(missedData, select = -c(Species)) #Tür değişkenini çıkardık. 185 | 186 | md.pattern(missedData, rotate.names = TRUE) #Eksikleri Bulma ve Görselleştirme 187 | 188 | #Bir de VIM ile görselleştirelim ek olarak. 189 | mice_plot <- aggr(missedData, labels=c("SL", "SW", "PL", "PW"), gap=3, 190 | ylab=c("Eksik Veri", "Örüntü"), col=c("skyblue", "orange")) 191 | barMiss(missedData) 192 | mice_plot 193 | ``` 194 | 195 | 196 | ### EKSİK VERİYİ PMM (PREDICTIVE MEAN METHOD) İLE DOLDURMA 197 | 198 | ```{r} 199 | predictedData <- mice(missedData, m = 5, method = "pmm", maxit = 5) 200 | summary(predictedData) # özetleyelim 201 | 202 | # 5 iterasyon yaptıktan sonra 5 farklı veri tamamlama alneratifi oluştu. 203 | # Biz ise 3. iterasyona göre veriyi tamamlamayı seçtik. 204 | irisPredicted <- complete(predictedData,3) 205 | ``` 206 | 207 | 208 | Orjinal ve tahmin edilen değerleri çizdirelim. Kırmızı noktalar tahmin değerleri iken çarpı işaretleri orjinal noktaları gösteriyor. 209 | 210 | ```{r} 211 | library(ggplot2) 212 | ggplot(iris, aes(Sepal.Length, Sepal.Width)) + geom_point(shape=4, size=4) + geom_point(aes(irisPredicted$Sepal.Length, irisPredicted$Sepal.Width),color="red", size=2) 213 | ``` 214 | 215 | 216 | ### KORELASYON 217 | 218 | Korelasyon iki değişken arasındaki doğrusal ilişkidir. Aynı yönlü veya ters yönlü olabilir ve dolayısıyla -1 ve +1 arasında değişir. ( 0 noktası ilişkinin olmadığı durumu gösterir). Fakat kesin bir şekilde belitmek gerekir ki; KORELASYON NEDENSELLİK DEĞİLDİR! Yani iki veya daha fazla değişken arasında bir ilişki olması bunun belirli bir nedeni olduğunu göstermez. 219 | 220 | Peki korelasyonu nasıl kullanırız? 221 | 222 | Eğer verisetimizde bağımsız değişkenlerden bazıları arasında güçlü bir korelasyon varsa (+1 veya -1'e yakın) bu değişkenlerden sadece birini modelimizde kullanmamız yetecek demektir. 223 | 224 | Eğer bağımlı değişkenimiz ile bazı bağımsız değişkenler arasında güçlü bir korelasyon varsa burada çok daha dikkatli olmak gerekir. Çünkü bağımlı değişken ile güçlü lorelasyona sahip olan bağımsız değişkenimiz, model kurulduğunda diğer değişkenleri baskılayacak ve böylece tek tahmin edici kendisiymiş gibi hareket edecektir. Bu da modelde bias hatasına (yanlılık sorunu) sebep olacaktır. Bu tür bağımsız değişkenleri modelde kullanmamak gerekir. 225 | 226 | Farklı hesaplanan korelasyon türleri vardır. Burada default olarak kullanaılanlar pearson korelasyonu üzerinden hesaplanmıştır. 227 | 228 | #### CORRPLOT PAKETİ 229 | 230 | ```{r} 231 | library(corrplot) 232 | 233 | data <- subset(x = iris, select = -c(Species)) 234 | 235 | (KOR <- cor(data)) # parantez içinde yazılan ifade ekrana da yazdırılır. 236 | #grafiğer dökerek gösterirsek daha anlaşılır olur. 237 | 238 | #3 farklı görünümde grafik çizelim. 239 | corrplot(KOR, method = "circle") 240 | corrplot(KOR, method = "number") 241 | corrplot(KOR, method = "pie") 242 | ``` 243 | 244 | Görüldüğü gibi Petal Width ve Petal Length arasında pozitif yönlü güçlü bir ilişki var. Aynı zamanda Petal Length ile Sepal Length arasında da güçlü bir ilişki var. O zaman bu üçünden sadece birini (Petal Length'i) kullanmak yeterlidir. Hatta kısa ve basit bir modelle deneyelim. 245 | 246 | 247 | ```{r} 248 | model_tam <- lm(as.integer(Species)~., data = iris, method = "qr") 249 | yeni_data <- subset(iris, select = c(-Petal.Width, -Sepal.Length)) 250 | model_az_veri <- lm(as.integer(Species)~., data = yeni_data, method = "qr") 251 | 252 | tam_tahmin <- predict(model_tam, iris[,1:4]) 253 | az_veriyle_tahmin <- predict(model_az_veri, yeni_data[,1:2]) 254 | 255 | ``` 256 | 257 | Yukarıdaki verilerle yapılan tahmin tamsayı sonuç değil noktalı değerler döndürecek. Biz bu verileri tamsayı yaparak sonuçlara bakalım 258 | 259 | Aşağıda for döngüsüyle belirli aralıklardaki değerleri yakın olduğu tamsayıya yuvarladık. R içinde bunu çok daha kısa yollarla yapabilirsiniz ve çok gerekmedikçe for döngüsü kullanmak mantıklı değildir. Ama sadece örnek amaçlı olduğundan yapıyoruz şimdilik. 260 | 261 | ```{r} 262 | a <-1 263 | for (x in tam_tahmin) { 264 | if (x>0 && x<=1.5) { 265 | tam_tahmin[a] = 1 266 | } 267 | if (x>1.5 && x<=2.5) { 268 | tam_tahmin[a] = 2 269 | } 270 | if (x>2.5){ 271 | tam_tahmin[a] = 3 272 | } 273 | a = a + 1 274 | } 275 | 276 | a<-1 277 | for (x in az_veriyle_tahmin) { 278 | if (x>0 && x<=1.5) { 279 | az_veriyle_tahmin[a] = 1 280 | } 281 | if (x>1.5 && x<=2.5) { 282 | az_veriyle_tahmin[a] = 2 283 | } 284 | if (x>2.5){ 285 | az_veriyle_tahmin[a] = 3 286 | } 287 | a = a + 1 288 | } 289 | yarım_verili_model_hatası <- 0 290 | tam_verili_model_hatası <- 0 291 | sıra_no <- 1 292 | for (i in as.integer(iris$Species)) { 293 | if (i != az_veriyle_tahmin[sıra_no]) { 294 | yarım_verili_model_hatası = yarım_verili_model_hatası + 1 295 | } 296 | if (i != tam_tahmin[sıra_no]) { 297 | tam_verili_model_hatası = tam_verili_model_hatası + 1 298 | } 299 | sıra_no = sıra_no + 1 300 | } 301 | 302 | print("Tam verili model MSE:") 303 | ModelMetrics::mse(as.integer(iris$Species), tam_tahmin) 304 | print("Tam verili model hata sayısı:") 305 | print(tam_verili_model_hatası) 306 | 307 | print("Yarım verili model MSE:") 308 | ModelMetrics::mse(as.integer(iris$Species), az_veriyle_tahmin) 309 | print("Yarım verili model hata sayısı:") 310 | print(yarım_verili_model_hatası) 311 | 312 | ``` 313 | 314 | Gördüğümüz gibi iki sütünu kaldırmamıza rağmen sadece 2 tane daha fazla hata yaptık. Yani aslında verinin yarısıyla aynı sonucu verebilecek bir model kurabildik. Şimdi burada bahsetmemiz gereken konu boyutsallık lanetidir. 315 | 316 | ### CURSE OF DIMENSINALITY (BOYUTSALLIK LANETİ) 317 | 318 | Daha önce de dediğimiz gibi (en başta) boyut arttıkça karmaşıklık artar ama model başarısı için aynı şey söylenemez. İşte yukarıda verinin yarısını attığımız halde neredeyse aynı başarıyı almamızı sağlayan şey de boyutsallık laneti dediğimiz kavramla çok benzerdir. 319 | 320 | Yukarıda yaptığımız gibi verinin daha az kısmıyla da aynı başarı yakalanabilir. Hatta bazen başarının artması bile söz konusu olabilir. Bu yüzden bütün veriyi alarak çalışıp modeli karmaşıklaştırmak yerine boyut azaltma yöntemlleri kullanarak daha basit, daha açıklanabilir modeller kurmak çok daha mantıklıdır. 321 | 322 | Boyut azaltmak için çeşitli yöntemler bulunmaktadır. Bunlardan bazıları: 323 | 324 | -PCA (Principal Component Analysis) - Temel Bileşenler Analizi 325 | -LDA (Linear Discriminant Analysis) 326 | -SWD 327 | -MARS 328 | 329 | Bizim burada açıklayacağımız yöntem PCA yöntemidir. 330 | 331 | #### PCA (Principal Component Analysis) - Temel Bileşenler Analizi 332 | 333 | Principal Component Analysis verisetinin kendi değişkenleri ile ifade edilmesinin yerine, bu değişkenleri kullanarak kendi değişkenlerini (PC) oluşturur. Yani kendisi yeni bir boyut tanımlayarak veriyi bu boyutta ifade eder. Bunu yaparken de veriseti içinde veriye en çok katkı yapanları bir noktada toplayarak çalışır. PCA özvektör ve özdeğerler üzerinden hesaplama yaparak sonuç hesaplar. 334 | 335 | Büyük bir verisetindeki en önemli değişkenler hangileridir? 336 | 337 | - Bileşenlerin oluşturulması (PC) 338 | - Yüksek boyutlardaki verisetinin mümkün olan en fazla enformasyonu içerecek şekilde daha düşük bir boyutta incelenmesi 339 | - Daha az bileşenle daha fazla anlama sahip görselleştirmenin yapılması 340 | - 3 veya daha fazla boyutlu verisetlerinde uygulanması daha iyi sonuçlar elde edilmesini sağlayacaktır. 341 | 342 | 343 | ```{r} 344 | #library("devtools") 345 | #install_github("vqv/ggbiplot") 346 | library("ggbiplot") 347 | rm(mtcars) 348 | data("mtcars") 349 | pca_info <- prcomp(mtcars[, c(1:7, 10,11)], center = TRUE, scale. = TRUE) 350 | summary(pca_info) 351 | ggbiplot(pca_info) 352 | ggbiplot(pca_info, labels = rownames(mtcars)) 353 | ``` 354 | 355 | PCA Analizi yapıldığında 2 tane bileşen oluşturuldu. Bunlardan PC1 verisetindeki varyansın %62.8'ini açıklarken, PC2 %23.1'ini açıklıyor. Toplamda bütün varyansın %80'inden fazlası bu iki bileşenle açıklanabiliyor. Verisetindeki özelliklerin bu yeni bileşen boyutları üzerindeki yön ve değerleri de grafikteki gibi oluşmuş. 356 | 357 | PCA yönteminin matematiksel açıklaması internette bulunabilir. Ama grafikte gördüğümüz veriseti özelliklerinin PC1 ve PC2 uzayı üzerindeki dağılımının özvektörlerle ve özdeğerlerle oluştuğunu anlayabiliyoruz. 358 | 359 | 360 | ### UNSUPERVISED LEARNING (DENETİMSİZ VEYA GÖZETİMSİZ ÖĞRENME) 361 | 362 | Denetimli öğrenme algoritmalarında veriden bir model kurulduğunda o verideki özellikler ile tahmin edilen gözlemin gerçek sonucu da verimizde etkiket halinde bulunur. Biz verimiz üzerinde model kurarken aslında modelin hangi sonuçlara ulaşması gerektiğini, hangi tahminleri yapması gerektiğini biliriz. Çünkü gerçekte gözlenen değeri de biliyoruzdur. 363 | 364 | Fakat bir verisetinden ne öğreneceğimizi bilmiyorsak ve bazı yöntemler ile yine de veriyi modellemek stiyorsak ne yaparız? İşte o zaman da denetimsiz öğrenme yöntemleri kullanılır. Denetimsiz öğrenmede bağımlı-bağımsız değişken ayrımı yoktur, verinin tamamından bir sonuca ulaşılmaya çalışır. 365 | 366 | Örneğin, bir marketin müşterileri belirli segmentlere ayrılıp buna göre pazarlama yöntemleri geliştirilmek isteniyor olsun. Burada model kuracak olan kişi önceden belirlenmiş bir segmentasyon verisine sahip değildir. Bu yüzden müşterileri otomatik olarak kümeleyip ayırabilen bir model kurmak zorundadır. 367 | 368 | En sık kullanılan unsupervised learning yöntemi kümeleme algoritmalarıdır. 369 | Kümeleme birbirine benzeyen veya farklılaşan verileri bir araya toplayıp diğerlerinden ayırarak, belirli parçalar (kümeler) oluşturma işlemidir. 370 | 371 | Veriden bahsettiğimizde aslında her zaman bir veri uzayından bir çok boyutlu uzaydan bahsederiz. Dolayısıyla bu uzaydaki veriler de birbirine göre uzaklıklarına göre kümelenebilir. Kümeleme algoritmaları da bu uzaklıklardan yararlanır. Dolayısıyla burada en önemli parametre hangi uzaklık ölçüm yöntemini kullanacağını belirlemektir. Öklid, Manhattan, Minkowski vb yöntemler kullanılabilir. 372 | 373 | Kümeleme algoritmalarında her kümedeki elemanların o kümenin merkezine olan uzaklıkları hesaplanarak bir küme belirlenmeye çalışılır. Kaç tane küme oluşturulacağına ise WCSS (Within cluster sum of squares) gibi bazı değerlere bakılarak karar verilmeye çalışılır. 374 | 375 | 376 | 3 Tür Kümeleme Modeli Oluşturulabilir: 377 | 378 | - Bağlantı Tabanlı Modeller: Farklı grup üyeleri arasındaki farklılığa bağlı olarak yapılan hiyerarşik kümeleme yöntemidir. (SLINK Modeli) 379 | 380 | - Yoğunluk Tabanlı Modeller: Bir noktanın kendisi ile olan farklılıkları belli bir değerden az olan belli bir sayıdaki diğer noktalar ile çevrelenmesine bağlı olarak yapılan kümeleme/gruplama türüdür. (DBSCAN Modeli) 381 | 382 | - Centroid Tabanlı Modeller: Her küme o kümenin merkezi durumundaki tek bir nokta ile ifade edilir. (K-MEANS Modeli) 383 | 384 | Genel olarak istediğimiz şey küme elemanları arası benzerlik en yüksek (mesafe en düşük), kümeler arası benzerlik en düşük veya farklılık en yüksek (mesafe en yüksek) olmalıdır. 385 | 386 | İris verisini gerçekte nasıl kümelendiğini görelim 387 | ```{r} 388 | ggplot(iris, aes(Petal.Length, Petal.Width, color=Species)) + geom_point() 389 | ``` 390 | 391 | Şimdi ise kendimiz bir model ile algoritma oluşturup nasıl kümelendiğine bakalım 392 | 393 | ```{r} 394 | irisCluster <- kmeans(iris[,3:4], centers = 3, nstart = 20) 395 | ggplot(iris, aes(Petal.Length, Petal.Width, color=as.factor(irisCluster$cluster))) + geom_point() 396 | ``` 397 | 398 | Aşağı yukarı benzer bir kümeleme yapıldığını görebiliyoruz. 399 | Bir tablo oluşturup hatalara bakalım 400 | ```{r} 401 | table(irisCluster$cluster, iris$Species) 402 | ``` 403 | 404 | Hesaplamayı farklı yapmasından dolayı asal köşegen üzerinde görememiş olsak bile aslında anlaşılıyor ki toplamda 6 hatalı gözlem tahminimiz olmuş. Grafikteki benzerlik de görülüyordu zaten. 405 | 406 | ### SUPRVISED LEARNING (GÖZETİMLİ/DENETİMLİ ÖĞRENME) ALGORİTMALARI 407 | 408 | Yukarıda anlattığımız k-means yönteminde bu sefer verisetindeki sınıfların önceden etiketlenmiş olduğunu, yani, sınıfları artık bildiğimizi düşünelim. 409 | Yani iris verisetindeki (orjinaldeki) hangi gözlemin hangi türe ait olduğunu biliyorsam artık gözetimli bir algoritma uygulayabilirim demektir. 410 | 411 | Bunun için knn algoritmasını kullanacağız. Fakat modelin nasıl çalıştığını test etmek için bu sefer test ve train olarak ayırmam gerekecek. 412 | 413 | Verisetini 3 şekilde ayırabiliriz: 414 | 415 | - Hold Out Yöntemi (Ayırıp Tutma) 416 | 417 | - K-FOLD Yöntemi (K Katlı Çarpraz Doğrulama) 418 | 419 | - LOOCV - Leave One Out Yöntemi 420 | 421 | 422 | En sık karşılaşılan yöntem hold out olmasına rağmen tavsiye edilmez. Fakat kolay olması açısından biz de burada bunu kullanacağız. 423 | 424 | 425 | #### KNN (K NEAREST NEIGHBORHOOD) / K (SAYIDA) EN YAKIN KOMŞU ALGORİTMASI 426 | 427 | KNN algoritması k--means gibi bir kümeleme algoritmasıdır.(aslında sınıflandırma algoritmasıdır ama şimdilik pek fark yok denilebilir.) Fakat gözetimli bir algoritma olarak çalışır. Algoritma gözetimli olduğu için verisetindeki kümeler bilinir. Dolayısıyla kümeleri kendisi bulmak yerine şunu yapar; Yeni bir gözlem geldiğinde önceden gördüğü ve öğrendiği verisetinde (uzayda) yeni gelen noktaya en yakın k sayıda noktaya bakar. Baktığı k sayıda nokta çoğunlukla hangi kümeye aitse veya yeni nokta hangilerine daha yakınsa, yeni gelen gözlemi de o kümedendir diye tahmin eder. Tıpkı k-means gibi burada da mesafe ölçmek için kullanılacak yöntem çok önemlidir. Fakat bundan daha önemli olan bakılacak komşu sayısının yani k değerinin kaç olduğunu belirlemektir. Bazı kaynaklarda k değerinin gözlem değerinin karekökü olarak belirlenebileceği belirtilirken, bazı kaynaklarda ise gözlem sayısının karekökünü orta nokta kabul edip ona göre k değerleri hesaplamak önerilir. 428 | 429 | ```{r} 430 | library(class) 431 | library(caret) 432 | data("mtcars") 433 | veri <- mtcars 434 | 435 | veri$am <- as.factor(veri$am) 436 | ayir <- createDataPartition(y=veri$am, p = 0.75, list = FALSE) 437 | 438 | egitim <- veri[ayir,] 439 | test <- veri[-ayir,] 440 | 441 | egitim_v <- egitim[,-9] 442 | test_v <- test[,-9] 443 | 444 | egitim_h <- egitim[[9]] 445 | test_h <- test[[9]] 446 | 447 | tahmin <- knn(egitim_v, test_v, egitim_h, k = 6) 448 | 449 | (cm <- confusionMatrix(test_h, tahmin)) 450 | ``` 451 | 452 | 453 | Yukarıda modelin sonuçları görülüyor. Fakat Accuracy, Sensitivity, Specificity, Kappa gibi birçok metrik ölçülmüş. Bunların hepsi iyi olsa bile bu modelin başarılı olduğu anlamına gelmez. Şöyle bir örnek verelim; 100 tane kedi köpek resmi arasından hangisinin kedi hangisinin köpek olduğunu bulmak istediğimizde, eğer test setimizde sadece 10 kedi resmi varsa ve model hepsini köpek olarak tahmin etmişse, Accuracy %90 ve Sensitivity %100 çıkmasına rağmen Specificity 0% çıkar. Köpek olma durumunu pozitif olarak belirlediğimizde; 454 | 455 | Sensitivity = TP/(TP + FN) = 100% (Modelin köpekleri tanıma durumu) 456 | 457 | Specificity = TN/(TN + FP) = 0% (Modelin kedileri tanıma durumu) 458 | 459 | Accuracy = (TN + TP)/(TN+TP+FN+FP) = 90% (Toplam başarı) 460 | 461 | Bu demektir ki bizim modelimiz kedi olma durumunu hiç öğrenememiş. Yani karşımıza bir kedi geldiğinde onu tanımamız mümkün değil. Hatta ve hatta model hiç bir şey öğrenememiş ve her gelen veriye köpek diyip geçmiş de olabilir. Yani böyle bir durumda model aslında köpekleri de tanımıyor olabilir. 462 | 463 | Dolayısıyla tek bir ölçüm yöntemine, hatta 2-3 tanesine göre bile karar vermek doğru değildir. ROC eğrisi çizdirmek, F-Testi değeri, vs. gibi başka yöntemler de her zaman tercih edilmelidir. 464 | 465 | 466 | ## SON 467 | 468 | 469 | 470 | 471 | 472 | 473 | 474 | 475 | 476 | 477 | 478 | 479 | 480 | 481 | 482 | 483 | 484 | 485 | 486 | -------------------------------------------------------------------------------- /Ridge-Regression.R: -------------------------------------------------------------------------------- 1 | library(ISLR) 2 | library(caret) 3 | library(dplyr) 4 | library(ggplot2) 5 | library(funModeling) 6 | library(PerformanceAnalytics) 7 | library(pls) 8 | df <- Hitters 9 | df <- na.omit(df) 10 | rownames(df) <- c() 11 | 12 | train_indeks <- createDataPartition(df$Salary, p = 0.8, times = 1) 13 | head(train_indeks) 14 | train <- df[train_indeks$Resample1, ] 15 | test <- df[-train_indeks$Resample1, ] 16 | 17 | train_x <- train %>% dplyr::select(-Salary) 18 | train_y <- train %>% dplyr::select(Salary) 19 | test_x <- test %>% dplyr::select(-Salary) 20 | test_y <- test %>% dplyr::select(Salary) 21 | 22 | training <- data.frame(train_x, Salary = train_y) 23 | 24 | plot_num(training) 25 | summary(training) 26 | profiling_num(training) 27 | chart.Correlation(df %>% dplyr::select(-c("League", "NewLeague", "Division"))) 28 | 29 | #model kurulması 30 | 31 | lm_fit <- lm(Salary~., data = training) 32 | summary(lm_fit) 33 | 34 | # model nesnesi içinden alabileceğimiz değerleri görmek için şunları kullanabiliriz 35 | names(lm_fit) 36 | attributes(lm_fit) 37 | 38 | sonuc <- data.frame(obs=training$Salary, pred=lm_fit$fitted.values) 39 | defaultSummary(sonuc) 40 | 41 | pred = predict(lm_fit, test_x) 42 | sonuc_test <- data.frame(obs=test_y$Salary , pred=pred) 43 | 44 | defaultSummary(sonuc_test) 45 | 46 | # model_validation 47 | 48 | kontrol <- trainControl(method = "cv", number = 10) 49 | 50 | #bu şekilde herhangi bir fonksiyonun bütün parametrelerini görebiliriz. 51 | names(trainControl()) 52 | lm_val_fit <- 53 | train( 54 | x = train_x, 55 | y = train_y$Salary, 56 | method = "lm", 57 | trControl = kontrol 58 | ) 59 | 60 | lm_val_fit 61 | summary(lm_val_fit) 62 | names(lm_val_fit) 63 | lm_val_fit$bestTune 64 | lm_val_fit$finalModel 65 | 66 | 67 | #principle component regression - PCR 68 | 69 | pcr_fit <- pcr(Salary~., data=training, scale=T, validation="CV") 70 | summary(pcr_fit) 71 | validationplot(pcr_fit) 72 | names(pcr_fit) 73 | defaultSummary(data.frame(obs=training$Salary, 74 | pred= as.vector(pcr_fit$fitted.values))) 75 | 76 | predict(pcr_fit, test_x) 77 | 78 | defaultSummary(data.frame(obs = training$Salary, 79 | pred = as.vector(predict( 80 | pcr_fit, test_x, ncomp = 1:3 81 | )))) 82 | 83 | # öbyle bir döngü ilew kaç bileşende ne kadar etki olduğunu görebiliriz. 84 | for (i in c(1:19)) { 85 | print(as.character(i)) 86 | 87 | print(defaultSummary(data.frame(obs = test_y$Salary, 88 | pred = as.vector(predict( 89 | pcr_fit, test_x, ncomp = i 90 | ))))) 91 | i = i + 1 92 | } 93 | 94 | 95 | #ben sürekli yukarıdaki gibi bir döngüyle uğraşmak istemediğim için 96 | # bir fonksiyon yazıp daha sonra da gerektiğinde kullanmak istiyorum 97 | 98 | pcr_tune <- function(model, x, y) { 99 | num_of_iter=length(x) 100 | for (i in c(1:num_of_iter)) { 101 | cat("COMPONENTS:", i) 102 | cat("\n") 103 | print(defaultSummary(data.frame(obs = y[,1], 104 | pred = as.vector(predict( 105 | model, x, ncomp = i 106 | ))))) 107 | cat("\n") 108 | i = i + 1 109 | if (i=num_of_iter) { 110 | remove(i) 111 | 112 | } 113 | } 114 | } 115 | 116 | ayarlar <- pcr_tune(model=pcr_fit, x=test_x, y = test_y) 117 | #yazdığmız fonksiyon düzgün çalışıyor 118 | 119 | kontrol <- trainControl(method = "CV", number = 10) 120 | set.seed(100) 121 | pcr_ayar <- train(train_x, train_y$Salary, 122 | method="pcr", 123 | trContol = kontrol, 124 | tuneLength = 20, 125 | preProc = c("center", "scale") 126 | ) 127 | pcr_ayar 128 | pcr_ayar$finalModel 129 | 130 | plot(pcr_ayar) 131 | 132 | # PLS - PARTIAL LEAST SQUARES 133 | pls_fit <- plsr(Salary~., data=training) 134 | summary(pls_fit) 135 | validationplot(pls_fit, val.type = "MSEP") 136 | 137 | defaultSummary(data.frame(obs=test_y$Salary, pred=as.vector( 138 | predict(pls_fit, test_x) 139 | ))) 140 | 141 | kontrol <- trainControl(method = "CV", number = 10) 142 | set.seed(100) 143 | pls_ayar <- train(train_x, train_y$Salary, 144 | method="pls", 145 | trContol = kontrol, 146 | tuneLength = 20, 147 | preProc = c("center", "scale") 148 | ) 149 | pls_ayar 150 | pls_ayar$finalModel 151 | 152 | plot(pls_ayar) 153 | 154 | 155 | # RİDGE REGRESSİON - L2 REGULARİZATİON 156 | train_x_x <- train_x %>% dplyr::select(-c("League", "NewLeague", "Division")) 157 | 158 | library(glmnet) 159 | ridge_fit <- glmnet(as.matrix(train_x_x), train_y$Salary, 160 | alpha = 0) 161 | ridge_fit 162 | 163 | plot(ridge_fit, xvar = "lambda", label = TRUE) 164 | min(log(ridge_fit$lambda)) 165 | #minimum lambda değerini gösterdik 166 | 167 | ridge_cv_fit <- cv.glmnet(as.matrix(train_x_x), train_y$Salary, 168 | alpha = 0) 169 | ridge_cv_fit 170 | plot(ridge_cv_fit) 171 | ridge_cv_fit$lambda.min 172 | ridge_cv_fit$lambda.1se 173 | coef(ridge_cv_fit, "lambda.min") 174 | coef(ridge_cv_fit) #default olarak 1s lambdasına karşılık gelen katsayıları verir 175 | library(broom) 176 | tidy(ridge_cv_fit) 177 | 178 | test_x_x <- test_x %>% dplyr::select(-c("League", "NewLeague", "Division")) 179 | 180 | defaultSummary(data.frame(obs=test_y$Salary, pred=as.vector( 181 | predict(ridge_cv_fit, as.matrix(test_x_x), s = "lambda.min") 182 | ))) 183 | 184 | kontrol <- trainControl(method = "CV", number = 10) 185 | set.seed(100) 186 | 187 | ridge_grid <- data.frame( 188 | lambda = seq(1,10000, length=20) 189 | ) 190 | help("seq") 191 | ridge_tune <- train(train_x_x, train_y$Salary, 192 | method="ridge", 193 | trContol = kontrol, 194 | tuneGrid = ridge_grid, 195 | preProc = c("center", "scale") 196 | ) 197 | ridge_tune 198 | 199 | plot(ridge_tune) 200 | 201 | ridge_tune$results %>% filter(lambda == as.numeric(ridge_tune$bestTune)) 202 | 203 | 204 | defaultSummary(data.frame(obs=test_y$Salary, pred=as.vector( 205 | predict(ridge_tune, as.matrix(test_x_x)) 206 | ))) 207 | 208 | # LASSO REGRESYON - L1 REGULARİZATİON 209 | train_x_x <- train_x %>% dplyr::select(-c("League", "NewLeague", "Division")) 210 | 211 | lasso_fit <- glmnet(as.matrix(train_x_x), train_y$Salary, 212 | alpha = 1) #ALPHA =1 LASSO or L1 - ALPHA = 0 RİDGE or L2 213 | lasso_fit 214 | 215 | plot(lasso_fit, xvar = "lambda", label = TRUE) 216 | names(lasso_fit) 217 | tidy(lasso_fit$beta) 218 | lasso_fit$beta 219 | 220 | lasso_cv_fit <- cv.glmnet(as.matrix(train_x_x), train_y$Salary, 221 | alpha = 1) 222 | lasso_cv_fit 223 | plot(lasso_cv_fit) 224 | lasso_cv_fit$lambda.min 225 | lasso_cv_fit$lambda.1se 226 | coef(lasso_cv_fit, "lambda.min") 227 | coef(lasso_cv_fit) 228 | glance(lasso_cv_fit) 229 | 230 | test_x_x <- test_x %>% dplyr::select(-c("League", "NewLeague", "Division")) 231 | 232 | defaultSummary(data.frame(obs=test_y$Salary, pred=as.vector( 233 | predict(lasso_cv_fit, as.matrix(test_x_x), s = "lambda.min") 234 | ))) 235 | 236 | ctrl <- trainControl(method = "cv", number = 10) 237 | set.seed(100) 238 | 239 | lasso_grid <- data.frame( 240 | fraction = seq(.05,100, length=50) 241 | ) 242 | lasso_grid 243 | help("train") 244 | 245 | lasso_tune <- caret::train(train_x_x, train_y$Salary, 246 | method="lasso", 247 | trContol = ctrl, 248 | tuneGrid = lasso_grid, 249 | preProc = c("center", "scale") 250 | ) 251 | lasso_tune 252 | 253 | plot(lasso_tune) 254 | 255 | lasso_tune$results %>% filter(lambda == as.numeric(lasso_tune$bestTune)) 256 | 257 | 258 | # ELASTİKNET -ENET - LASSO VE RİDGE'İ İÇERİR. 259 | # DEĞİŞKEN SEÇİMİNİ L2 (LASSO), CEZALANDIRMAYI L1'E (RİDGE) GÖRE YAPAR. 260 | 261 | library(lars) 262 | library(elasticnet) 263 | 264 | enet_fit <- enet(x = as.matrix(train_x_x), y = train_y$Salary, 265 | lambda = 1, normalize = TRUE 266 | ) 267 | names(enet_fit) 268 | enet_fit$L1norm 269 | enet_fit$lambda 270 | enet_fit$beta.pure 271 | 272 | plot(enet_fit) 273 | 274 | predict(enet_fit, newx = as.matrix(test_x_x), s = 1, mode = "fraction", 275 | type = "fit") 276 | predict(enet_fit, newx = as.matrix(test_x_x), s = 0.1, mode = "fraction", 277 | type = "coefficients") 278 | 279 | ctrl <- trainControl(method = "cv", number = 10) 280 | set.seed(100) 281 | 282 | 283 | enet_grid <- 284 | data.frame(lambda=seq(0,0.1, length=20), 285 | fraction=seq(0.05,1,length=20)) 286 | 287 | 288 | enet_grid 289 | 290 | enet_tune <- caret::train(train_x_x, train_y$Salary, 291 | method="enet", 292 | trContol = ctrl, 293 | tuneGrid = enet_grid, 294 | preProc = c("center", "scale") 295 | ) 296 | enet_tune 297 | enet_tune$bestTune 298 | plot(enet_tune) 299 | 300 | defaultSummary(data.frame(obs=test_y$Salary, pred=as.vector( 301 | predict(enet_tune, as.matrix(test_x_x)) 302 | ))) 303 | 304 | 305 | 306 | 307 | 308 | 309 | 310 | 311 | 312 | 313 | 314 | 315 | 316 | -------------------------------------------------------------------------------- /SVM.R: -------------------------------------------------------------------------------- 1 | #install.packages("ISLR") 2 | library(ISLR) 3 | #install.packages("tidyverse") 4 | library(tidyverse) 5 | #install.packages("funModeling") 6 | library(funModeling) 7 | #install.packages("caret") 8 | library(caret) 9 | #install.packages("pROC") 10 | library(pROC) 11 | #install.packages("class") 12 | library(class)#knn icin 13 | #install.packages("e1071") 14 | library(e1071)#knn icin 15 | #install.packages("kernlab") 16 | library(kernlab) #svm icin 17 | #install.packages("ROCR") 18 | library(ROCR) #roc icin 19 | #install.packages("neuralnet") 20 | library(neuralnet) 21 | #install.packages("GGally") 22 | library(GGally) 23 | #install.packages("nnet") 24 | library(nnet) 25 | #install.packages("rpart") 26 | library(rpart) 27 | #install.packages("cli") 28 | library(cli) 29 | #install.packages("tree") 30 | library(tree) 31 | #install.packages("rpart.plot") 32 | library(rpart.plot) 33 | #install.packages("randomForest") 34 | library(randomForest) 35 | #install.packages("gbm") 36 | library(gbm) 37 | #install.packages("xgboost") 38 | library(xgboost) 39 | #install.packages("DiagrammeR") 40 | library(DiagrammeR) 41 | #install.packages("mlbench") 42 | library(mlbench) 43 | 44 | 45 | set.seed(10111) 46 | x <- matrix(rnorm(40), 20, 2) 47 | y <- rep(c(-1,1), c(10,10)) 48 | head(x) 49 | head(y) 50 | x[y==1,] <- x[y==1,] + 1 51 | head(x) 52 | plot(x, col=y+3,pch=19) 53 | 54 | df <- data.frame(x, y=as.factor(y)) 55 | 56 | #svm model 57 | 58 | svm_model1 <- svm(y~., data = df, kernel="polynomial", cost=10, scale = F) 59 | summary(svm_model1) 60 | 61 | plot(svm_model1, df) 62 | 63 | #SVM MODELİNİN NASIL OLUŞTUĞUNU ANLAMAK 64 | ##=========================================================== 65 | #BURADA DF'NİN MİNİMUM VE MAKSİMUM DEĞERLERİ ARASINDA DEĞERLER OLUŞTURUP 66 | # SVM YAPISNININ NASIL ORTAYA ÇIKTIĞINI ANLAMAYA ÇALIŞACAĞIZ. 67 | 68 | a <- seq(from=apply(df,2, range)[1,1], 69 | to = apply(df, 2, range)[2,1], 70 | length = 5) 71 | b <- seq(from=apply(df,2, range)[1,2], 72 | to = apply(df, 2, range)[2,2], 73 | length = 5) 74 | expand.grid(a,b) 75 | 76 | make_grid <- function(x, n = 75) { 77 | g_range = apply(x, 2, range) 78 | x1 = seq(from = g_range[1,1], to = g_range[2,1], length = n) 79 | x2 = seq(from = g_range[1,2], to = g_range[2,2], length = n) 80 | expand.grid(X1 = x1, X2 = x2) 81 | } 82 | 83 | x_grid <- make_grid(x) 84 | x_grid[1:10,] 85 | 86 | y_grid <- predict(svm_model1, x_grid) 87 | 88 | plot(x_grid, col=c("red", "blue")[as.numeric(y_grid)], 89 | pch=19, cex=0.2) 90 | 91 | points(x, col=y+3, pch=19) 92 | points(x[svm_model1$index, ], pch="I", cex=2) 93 | 94 | beta <- drop(t(svm_model1$coefs)%*%x[svm_model1$index,]) 95 | b0 <- svm_model1$rho 96 | 97 | curve(b0 / beta[2], -beta[1] / beta[2]) 98 | curve((b0 - 1) / beta[2], -beta[1] / beta[2], lty = 2) 99 | curve((b0 + 1) / beta[2], -beta[1] / beta[2], lty = 2) 100 | #===========================================================# 101 | 102 | 103 | #svm tahmin bölümü 104 | 105 | pred <- predict(svm_model1) 106 | class_error(df$y, svm_model1$fitted) 107 | 108 | df$y <- ifelse(df$y==-1, 0,1) 109 | svm_model1$fitted <- ifelse(svm_model1$fitted==-1, 0, 1) 110 | 111 | tb <- table(svm_model1$fitted, df$y) 112 | confusionMatrix(tb, positive = "1") 113 | svm_model1$fitted 114 | 115 | # SVM DOĞRUSAL OLMAYAN MODELLER 116 | 117 | #İLK MODEL 118 | #====================================================== 119 | #load ile yüklenen data R içinden ismiyle çağrılabilir. 120 | load(file = "ESL.mixture.rda") 121 | df <- ESL.mixture 122 | attach(df) 123 | remove(x, y) 124 | plot(x, col=y+1) 125 | df <- data.frame(x=x, y=as.factor(y)) 126 | 127 | n_svm_fit <- svm(factor(y)~., data = df, scale=F, kernel="radial", cost=5) 128 | svm_fit 129 | 130 | x_grid <- expand.grid(X1 = px1, X2 = px2) 131 | y_grid <- predict(n_svm_fit, x_grid) 132 | 133 | 134 | plot(x_grid, 135 | col = as.numeric(y_grid), 136 | pch = 20, 137 | cex = .2) 138 | 139 | points(x, col = y + 1, pch = 19) 140 | 141 | dv <- predict(n_svm_fit, x_grid, decision.values = TRUE) 142 | 143 | contour(px1, px2, 144 | matrix(attributes(dv)$decision, length(px1), length(px2)), 145 | level = 0, 146 | add = TRUE) 147 | 148 | 149 | contour(px1, px2, 150 | matrix(attributes(dv)$decision, length(px1), length(px2)), 151 | level = 0.5, 152 | add = TRUE, 153 | col = "blue", 154 | lwd = 2) 155 | 156 | 157 | # İKİNCİ MODEL VE MODEL TUNİNG 158 | #========================================================= 159 | data("segmentationData") 160 | df <- segmentationData 161 | as.tibble(df) 162 | glimpse(df) 163 | # biz bu veriseti içinde class değişkenini bağımlı değişken olarak alacağız. 164 | table(df$Class) 165 | 166 | svm_train <- df %>% filter(Case=="Train") %>% select(-Case) 167 | svm_test <- df %>% filter(Case=="Test") %>% select(-Case) 168 | 169 | svm_train_x <- svm_train %>% select(-Class) 170 | svm_test_x <- svm_test %>% select(-Class) 171 | 172 | svm_test_y <- svm_test$Class 173 | svm_train_y <- svm_train$Class 174 | 175 | #model tune işlemleri için ayarlamalar. 176 | 177 | ctrl <- trainControl(method = "cv", summaryFunction = twoClassSummary, 178 | classProbs = TRUE) 179 | 180 | svm_grid <- expand.grid(sigma=0.08, 181 | C = seq(0.001, 0.2, length=10)) 182 | 183 | svm_tune <- train(svm_train_x, svm_train_y, method="svmRadial", 184 | trControl = ctrl, 185 | tuneGrid=svm_grid, metric="ROC") 186 | svm_tune 187 | plot(svm_tune) 188 | confusionMatrix(predict(svm_tune, test_x), svm_test_y, positive = "WS") 189 | 190 | y_pred <- predict(svm_tune, svm_test_x, type="raw") 191 | 192 | test_prob <- predict(svm_tune, svm_test_x, type = "prob") 193 | test_prob$WS 194 | roc(svm_test_y ~ test_prob$WS, plot = TRUE, print.auc = TRUE) 195 | 196 | 197 | 198 | 199 | 200 | 201 | 202 | 203 | 204 | 205 | 206 | 207 | 208 | 209 | 210 | 211 | 212 | 213 | 214 | 215 | 216 | 217 | 218 | 219 | 220 | 221 | -------------------------------------------------------------------------------- /Universite_cinsiyet_oranlari.R: -------------------------------------------------------------------------------- 1 | #Dünya Üniversitelerinde Kadın ve Erkek Oranları ve Grafikleştirmesi 2 | 3 | veri = read.csv(file.choose()) # veri.csv dosyasını indiriniz ve SOrunca seçiniz. 4 | summary(veri) # verinin özet bilgilerine bakıyoruz. 5 | 6 | #barplot grafiğini kadın-erkek sayısı farkına göre çizdirelim. 7 | barplot(veri$Gap, col = heat.colors(21), ylab = "Erkek-Kadın Farkı", 8 | names.arg = veri$School, srt=45, las=2, 9 | main = "Üniversitelerde\n Kadın-Erkek Sayısı Farkı") 10 | 11 | #kadın erkek oranına göre barplot çizdirelim. Sadece fark ile sonuca varamayabiliriz. 12 | barplot(veri$Men/veri$Women, col = heat.colors(21), ylab = "Erkek/Kadın Oranı", 13 | names.arg = veri$School, srt=45, las=2, 14 | main = "Üniversitelerde\n Erkek/Kadın Oranı") 15 | 16 | #FAKAT TAM OLARAK ANLAMAK İÇİN BOPXLOT ÇİZDİRMEMİZ GEREKİYOR Kİ ARALIĞI GÖRELİM 17 | boxplot(veri$Men/veri$Women, xlab="Oranlar", main="Kadın-Erkek Dağılımı\nBoxPlot", 18 | col.lab=2, col.main=4, col.axis="magenta4", col="orange", horizontal = T) 19 | help("boxplot") 20 | #bu grafikte gördük ki en düşük 1.2 katına yakın erkekler daha fazla iken 21 | #en yüksekte erkekler kadınlardan 1.6 kat daha fazla 22 | #ve bu ünivresitelerde erkekler kadınların ortalama 1.4 katı kadar 23 | #Erkek oranı MIT de en fazla iken, SoCal (Southern California) ise en düşük orana sahip 24 | 25 | -------------------------------------------------------------------------------- /XGBOOST.Rmd: -------------------------------------------------------------------------------- 1 | --- 2 | title: "R Notebook" 3 | output: html_notebook 4 | author: M. Vahit Keskin 5 | --- 6 | 7 | ### M. Vahit Keskin'in Udemy Derslerinden alıntılanmıştır. 8 | 9 | # XGBoost 10 | 11 | 12 | ## Giris 13 | Ozellikleri 14 | 15 | Hiz: 16 | XGBoost OpenMD sayesinde otomatik olarak paralel hesaplama yapar. Boylece klasik GBM'den 10 kat daha hizli calisir. 17 | 18 | Girdi Tipleri: 19 | Yogunluk matrisi - R'in yogunluk matrisi: matrix 20 | Seyrek matrisi - R'in seyreklik matrisi - Matrix::dgCMatrix 21 | Kendi veri sinifi: xgb.DMatrix 22 | 23 | Seyreklik: 24 | Regresyon ya da siniflandirma problemleri icin seyrek girdileri kabul eder buna gore optimize edilmistir. 25 | 26 | Ozellestirme: 27 | Objective fonksiyonlari ve evaluation fonksiyonlari ozellestirilebilir. 28 | Yani makine ogrenmesi problem turune gore olceklenebilir ve basari degerlendirme kriterleri de duzenlenebilir. 29 | 30 | Kurulum 31 | ```{r} 32 | #en guncel versiyon icin 33 | #install.packages("drat", repos="https://cran.rstudio.com") 34 | #drat:::addRepo("dmlc") 35 | #install.packages("xgboost", repos="http://dmlc.ml/drat/", type = "source") 36 | 37 | #cran versiyonu icin 38 | install.packages("xgboost") 39 | library(xgboost) 40 | ``` 41 | 42 | 43 | ## Model 44 | 45 | Model 46 | ```{r} 47 | 48 | xgboost_fit <-xgboost(data = as.matrix(train_x), 49 | label = train_y, 50 | booster = "gblinear", 51 | max.depth = 2, 52 | eta = 1, 53 | nthread = 2, 54 | nrounds = 1000) 55 | 56 | 57 | dtrain <- xgb.DMatrix(data = as.matrix(train_x), label = train_y) 58 | dtest <- xgb.DMatrix(data = as.matrix(test_x), label = test_y) 59 | dtrain 60 | xgboost_fit <-xgboost(data = dtrain, 61 | booster = "gblinear", 62 | max.depth = 2, 63 | eta = 1, 64 | nthread = 2, 65 | nrounds = 3) 66 | 67 | xgboost_fit 68 | 69 | 70 | class(dtrain) 71 | 72 | 73 | imp_matris <- xgb.importance(model = xgboost_fit) 74 | imp_matris 75 | 76 | xgb.plot.importance(imp_matris) 77 | 78 | ``` 79 | 80 | 81 | 82 | Model Takip: watchlist 83 | ```{r} 84 | 85 | watchlist <- list(train = dtrain, test = dtest) 86 | 87 | xgb_fit <- xgb.train(data = dtrain, 88 | booster = "gblinear", 89 | max.depth = 4, 90 | eta = 0.1, 91 | nthread = 2, 92 | nrounds = 100, 93 | watchlist = watchlist) 94 | 95 | imp_matris <- xgb.importance(model = xgb_fit) 96 | xgb.plot.importance(imp_matris) 97 | xgb_fit$evaluation_log 98 | ``` 99 | 100 | 101 | 102 | ## Tahmin 103 | 104 | ```{r} 105 | predict(xgb_fit, as.matrix(test_x)) 106 | 107 | plot(predict(xgb_fit, as.matrix(test_x)), test_y, 108 | xlab = "Tahmin Edilen", ylab = "Gercek", 109 | main = "Tahmin Edilen vs Gercek: XGBoost", 110 | col = "dodgerblue", pch = 20) 111 | grid() 112 | abline(0, 1, col = "darkorange", lwd = 2) 113 | 114 | library(caret) 115 | defaultSummary(data.frame(obs = test_y, 116 | pred = predict(xgb_fit, as.matrix(test_x)))) 117 | 118 | ``` 119 | 120 | 121 | ## Model Tuning 122 | ```{r} 123 | 124 | 125 | ctrl <- trainControl(method = "cv", number = 10) 126 | 127 | xgb_grid <- expand.grid( 128 | nrounds = 1000, 129 | lambda = c(1,2,3), 130 | alpha = c(0, 0.5, 1), 131 | eta = c(0, 0.5, 1) 132 | 133 | ) 134 | 135 | 136 | xgb_tune_fit <- train( 137 | x = data.matrix(train_x), 138 | y = train_y, 139 | trControl = ctrl, 140 | tuneGrid = xgb_grid, 141 | method = "xgbLinear" 142 | ) 143 | 144 | defaultSummary(data.frame(obs = test_y, 145 | pred = predict(xgb_tune_fit, as.matrix(test_x)))) 146 | 147 | 148 | 149 | ``` 150 | 151 | ## Model Kaydetme 152 | ```{r} 153 | save(xgb_tune_fit, file = "son_model.rda") 154 | #deneme yapalım 155 | rm(xgb_tune_fit) #kurduğumuz modeli kaldırıp dışarıdan alalım 156 | load("son_model.rda") 157 | #modeli yüklediğimizde daha önce kaydettiğimiz isimle kullanabilir 158 | #zaten yükleme yapıldığında environment kısmına ismiyle gelecektir ve o isimden kullanabiliriz. 159 | 160 | defaultSummary(data.frame(obs = test_y, 161 | pred = predict(xgb_tune_fit, as.matrix(test_x)))) 162 | 163 | ``` 164 | 165 | 166 | 167 | 168 | 169 | 170 | 171 | 172 | 173 | 174 | 175 | 176 | 177 | 178 | 179 | 180 | 181 | 182 | 183 | 184 | 185 | 186 | 187 | -------------------------------------------------------------------------------- /XGBoost-Classification.R: -------------------------------------------------------------------------------- 1 | #install.packages("ISLR") 2 | library(ISLR) 3 | #install.packages("tidyverse") 4 | library(tidyverse) 5 | #install.packages("funModeling") 6 | library(funModeling) 7 | #install.packages("caret") 8 | library(caret) 9 | #install.packages("pROC") 10 | library(pROC) 11 | #install.packages("class") 12 | library(class)#knn icin 13 | #install.packages("e1071") 14 | library(e1071)#knn icin 15 | #install.packages("kernlab") 16 | library(kernlab) #svm icin 17 | #install.packages("ROCR") 18 | library(ROCR) #roc icin 19 | #install.packages("neuralnet") 20 | library(neuralnet) 21 | #install.packages("GGally") 22 | library(GGally) 23 | #install.packages("nnet") 24 | library(nnet) 25 | #install.packages("rpart") 26 | library(rpart) 27 | #install.packages("cli") 28 | library(cli) 29 | #install.packages("tree") 30 | library(tree) 31 | #install.packages("rpart.plot") 32 | library(rpart.plot) 33 | #install.packages("randomForest") 34 | library(randomForest) 35 | #install.packages("gbm") 36 | library(gbm) 37 | #install.packages("xgboost") 38 | library(xgboost) 39 | #install.packages("DiagrammeR") 40 | library(DiagrammeR) 41 | #install.packages("mlbench") 42 | library(mlbench) 43 | 44 | data(PimaIndiansDiabetes) 45 | df <- PimaIndiansDiabetes 46 | summary(df) 47 | profiling_num(df) 48 | str(df) 49 | ggpairs(df, verbose=FALSE) 50 | 51 | glimpse(df) 52 | plot_num(df) 53 | freq(df) 54 | 55 | set.seed(123) 56 | train_indeks <- createDataPartition(df$diabetes, p = .8, list = FALSE, times = 1) 57 | 58 | train <- df[train_indeks,] 59 | test <- df[-train_indeks,] 60 | 61 | train_x <- train %>% dplyr::select(-diabetes) 62 | train_y <- train$diabetes 63 | test_x <- test %>% dplyr::select(-diabetes) 64 | test_y <- test$diabetes 65 | 66 | #tek bir veri seti 67 | training <- data.frame(train_x, diabetes = train_y) 68 | 69 | train_y <- as.numeric(train_y) - 1 70 | d_train <- xgb.DMatrix(data = as.matrix(train_x), label = train_y) 71 | 72 | test_y <- as.numeric(test_y) - 1 73 | d_test <- xgb.DMatrix(data = as.matrix(test_x), label = test_y) 74 | 75 | xgb_model <- xgboost(data = d_train, max.depth=2, eta=1, ntread=2, 76 | nrounds = 20, objective="binary:logistic", verbose = 1) 77 | 78 | bst <- xgb.train(data = d_train, max.depth=1, eta=0.34, ntread=2, 79 | nrounds = 31, eval.metric="error", gamma=1.7, 80 | eval.metric="logloss", objective = "binary:logistic") 81 | 82 | mm <- xgb.importance(model = bst) 83 | mm 84 | xgb.plot.importance(mm) 85 | 86 | xgb.dump(bst) 87 | xgb.plot.tree(model = bst) 88 | 89 | pred_y_xgb <- factor(ifelse(predict(bst, as.matrix(test_x))<0.5,0,1)) 90 | pred_y_xgb2 <- factor(ifelse(predict(bst, as.matrix(test_x))<0.5,0,1)) 91 | 92 | model_lm <- lm(as.numeric(diabetes)~., data = train) 93 | pred_lm <- predict(model_lm, test_x) 94 | pred_lm <- factor(ifelse(pred_lm>1.5, 1,0)) 95 | 96 | confusionMatrix(factor(test_y), pred_lm, positive = "1") 97 | 98 | 99 | confusionMatrix(factor(test_y), pred_y_xgb, positive = "1") 100 | 101 | model_rm <- randomForest(diabetes~., data = train, ntree=500) 102 | pred_y_rf <- factor(ifelse(predict(model_rm, test_x) == "neg", 0, 1)) 103 | 104 | confusionMatrix(factor(test_y), pred_y_rf, positive = "1") 105 | 106 | model_knn <- knn(train = train_x, test = test_x, cl = train_y, k = 15) 107 | confusionMatrix(factor(test_y), factor(model_knn), positive = "1") 108 | 109 | 110 | tahminler <- data.frame(xgb=pred_y_xgb, xgb2=pred_y_xgb2, 111 | rf=pred_y_rf, knn=factor(model_knn), 112 | lm=pred_lm) 113 | 114 | tahminler 115 | 116 | tahminler$sonuc <- factor(apply(tahminler, 1, median)) 117 | 118 | summary(tahminler) 119 | 120 | 121 | confusionMatrix(factor(test_y), tahminler$sonuc, positive = "1") 122 | 123 | 124 | ctrl <- trainControl(method = "cv", 125 | number = 10, 126 | summaryFunction = twoClassSummary, 127 | classProbs = TRUE) 128 | 129 | xgb_grid <- expand.grid(eta = seq(0.01,2,length.out = 7), 130 | nrounds = seq(5,100, by = 20), 131 | max_depth = 1:7, 132 | min_child_weight = 2, 133 | colsample_bytree = 0.5, 134 | gamma = 0, 135 | subsample = 1) 136 | 137 | dim(xgb_grid) 138 | 139 | 140 | xgb_tune <- train(diabetes~., data = train, 141 | method = "xgbTree", 142 | tuneGrid = xgb_grid, 143 | trControl = ctrl, 144 | metric = "ROC") 145 | xgb_tune 146 | xgb_tune$bestTune 147 | xgb.plot.tree(model=xgb_tune$bestTune) 148 | 149 | pred_y <- predict(xgb_tune, as.matrix(test_x)) 150 | pred_y <- factor(ifelse(pred_y == "neg", 0, 1)) 151 | confusionMatrix(pred_y,factor(test_y), positive = "1") 152 | getTrainPerf(xgb_tune) 153 | 154 | 155 | 156 | 157 | 158 | 159 | 160 | 161 | 162 | 163 | 164 | 165 | 166 | 167 | 168 | 169 | 170 | 171 | 172 | 173 | 174 | 175 | 176 | 177 | -------------------------------------------------------------------------------- /YSA-Classification.R: -------------------------------------------------------------------------------- 1 | #install.packages("ISLR") 2 | library(ISLR) 3 | #install.packages("tidyverse") 4 | library(tidyverse) 5 | #install.packages("funModeling") 6 | library(funModeling) 7 | #install.packages("caret") 8 | library(caret) 9 | #install.packages("pROC") 10 | library(pROC) 11 | #install.packages("class") 12 | library(class)#knn icin 13 | #install.packages("e1071") 14 | library(e1071)#knn icin 15 | #install.packages("kernlab") 16 | library(kernlab) #svm icin 17 | #install.packages("ROCR") 18 | library(ROCR) #roc icin 19 | #install.packages("neuralnet") 20 | library(neuralnet) 21 | #install.packages("GGally") 22 | library(GGally) 23 | #install.packages("nnet") 24 | library(nnet) 25 | #install.packages("rpart") 26 | library(rpart) 27 | #install.packages("cli") 28 | library(cli) 29 | #install.packages("tree") 30 | library(tree) 31 | #install.packages("rpart.plot") 32 | library(rpart.plot) 33 | #install.packages("randomForest") 34 | library(randomForest) 35 | #install.packages("gbm") 36 | library(gbm) 37 | #install.packages("xgboost") 38 | library(xgboost) 39 | #install.packages("DiagrammeR") 40 | library(DiagrammeR) 41 | #install.packages("mlbench") 42 | library(mlbench) 43 | 44 | #KULLANACAĞIMIZ VERİSETİ 45 | # MEME KANSERİ AMLEİYATINDAN SONRA HAYATTA KALMA DURUMUNU İNCELİYORUZ. 46 | # DOLAYISIYLA BİR SINIFLANDRIMA PROBLEMİNE ODAKLANACAĞIZ. 47 | 48 | url <- "http://archive.ics.uci.edu/ml/machine-learning-databases//haberman/haberman.data" 49 | 50 | df <- read_csv(file = url, 51 | col_names = c("Age", "Operation_Year", "Number_Pos_Nodes", "Survival")) 52 | 53 | #VERİSETİNİN DÜZENLENMESİ 54 | summary(df) 55 | 56 | df$Survival <- ifelse(df$Survival == 1, 0, 1) 57 | 58 | df$Survival <- factor(df$Survival) 59 | summary(df) 60 | 61 | ggpairs(df[,1:3]) 62 | ggpairs(df) 63 | 64 | freq(df) 65 | 66 | #SCALE FONKSİYONU 67 | scale01 <- function(x) { 68 | (x-min(x)) / (max(x)-min(x)) 69 | } 70 | 71 | df <- df %>% mutate(Age = scale01(Age), 72 | Number_Pos_Nodes = scale01(Number_Pos_Nodes), 73 | Operation_Year = scale01(Operation_Year)) 74 | 75 | # TRAİN TEST AYRIMA İŞLEMLERİ 76 | train_indeks <- createDataPartition(df$Survival, p = 0.8, list = F, times = 1) 77 | 78 | train <- df[train_indeks,] 79 | test <- df[-train_indeks,] 80 | 81 | train_x <- train %>% select(-Survival) 82 | train_y <- train$Survival 83 | 84 | test_x <- test %>% select(-Survival) 85 | test_y <- test$Survival 86 | 87 | levels(train$Survival) <- make.names(levels(as.factor(train$Survival))) 88 | train_y <- train$Survival 89 | test_y <- test$Survival 90 | 91 | 92 | # NEURAL NETWORK KURULMASI VE EĞİTİLMESİ 93 | set.seed(800) 94 | 95 | nn_fit <- nnet(Survival~., data = train, size=12, decay=0.0001) 96 | summary(nn_fit) 97 | 98 | # TAHMİN 99 | predict(nn_fit, test_x) 100 | pred_y <- predict(nn_fit, test_x, type="class") 101 | pred_y <- ifelse(pred_y=="X0", 0, 1) 102 | pred_y 103 | test_y 104 | # TAHMİN SONUÇLARININ DEĞERLENDİRİLMESİ 105 | defaultSummary(data.frame(pred=pred_y, 106 | obs=test_y)) 107 | 108 | 109 | #YSA MODEL TUNE 110 | ctrl <- trainControl(method = "cv", number = 10, classProbs = TRUE) 111 | 112 | ysa_grid <- expand.grid(size=c(2:12), decay=seq(0.0001, 0.1, length=15)) 113 | 114 | maxSize <- max(nnetGrid$size) 115 | numWts <- 1*(maxSize * (length(ysa_train_x) + 1) + maxSize + 1) 116 | 117 | ysa_tune <- train( 118 | train_x, train_y, 119 | method = "nnet", 120 | metric = "ROC", 121 | tuneGrid = ysa_grid, 122 | trace = FALSE, 123 | maxit = 2000, 124 | MaxNWts = numWts, 125 | trControl = ctrl 126 | ) 127 | 128 | plot(ysa_tune) 129 | 130 | #YSA TUNE EDİLMİŞ MODEL İLE TAHMİN VE DEĞERLENDİRME 131 | pred_y <- predict(ysa_tune, test_x) 132 | pred_y <- ifelse(pred_y=="X0", 0, 1) 133 | pred_y <- factor(pred_y) 134 | 135 | defaultSummary(data.frame(pred=factor(pred_y), 136 | obs=test_y)) 137 | 138 | confusionMatrix(test_y, pred_y, positive = "1") 139 | 140 | 141 | -------------------------------------------------------------------------------- /aykiri-gozlemler.R: -------------------------------------------------------------------------------- 1 | #AYKIRI GÖZLEMLER 2 | #AYKIRI GÖZLEMLER 20 YIL ÖNCE VERİSETİNİ BOZAN DEĞERLER OLARAK GÖRÜLÜP SİLİNİRKEN, 3 | #ARTIK VERİNİN EN DEĞERLİ KISMI OLARAK GÖRÜLÜYOR. 4 | #ÖZELLİKLE SİBER GÜVENLİK, HİLELİ İŞLEMLER, SAHTECİLİK GİBİ KONULARDA AYKIRI GÖZLEMLER 5 | #ALTIN DEĞERİNDEKİ VERİYİ BARINDIRIRLAR. ÇÜNKÜ BU KONULARDA ULAŞMAK İSTEDİĞİMİZ ASIL ŞEY 6 | #TAM DA BU AYKIRILIK İLE İLİŞKİLİDİR. 7 | #YANİ AYKIRI GÖZLEMLER DOLDURULMAK, TAHMİN EDİLMEK VEYA SİLİNMEK ZORUNDA DEĞİLDİR. 8 | 9 | ### İSTATİSTİK AYKIRI OLANI BULMAKLA İLGİLENİR. ### 10 | ### YOKSA ORTALAMAYI BULMANIN KİMSEYE BİR FAYDASI YOKTUR. ### 11 | 12 | set.seed(54) 13 | veri <- rnorm(100) 14 | summary(veri) 15 | sd(veri) 16 | veri <- c(veri, c(4,5,6)) 17 | summary(veri) 18 | sd(veri) 19 | boxplot(veri) 20 | boxplot.stats(veri)$out #aykırı gözlemlerin değerleri 21 | 22 | which(veri %in% boxplot.stats(veri)$out) 23 | #boxplotstats ile alınan değerlerin indekslerini getir dedik. 24 | 25 | 26 | #ŞİMDİ İKİ GÖZLEMİMİZ OLSUN VE BU İKİ GÖZLEMİN KESİŞİMİNDEKİ AYKIRI GÖZLEMLERE 27 | #ERİŞMEK İSTEDİĞİMİZİ DÜŞÜNELİM 28 | 29 | set.seed(54) 30 | x <- rnorm(100) 31 | x <- c(x, c(4,5,6)) 32 | 33 | set.seed(455) 34 | y <- rnorm(100) 35 | y <- c(y, c(10,11,12)) #yine aynı indeslere aykırı gözlemler ekledik 36 | 37 | df <- data.frame(x,y) 38 | df 39 | 40 | a <- which(df$x %in% boxplot.stats(df$x)$out) 41 | b <- which(df$y %in% boxplot.stats(df$y)$out) 42 | a 43 | b 44 | 45 | intersect(boxplot.stats(df$x)$out, boxplot.stats(df$y)$out) #kesişen değerler var mı bakalım 46 | #burada bizim değerlerimiz farklı (4,5,6) ve (10,11,12). O yüzden göstermedi 47 | ortak <- intersect(a,b) # bu şekilde ise kesişen aykırı değerlerin indekslerine ulaşabiliriz. 48 | ortak 49 | plot(df) 50 | #aykırı gözlemler plot fonksiyonunda da görülüyor zaten 51 | 52 | points(df[ortak, ], col="red", pch="x", cex=2) 53 | 54 | ortak_tum <- union(a,b) #ikisinin birleşimini gösterir. 55 | ortak_tum 56 | length(ortak_tum) 57 | 58 | plot(df) 59 | # şimdi bütün aykırı gözlermleri çizdirelim 60 | points(df[ortak_tum, ], col="blue", pch="+", cex=2) 61 | 62 | #AYKIRI GÖZLEMLERİ SİLME 63 | str(df) 64 | df_temiz <- df[-ortak_tum, ] 65 | str(df_temiz) #gördüğümüz gibi 103 değişkenden 97 ye düştü ve 6 aykırı gözlem silindi 66 | 67 | #AYKIRI GÖZLEMLERİ ORTALAMA İLE DOLDURMA 68 | df 69 | a <- which(df$x %in% boxplot.stats(df$x)$out) 70 | b <- which(df$y %in% boxplot.stats(df$y)$out) 71 | 72 | df[a, ]$x 73 | df[b, ]$y 74 | 75 | mean(df$x) 76 | mean(df$y) 77 | 78 | df[a, ]$x <- mean(df$x) 79 | df[b, ]$y <- mean(df$y) 80 | 81 | df[a, ]$x 82 | 83 | #AYKIRI GÖZLEMLERİN BASKILANMASI 84 | set.seed(54) 85 | x <- rnorm(100) 86 | x <- c(x, c(4,5,6)) 87 | 88 | set.seed(455) 89 | y <- rnorm(100) 90 | y <- c(y, c(10,11,12)) #yine aynı indeslere aykırı gözlemler ekledik 91 | 92 | df <- data.frame(x,y) 93 | df 94 | 95 | a <- which(df$x %in% boxplot.stats(df$x)$out) 96 | b <- which(df$y %in% boxplot.stats(df$y)$out) 97 | 98 | #ŞİMDİ AYKIRI GÖZLEMLERİ 3. ÇEYREK DEĞERİ İLE DOLDURUP BASKILAYALIM 99 | summary(df) #summary fonksiyonunun 5. elemanı 3. çeyrek değeri oluyor 100 | summary(df)[5] 101 | #fakat summary yazıyı da (3rd Qu: 0.641) içeriyor 102 | #o yüzden beşli istatistiği direk sayı olarak veren fivenum ı kullanacağız 103 | df[a, ]$x <- fivenum(df$x)[4] 104 | summary(df) 105 | df[a, ]$x 106 | #hepsini 3. çeyrek değeri ile doldurmuşuz 107 | #ama ortalamadan küçük olanları 1. çeyrek, büyük olanları 3. çeyrek ile doldurmak daha doğru 108 | 109 | # aynı işlemi y değişkeni için de yapalım ama 110 | # bu sefer x değişkeni tarafı dolu olduğuna göre y değişkenini tahmin ederek dolduralım 111 | 112 | # AYKIRI GÖZLEMİ TAHMİNLE DOLDURMA 113 | 114 | df[b, ]$y 115 | #tahmin ile doldurmayı eksik gözlemlerle yapabiliyoruz dolayısıyla 116 | #bu aykırı değerleri na ile doldurup sonra tahmin edeceğiz. 117 | df[b, ]$y <- NA 118 | df[a, ]$x 119 | 120 | #tahmin yapabilmek için veriyi genişletelim başka kolonlarla 121 | df <- data.frame(df, z=rnorm(103), t=rnorm(103), k = rnorm(103)) 122 | df 123 | #ŞİMDİ RANDOM FORESTS İLE TAHMİN EDİP DOLDURALIM 124 | library(missForest) 125 | rf_data <- missForest(df) 126 | rf_data <- rf_data$ximp 127 | rf_data[b, ]$y 128 | 129 | df[b, ]$y 130 | 131 | #b,r de knn ile deneyelim doldurmayı 132 | library(DMwR) 133 | knn_data <- knnImputation(df) 134 | knn_data[b, ]$y 135 | 136 | #karşılaştıalım iki algoritmayı 137 | summary(knn_data[b, ]$y) 138 | summary(rf_data[b, ]$y) 139 | 140 | plot(df$y, col="green") 141 | points(rf_data[b, ]$y, col="red", pch="r", cex=0.8) 142 | points(knn_data[b, ]$y, col="blue", pch="k", cex=0.8) 143 | #karar veremedim hangisi iyidir. 144 | 145 | 146 | # LOCAL OUTLİER FACTOR 147 | 148 | #BİR NOKTANIN BULUNDUĞU YERİN YOĞUNLUĞUNUN KOMŞULARIN YOĞUNLUĞU İLE KARŞILAŞTIRILMASI 149 | 150 | df <- iris 151 | str(df) 152 | summary(df) 153 | 154 | #kategporik değişkeni almayacağız, 155 | #çünkü kullanacağımız algoritma sadece numerik değişkenlerle çalışıyor 156 | df <- df[,1:4] 157 | 158 | aykiri_skor <- lofactor(df, k = 5) 159 | 160 | plot(density(aykiri_skor)) 161 | 162 | #şimdi skoru sralayalım 163 | order(aykiri_skor, decreasing = T)[1:5] 164 | #aykırı skor içindeki indeskler bunlar. şimdi bu indekslerdeki değerlere erişelim 165 | 166 | indeksler <- order(aykiri_skor, decreasing = T)[1:5] 167 | df[indeksler, ] 168 | 169 | #AYKIRI GÖZLEMLERİ GÖRSELLEŞTİRMEK 170 | 171 | df <- iris[,1:4] 172 | n <- nrow(df) 173 | etiektler <- 1:n 174 | 175 | aykirilar <- order(aykiri_skor, decreasing = T)[1:5] 176 | etiektler[-aykirilar] <- "." 177 | 178 | biplot(prcomp(df), cex=1, xlabs = etiektler) 179 | 180 | 181 | pch <- rep(".", n) 182 | pch 183 | pch[aykirilar] <- "+" 184 | pch 185 | col <- rep("black", n) 186 | col 187 | col[aykirilar] <- "red" 188 | 189 | pairs(df, pch = pch, col = col) 190 | 191 | #aykırı gözlemleri kümeleme yöntemiyle doldurmak 192 | 193 | df <- iris[,1:4] 194 | k_ort <- kmeans(df, centers = 3) 195 | plot(df, col=k_ort$cluster) 196 | 197 | k_ort$centers #mkümelerin merkez noktalarının değerleri 198 | k_ort$cluster #kümelerin numarası 199 | 200 | merkez_df <- k_ort$centers[k_ort$cluster, ] 201 | uzakliklar <- sqrt(rowSums(df, merkez_df)^2) 202 | 203 | aykirilar <- order(uzakliklar, decreasing = T)[1:10] 204 | print(df[aykirilar, ]) 205 | 206 | plot(df[c("Sepal.Length", "Sepal.Width")], 207 | pch=".", col=k_ort$cluster, 208 | cex=6) 209 | 210 | points(k_ort$centers[, c("Sepal.Length", "Sepal.Width")], 211 | pch=8, col=1:3, 212 | cex=3) 213 | points(df[aykirilar, c("Sepal.Length", "Sepal.Width")], 214 | pch="+", 215 | cex=3, 216 | col="blue" 217 | ) 218 | -------------------------------------------------------------------------------- /datasets/Advertising.csv: -------------------------------------------------------------------------------- 1 | ,TV,radio,newspaper,sales 2 | 1,230.1,37.8,69.2,22.1 3 | 2,44.5,39.3,45.1,10.4 4 | 3,17.2,45.9,69.3,9.3 5 | 4,151.5,41.3,58.5,18.5 6 | 5,180.8,10.8,58.4,12.9 7 | 6,8.7,48.9,75,7.2 8 | 7,57.5,32.8,23.5,11.8 9 | 8,120.2,19.6,11.6,13.2 10 | 9,8.6,2.1,1,4.8 11 | 10,199.8,2.6,21.2,10.6 12 | 11,66.1,5.8,24.2,8.6 13 | 12,214.7,24,4,17.4 14 | 13,23.8,35.1,65.9,9.2 15 | 14,97.5,7.6,7.2,9.7 16 | 15,204.1,32.9,46,19 17 | 16,195.4,47.7,52.9,22.4 18 | 17,67.8,36.6,114,12.5 19 | 18,281.4,39.6,55.8,24.4 20 | 19,69.2,20.5,18.3,11.3 21 | 20,147.3,23.9,19.1,14.6 22 | 21,218.4,27.7,53.4,18 23 | 22,237.4,5.1,23.5,12.5 24 | 23,13.2,15.9,49.6,5.6 25 | 24,228.3,16.9,26.2,15.5 26 | 25,62.3,12.6,18.3,9.7 27 | 26,262.9,3.5,19.5,12 28 | 27,142.9,29.3,12.6,15 29 | 28,240.1,16.7,22.9,15.9 30 | 29,248.8,27.1,22.9,18.9 31 | 30,70.6,16,40.8,10.5 32 | 31,292.9,28.3,43.2,21.4 33 | 32,112.9,17.4,38.6,11.9 34 | 33,97.2,1.5,30,9.6 35 | 34,265.6,20,0.3,17.4 36 | 35,95.7,1.4,7.4,9.5 37 | 36,290.7,4.1,8.5,12.8 38 | 37,266.9,43.8,5,25.4 39 | 38,74.7,49.4,45.7,14.7 40 | 39,43.1,26.7,35.1,10.1 41 | 40,228,37.7,32,21.5 42 | 41,202.5,22.3,31.6,16.6 43 | 42,177,33.4,38.7,17.1 44 | 43,293.6,27.7,1.8,20.7 45 | 44,206.9,8.4,26.4,12.9 46 | 45,25.1,25.7,43.3,8.5 47 | 46,175.1,22.5,31.5,14.9 48 | 47,89.7,9.9,35.7,10.6 49 | 48,239.9,41.5,18.5,23.2 50 | 49,227.2,15.8,49.9,14.8 51 | 50,66.9,11.7,36.8,9.7 52 | 51,199.8,3.1,34.6,11.4 53 | 52,100.4,9.6,3.6,10.7 54 | 53,216.4,41.7,39.6,22.6 55 | 54,182.6,46.2,58.7,21.2 56 | 55,262.7,28.8,15.9,20.2 57 | 56,198.9,49.4,60,23.7 58 | 57,7.3,28.1,41.4,5.5 59 | 58,136.2,19.2,16.6,13.2 60 | 59,210.8,49.6,37.7,23.8 61 | 60,210.7,29.5,9.3,18.4 62 | 61,53.5,2,21.4,8.1 63 | 62,261.3,42.7,54.7,24.2 64 | 63,239.3,15.5,27.3,15.7 65 | 64,102.7,29.6,8.4,14 66 | 65,131.1,42.8,28.9,18 67 | 66,69,9.3,0.9,9.3 68 | 67,31.5,24.6,2.2,9.5 69 | 68,139.3,14.5,10.2,13.4 70 | 69,237.4,27.5,11,18.9 71 | 70,216.8,43.9,27.2,22.3 72 | 71,199.1,30.6,38.7,18.3 73 | 72,109.8,14.3,31.7,12.4 74 | 73,26.8,33,19.3,8.8 75 | 74,129.4,5.7,31.3,11 76 | 75,213.4,24.6,13.1,17 77 | 76,16.9,43.7,89.4,8.7 78 | 77,27.5,1.6,20.7,6.9 79 | 78,120.5,28.5,14.2,14.2 80 | 79,5.4,29.9,9.4,5.3 81 | 80,116,7.7,23.1,11 82 | 81,76.4,26.7,22.3,11.8 83 | 82,239.8,4.1,36.9,12.3 84 | 83,75.3,20.3,32.5,11.3 85 | 84,68.4,44.5,35.6,13.6 86 | 85,213.5,43,33.8,21.7 87 | 86,193.2,18.4,65.7,15.2 88 | 87,76.3,27.5,16,12 89 | 88,110.7,40.6,63.2,16 90 | 89,88.3,25.5,73.4,12.9 91 | 90,109.8,47.8,51.4,16.7 92 | 91,134.3,4.9,9.3,11.2 93 | 92,28.6,1.5,33,7.3 94 | 93,217.7,33.5,59,19.4 95 | 94,250.9,36.5,72.3,22.2 96 | 95,107.4,14,10.9,11.5 97 | 96,163.3,31.6,52.9,16.9 98 | 97,197.6,3.5,5.9,11.7 99 | 98,184.9,21,22,15.5 100 | 99,289.7,42.3,51.2,25.4 101 | 100,135.2,41.7,45.9,17.2 102 | 101,222.4,4.3,49.8,11.7 103 | 102,296.4,36.3,100.9,23.8 104 | 103,280.2,10.1,21.4,14.8 105 | 104,187.9,17.2,17.9,14.7 106 | 105,238.2,34.3,5.3,20.7 107 | 106,137.9,46.4,59,19.2 108 | 107,25,11,29.7,7.2 109 | 108,90.4,0.3,23.2,8.7 110 | 109,13.1,0.4,25.6,5.3 111 | 110,255.4,26.9,5.5,19.8 112 | 111,225.8,8.2,56.5,13.4 113 | 112,241.7,38,23.2,21.8 114 | 113,175.7,15.4,2.4,14.1 115 | 114,209.6,20.6,10.7,15.9 116 | 115,78.2,46.8,34.5,14.6 117 | 116,75.1,35,52.7,12.6 118 | 117,139.2,14.3,25.6,12.2 119 | 118,76.4,0.8,14.8,9.4 120 | 119,125.7,36.9,79.2,15.9 121 | 120,19.4,16,22.3,6.6 122 | 121,141.3,26.8,46.2,15.5 123 | 122,18.8,21.7,50.4,7 124 | 123,224,2.4,15.6,11.6 125 | 124,123.1,34.6,12.4,15.2 126 | 125,229.5,32.3,74.2,19.7 127 | 126,87.2,11.8,25.9,10.6 128 | 127,7.8,38.9,50.6,6.6 129 | 128,80.2,0,9.2,8.8 130 | 129,220.3,49,3.2,24.7 131 | 130,59.6,12,43.1,9.7 132 | 131,0.7,39.6,8.7,1.6 133 | 132,265.2,2.9,43,12.7 134 | 133,8.4,27.2,2.1,5.7 135 | 134,219.8,33.5,45.1,19.6 136 | 135,36.9,38.6,65.6,10.8 137 | 136,48.3,47,8.5,11.6 138 | 137,25.6,39,9.3,9.5 139 | 138,273.7,28.9,59.7,20.8 140 | 139,43,25.9,20.5,9.6 141 | 140,184.9,43.9,1.7,20.7 142 | 141,73.4,17,12.9,10.9 143 | 142,193.7,35.4,75.6,19.2 144 | 143,220.5,33.2,37.9,20.1 145 | 144,104.6,5.7,34.4,10.4 146 | 145,96.2,14.8,38.9,11.4 147 | 146,140.3,1.9,9,10.3 148 | 147,240.1,7.3,8.7,13.2 149 | 148,243.2,49,44.3,25.4 150 | 149,38,40.3,11.9,10.9 151 | 150,44.7,25.8,20.6,10.1 152 | 151,280.7,13.9,37,16.1 153 | 152,121,8.4,48.7,11.6 154 | 153,197.6,23.3,14.2,16.6 155 | 154,171.3,39.7,37.7,19 156 | 155,187.8,21.1,9.5,15.6 157 | 156,4.1,11.6,5.7,3.2 158 | 157,93.9,43.5,50.5,15.3 159 | 158,149.8,1.3,24.3,10.1 160 | 159,11.7,36.9,45.2,7.3 161 | 160,131.7,18.4,34.6,12.9 162 | 161,172.5,18.1,30.7,14.4 163 | 162,85.7,35.8,49.3,13.3 164 | 163,188.4,18.1,25.6,14.9 165 | 164,163.5,36.8,7.4,18 166 | 165,117.2,14.7,5.4,11.9 167 | 166,234.5,3.4,84.8,11.9 168 | 167,17.9,37.6,21.6,8 169 | 168,206.8,5.2,19.4,12.2 170 | 169,215.4,23.6,57.6,17.1 171 | 170,284.3,10.6,6.4,15 172 | 171,50,11.6,18.4,8.4 173 | 172,164.5,20.9,47.4,14.5 174 | 173,19.6,20.1,17,7.6 175 | 174,168.4,7.1,12.8,11.7 176 | 175,222.4,3.4,13.1,11.5 177 | 176,276.9,48.9,41.8,27 178 | 177,248.4,30.2,20.3,20.2 179 | 178,170.2,7.8,35.2,11.7 180 | 179,276.7,2.3,23.7,11.8 181 | 180,165.6,10,17.6,12.6 182 | 181,156.6,2.6,8.3,10.5 183 | 182,218.5,5.4,27.4,12.2 184 | 183,56.2,5.7,29.7,8.7 185 | 184,287.6,43,71.8,26.2 186 | 185,253.8,21.3,30,17.6 187 | 186,205,45.1,19.6,22.6 188 | 187,139.5,2.1,26.6,10.3 189 | 188,191.1,28.7,18.2,17.3 190 | 189,286,13.9,3.7,15.9 191 | 190,18.7,12.1,23.4,6.7 192 | 191,39.5,41.1,5.8,10.8 193 | 192,75.5,10.8,6,9.9 194 | 193,17.2,4.1,31.6,5.9 195 | 194,166.8,42,3.6,19.6 196 | 195,149.7,35.6,6,17.3 197 | 196,38.2,3.7,13.8,7.6 198 | 197,94.2,4.9,8.1,9.7 199 | 198,177,9.3,6.4,12.8 200 | 199,283.6,42,66.2,25.5 201 | 200,232.1,8.6,8.7,13.4 202 | -------------------------------------------------------------------------------- /datasets/cancer.csv: -------------------------------------------------------------------------------- 1 | age,menopause,tumor-size,inv-nodes,node-caps,deg-malig,breast,breast-quad,irradiat,Class 2 | 40-49,premeno,15-19,0-2,yes,3,right,left_up,no,recurrence-events 3 | 50-59,ge40,15-19,0-2,no,1,right,central,no,no-recurrence-events 4 | 50-59,ge40,35-39,0-2,no,2,left,left_low,no,recurrence-events 5 | 40-49,premeno,35-39,0-2,yes,3,right,left_low,yes,no-recurrence-events 6 | 40-49,premeno,30-34,3-5,yes,2,left,right_up,no,recurrence-events 7 | 50-59,premeno,25-29,3-5,no,2,right,left_up,yes,no-recurrence-events 8 | 50-59,ge40,40-44,0-2,no,3,left,left_up,no,no-recurrence-events 9 | 40-49,premeno,10-14,0-2,no,2,left,left_up,no,no-recurrence-events 10 | 40-49,premeno,0-4,0-2,no,2,right,right_low,no,no-recurrence-events 11 | 40-49,ge40,40-44,15-17,yes,2,right,left_up,yes,no-recurrence-events 12 | 50-59,premeno,25-29,0-2,no,2,left,left_low,no,no-recurrence-events 13 | 60-69,ge40,15-19,0-2,no,2,right,left_up,no,no-recurrence-events 14 | 50-59,ge40,30-34,0-2,no,1,right,central,no,no-recurrence-events 15 | 50-59,ge40,25-29,0-2,no,2,right,left_up,no,no-recurrence-events 16 | 40-49,premeno,25-29,0-2,no,2,left,left_low,yes,recurrence-events 17 | 30-39,premeno,20-24,0-2,no,3,left,central,no,no-recurrence-events 18 | 50-59,premeno,10-14,3-5,no,1,right,left_up,no,no-recurrence-events 19 | 60-69,ge40,15-19,0-2,no,2,right,left_up,no,no-recurrence-events 20 | 50-59,premeno,40-44,0-2,no,2,left,left_up,no,no-recurrence-events 21 | 50-59,ge40,20-24,0-2,no,3,left,left_up,no,no-recurrence-events 22 | 50-59,lt40,20-24,0-2,,1,left,left_low,no,recurrence-events 23 | 60-69,ge40,40-44,3-5,no,2,right,left_up,yes,no-recurrence-events 24 | 50-59,ge40,15-19,0-2,no,2,right,left_low,no,no-recurrence-events 25 | 40-49,premeno,10-14,0-2,no,1,right,left_up,no,no-recurrence-events 26 | 30-39,premeno,15-19,6-8,yes,3,left,left_low,yes,recurrence-events 27 | 50-59,ge40,20-24,3-5,yes,2,right,left_up,no,no-recurrence-events 28 | 50-59,ge40,10-14,0-2,no,2,right,left_low,no,no-recurrence-events 29 | 40-49,premeno,10-14,0-2,no,1,right,left_up,no,no-recurrence-events 30 | 60-69,ge40,30-34,3-5,yes,3,left,left_low,no,no-recurrence-events 31 | 40-49,premeno,15-19,15-17,yes,3,left,left_low,no,recurrence-events 32 | 60-69,ge40,30-34,0-2,no,3,right,central,no,recurrence-events 33 | 60-69,ge40,25-29,3-5,,1,right,left_low,yes,no-recurrence-events 34 | 50-59,ge40,25-29,0-2,no,3,left,right_up,no,no-recurrence-events 35 | 50-59,ge40,20-24,0-2,no,3,right,left_up,no,no-recurrence-events 36 | 40-49,premeno,30-34,0-2,no,1,left,left_low,yes,recurrence-events 37 | 30-39,premeno,15-19,0-2,no,1,left,left_low,no,no-recurrence-events 38 | 40-49,premeno,10-14,0-2,no,2,right,left_up,no,no-recurrence-events 39 | 60-69,ge40,45-49,6-8,yes,3,left,central,no,no-recurrence-events 40 | 40-49,ge40,20-24,0-2,no,3,left,left_low,no,no-recurrence-events 41 | 40-49,premeno,10-14,0-2,no,1,right,right_low,no,no-recurrence-events 42 | 30-39,premeno,35-39,0-2,no,3,left,left_low,no,recurrence-events 43 | 40-49,premeno,35-39,9-11,yes,2,right,right_up,yes,no-recurrence-events 44 | 60-69,ge40,25-29,0-2,no,2,right,left_low,no,no-recurrence-events 45 | 50-59,ge40,20-24,3-5,yes,3,right,right_up,no,recurrence-events 46 | 30-39,premeno,15-19,0-2,no,1,left,left_low,no,no-recurrence-events 47 | 50-59,premeno,30-34,0-2,no,3,left,right_up,no,recurrence-events 48 | 60-69,ge40,10-14,0-2,no,2,right,left_up,yes,no-recurrence-events 49 | 40-49,premeno,35-39,0-2,yes,3,right,left_up,yes,no-recurrence-events 50 | 50-59,premeno,50-54,0-2,yes,2,right,left_up,yes,no-recurrence-events 51 | 50-59,ge40,40-44,0-2,no,3,right,left_up,no,no-recurrence-events 52 | 70-79,ge40,15-19,9-11,,1,left,left_low,yes,recurrence-events 53 | 50-59,lt40,30-34,0-2,no,3,right,left_up,no,no-recurrence-events 54 | 40-49,premeno,0-4,0-2,no,3,left,central,no,no-recurrence-events 55 | 70-79,ge40,40-44,0-2,no,1,right,right_up,no,no-recurrence-events 56 | 40-49,premeno,25-29,0-2,,2,left,right_low,yes,no-recurrence-events 57 | 50-59,ge40,25-29,15-17,yes,3,right,left_up,no,no-recurrence-events 58 | 50-59,premeno,20-24,0-2,no,1,left,left_low,no,no-recurrence-events 59 | 50-59,ge40,35-39,15-17,no,3,left,left_low,no,no-recurrence-events 60 | 50-59,ge40,50-54,0-2,no,1,right,right_up,no,no-recurrence-events 61 | 30-39,premeno,0-4,0-2,no,2,right,central,no,recurrence-events 62 | 50-59,ge40,40-44,6-8,yes,3,left,left_low,yes,recurrence-events 63 | 40-49,premeno,30-34,0-2,no,2,right,right_up,yes,no-recurrence-events 64 | 40-49,ge40,20-24,0-2,no,3,left,left_up,no,no-recurrence-events 65 | 40-49,premeno,30-34,15-17,yes,3,left,left_low,no,recurrence-events 66 | 40-49,ge40,20-24,0-2,no,2,right,left_up,no,recurrence-events 67 | 50-59,ge40,15-19,0-2,no,1,right,central,no,no-recurrence-events 68 | 30-39,premeno,25-29,0-2,no,2,right,left_low,no,no-recurrence-events 69 | 60-69,ge40,15-19,0-2,no,2,left,left_low,no,no-recurrence-events 70 | 50-59,premeno,50-54,9-11,yes,2,right,left_up,no,recurrence-events 71 | 30-39,premeno,10-14,0-2,no,1,right,left_low,no,no-recurrence-events 72 | 50-59,premeno,25-29,3-5,yes,3,left,left_low,yes,recurrence-events 73 | 60-69,ge40,25-29,3-5,,1,right,left_up,yes,no-recurrence-events 74 | 60-69,ge40,10-14,0-2,no,1,right,left_low,no,no-recurrence-events 75 | 50-59,ge40,30-34,6-8,yes,3,left,right_low,no,recurrence-events 76 | 30-39,premeno,25-29,6-8,yes,3,left,right_low,yes,recurrence-events 77 | 50-59,ge40,10-14,0-2,no,1,left,left_low,no,no-recurrence-events 78 | 50-59,premeno,15-19,0-2,no,1,left,left_low,no,no-recurrence-events 79 | 40-49,premeno,25-29,0-2,no,2,right,central,no,no-recurrence-events 80 | 40-49,premeno,25-29,0-2,no,3,left,right_up,no,recurrence-events 81 | 60-69,ge40,30-34,6-8,yes,2,right,right_up,no,no-recurrence-events 82 | 50-59,lt40,15-19,0-2,no,2,left,left_low,no,no-recurrence-events 83 | 40-49,premeno,25-29,0-2,no,2,right,left_low,no,no-recurrence-events 84 | 40-49,premeno,30-34,0-2,no,1,right,left_up,no,no-recurrence-events 85 | 60-69,ge40,15-19,0-2,no,2,left,left_up,yes,no-recurrence-events 86 | 30-39,premeno,0-4,0-2,no,2,right,central,no,no-recurrence-events 87 | 50-59,ge40,35-39,0-2,no,3,left,left_up,no,no-recurrence-events 88 | 40-49,premeno,40-44,0-2,no,1,right,left_up,no,no-recurrence-events 89 | 30-39,premeno,25-29,6-8,yes,2,right,left_up,yes,no-recurrence-events 90 | 50-59,ge40,20-24,0-2,no,1,right,left_low,no,no-recurrence-events 91 | 50-59,ge40,30-34,0-2,no,1,left,left_up,no,no-recurrence-events 92 | 60-69,ge40,20-24,0-2,no,1,right,left_up,no,recurrence-events 93 | 30-39,premeno,30-34,3-5,no,3,right,left_up,yes,recurrence-events 94 | 50-59,lt40,20-24,0-2,,1,left,left_up,no,recurrence-events 95 | 50-59,premeno,10-14,0-2,no,2,right,left_up,no,no-recurrence-events 96 | 50-59,ge40,20-24,0-2,no,2,right,left_up,no,no-recurrence-events 97 | 40-49,premeno,45-49,0-2,no,2,left,left_low,yes,no-recurrence-events 98 | 30-39,premeno,40-44,0-2,no,1,left,left_up,no,recurrence-events 99 | 50-59,premeno,10-14,0-2,no,1,left,left_low,no,no-recurrence-events 100 | 60-69,ge40,30-34,0-2,no,3,right,left_up,yes,recurrence-events 101 | 40-49,premeno,35-39,0-2,no,1,right,left_up,no,recurrence-events 102 | 40-49,premeno,20-24,3-5,yes,2,left,left_low,yes,recurrence-events 103 | 50-59,premeno,15-19,0-2,no,2,left,left_low,no,recurrence-events 104 | 50-59,ge40,30-34,0-2,no,3,right,left_low,no,no-recurrence-events 105 | 60-69,ge40,20-24,0-2,no,2,left,left_up,no,no-recurrence-events 106 | 40-49,premeno,20-24,0-2,no,1,left,right_low,no,no-recurrence-events 107 | 60-69,ge40,30-34,3-5,yes,2,left,central,yes,recurrence-events 108 | 60-69,ge40,20-24,3-5,no,2,left,left_low,yes,recurrence-events 109 | 50-59,premeno,25-29,0-2,no,2,left,right_up,no,recurrence-events 110 | 50-59,ge40,30-34,0-2,no,1,right,right_up,no,no-recurrence-events 111 | 40-49,premeno,20-24,0-2,no,2,left,right_low,no,no-recurrence-events 112 | 60-69,ge40,15-19,0-2,no,1,right,left_up,no,no-recurrence-events 113 | 60-69,ge40,30-34,0-2,no,2,left,left_low,yes,no-recurrence-events 114 | 30-39,premeno,30-34,0-2,no,2,left,left_up,no,no-recurrence-events 115 | 30-39,premeno,40-44,3-5,no,3,right,right_up,yes,no-recurrence-events 116 | 60-69,ge40,5-9,0-2,no,1,left,central,no,no-recurrence-events 117 | 60-69,ge40,10-14,0-2,no,1,left,left_up,no,no-recurrence-events 118 | 40-49,premeno,30-34,6-8,yes,3,right,left_up,no,recurrence-events 119 | 60-69,ge40,10-14,0-2,no,1,left,left_up,no,no-recurrence-events 120 | 40-49,premeno,35-39,9-11,yes,2,right,left_up,yes,no-recurrence-events 121 | 40-49,premeno,20-24,0-2,no,1,right,left_low,no,no-recurrence-events 122 | 40-49,premeno,30-34,0-2,yes,3,right,right_up,no,recurrence-events 123 | 50-59,premeno,25-29,0-2,yes,2,left,left_up,no,no-recurrence-events 124 | 40-49,premeno,15-19,0-2,no,2,left,left_low,no,no-recurrence-events 125 | 30-39,premeno,35-39,9-11,yes,3,left,left_low,no,recurrence-events 126 | 30-39,premeno,10-14,0-2,no,2,left,right_low,no,no-recurrence-events 127 | 50-59,ge40,30-34,0-2,no,1,right,left_low,no,no-recurrence-events 128 | 60-69,ge40,30-34,0-2,no,2,left,left_up,no,no-recurrence-events 129 | 60-69,ge40,25-29,0-2,no,2,left,left_low,no,no-recurrence-events 130 | 40-49,premeno,15-19,0-2,no,2,left,left_up,no,recurrence-events 131 | 60-69,ge40,15-19,0-2,no,2,right,left_low,no,no-recurrence-events 132 | 40-49,premeno,30-34,0-2,no,2,left,right_low,no,no-recurrence-events 133 | 20-29,premeno,35-39,0-2,no,2,right,right_up,no,no-recurrence-events 134 | 40-49,premeno,30-34,0-2,no,3,right,right_up,no,recurrence-events 135 | 40-49,premeno,25-29,0-2,no,2,right,left_low,no,recurrence-events 136 | 30-39,premeno,30-34,0-2,no,3,left,left_low,no,no-recurrence-events 137 | 30-39,premeno,15-19,0-2,no,1,right,left_low,no,recurrence-events 138 | 50-59,ge40,0-4,0-2,no,1,right,central,no,no-recurrence-events 139 | 50-59,ge40,0-4,0-2,no,1,left,left_low,no,no-recurrence-events 140 | 60-69,ge40,50-54,0-2,no,3,right,left_up,no,recurrence-events 141 | 50-59,premeno,30-34,0-2,no,1,left,central,no,no-recurrence-events 142 | 60-69,ge40,20-24,24-26,yes,3,left,left_low,yes,recurrence-events 143 | 40-49,premeno,25-29,0-2,no,2,left,left_up,no,no-recurrence-events 144 | 40-49,premeno,30-34,3-5,no,2,right,left_up,no,recurrence-events 145 | 50-59,premeno,20-24,3-5,yes,2,left,left_low,no,no-recurrence-events 146 | 50-59,ge40,15-19,0-2,yes,2,left,central,yes,no-recurrence-events 147 | 50-59,premeno,10-14,0-2,no,3,left,left_low,no,no-recurrence-events 148 | 30-39,premeno,30-34,9-11,no,2,right,left_up,yes,recurrence-events 149 | 60-69,ge40,10-14,0-2,no,1,left,left_low,no,no-recurrence-events 150 | 40-49,premeno,40-44,0-2,no,2,right,left_low,no,no-recurrence-events 151 | 50-59,ge40,30-34,9-11,,3,left,left_up,yes,no-recurrence-events 152 | 40-49,premeno,50-54,0-2,no,2,right,left_low,yes,recurrence-events 153 | 50-59,ge40,15-19,0-2,no,2,right,right_up,no,no-recurrence-events 154 | 50-59,ge40,40-44,3-5,yes,2,left,left_low,no,no-recurrence-events 155 | 30-39,premeno,25-29,3-5,yes,3,left,left_low,yes,recurrence-events 156 | 60-69,ge40,10-14,0-2,no,2,left,left_low,no,no-recurrence-events 157 | 60-69,lt40,10-14,0-2,no,1,left,right_up,no,no-recurrence-events 158 | 30-39,premeno,30-34,0-2,no,2,left,left_up,no,recurrence-events 159 | 30-39,premeno,20-24,3-5,yes,2,left,left_low,no,recurrence-events 160 | 50-59,ge40,10-14,0-2,no,1,right,left_up,no,no-recurrence-events 161 | 60-69,ge40,25-29,0-2,no,3,right,left_up,no,no-recurrence-events 162 | 50-59,ge40,25-29,3-5,yes,3,right,left_up,no,no-recurrence-events 163 | 40-49,premeno,30-34,6-8,no,2,left,left_up,no,no-recurrence-events 164 | 60-69,ge40,50-54,0-2,no,2,left,left_low,no,no-recurrence-events 165 | 50-59,premeno,30-34,0-2,no,3,left,left_low,no,no-recurrence-events 166 | 40-49,ge40,20-24,3-5,no,3,right,left_low,yes,recurrence-events 167 | 50-59,ge40,30-34,6-8,yes,2,left,right_low,yes,recurrence-events 168 | 60-69,ge40,25-29,3-5,no,2,right,right_up,no,recurrence-events 169 | 40-49,premeno,20-24,0-2,no,2,left,central,no,no-recurrence-events 170 | 40-49,premeno,20-24,0-2,no,2,left,left_up,no,no-recurrence-events 171 | 40-49,premeno,50-54,0-2,no,2,left,left_low,no,no-recurrence-events 172 | 50-59,ge40,20-24,0-2,no,2,right,central,no,recurrence-events 173 | 50-59,ge40,30-34,3-5,no,3,right,left_up,no,recurrence-events 174 | 40-49,ge40,25-29,0-2,no,2,left,left_low,no,no-recurrence-events 175 | 50-59,premeno,25-29,0-2,no,1,right,left_up,no,recurrence-events 176 | 40-49,premeno,40-44,3-5,yes,3,right,left_up,yes,no-recurrence-events 177 | 40-49,premeno,20-24,0-2,no,2,right,left_up,no,no-recurrence-events 178 | 40-49,premeno,20-24,3-5,no,2,right,left_up,no,no-recurrence-events 179 | 40-49,premeno,25-29,9-11,yes,3,right,left_up,no,recurrence-events 180 | 40-49,premeno,25-29,0-2,no,2,right,left_low,no,recurrence-events 181 | 40-49,premeno,20-24,0-2,no,1,right,right_up,no,no-recurrence-events 182 | 30-39,premeno,40-44,0-2,no,2,right,right_up,no,no-recurrence-events 183 | 60-69,ge40,10-14,6-8,yes,3,left,left_up,yes,recurrence-events 184 | 40-49,premeno,35-39,0-2,no,1,left,left_low,no,no-recurrence-events 185 | 50-59,ge40,30-34,3-5,no,3,left,left_low,no,recurrence-events 186 | 40-49,premeno,5-9,0-2,no,1,left,left_low,yes,no-recurrence-events 187 | 60-69,ge40,15-19,0-2,no,1,left,right_low,no,no-recurrence-events 188 | 40-49,premeno,30-34,0-2,no,3,right,right_up,no,no-recurrence-events 189 | 40-49,premeno,25-29,0-2,no,3,left,left_up,no,recurrence-events 190 | 50-59,ge40,5-9,0-2,no,2,right,right_up,no,no-recurrence-events 191 | 50-59,premeno,25-29,0-2,no,2,right,right_low,no,no-recurrence-events 192 | 50-59,premeno,25-29,0-2,no,2,left,right_up,no,recurrence-events 193 | 40-49,premeno,10-14,0-2,no,2,left,left_low,yes,no-recurrence-events 194 | 60-69,ge40,35-39,6-8,yes,3,left,left_low,no,recurrence-events 195 | 60-69,ge40,50-54,0-2,no,2,right,left_up,yes,no-recurrence-events 196 | 40-49,premeno,25-29,0-2,no,2,right,left_up,no,no-recurrence-events 197 | 30-39,premeno,20-24,3-5,no,2,right,central,no,no-recurrence-events 198 | 30-39,premeno,30-34,0-2,no,1,right,left_up,no,recurrence-events 199 | 60-69,lt40,30-34,0-2,no,1,left,left_low,no,no-recurrence-events 200 | 40-49,premeno,15-19,12-14,no,3,right,right_low,yes,no-recurrence-events 201 | 60-69,ge40,20-24,0-2,no,3,right,left_low,no,recurrence-events 202 | 30-39,premeno,5-9,0-2,no,2,left,right_low,no,no-recurrence-events 203 | 40-49,premeno,30-34,0-2,no,3,left,left_up,no,no-recurrence-events 204 | 60-69,ge40,30-34,0-2,no,3,left,left_low,no,no-recurrence-events 205 | 40-49,premeno,25-29,0-2,no,1,right,right_low,no,no-recurrence-events 206 | 40-49,premeno,25-29,0-2,no,1,left,right_low,no,no-recurrence-events 207 | 60-69,ge40,40-44,3-5,yes,3,right,left_low,no,recurrence-events 208 | 50-59,ge40,25-29,0-2,no,2,left,left_low,no,no-recurrence-events 209 | 50-59,premeno,30-34,0-2,no,3,right,left_up,yes,recurrence-events 210 | 40-49,ge40,30-34,3-5,no,3,left,left_low,no,recurrence-events 211 | 40-49,premeno,25-29,0-2,no,1,right,left_low,yes,no-recurrence-events 212 | 40-49,ge40,25-29,12-14,yes,3,left,right_low,yes,recurrence-events 213 | 40-49,premeno,40-44,0-2,no,1,left,left_low,no,recurrence-events 214 | 40-49,premeno,20-24,0-2,no,2,left,left_low,no,no-recurrence-events 215 | 50-59,ge40,25-29,0-2,no,1,left,right_low,no,no-recurrence-events 216 | 40-49,premeno,20-24,0-2,no,2,right,left_up,no,no-recurrence-events 217 | 70-79,ge40,40-44,0-2,no,1,right,left_up,no,no-recurrence-events 218 | 60-69,ge40,25-29,0-2,no,3,left,left_up,no,recurrence-events 219 | 50-59,premeno,25-29,0-2,no,2,left,left_low,no,no-recurrence-events 220 | 60-69,ge40,45-49,0-2,no,1,right,right_up,yes,recurrence-events 221 | 50-59,ge40,20-24,0-2,yes,2,right,left_up,no,no-recurrence-events 222 | 50-59,ge40,25-29,0-2,no,1,left,left_low,no,no-recurrence-events 223 | 50-59,ge40,20-24,0-2,no,3,left,left_up,no,no-recurrence-events 224 | 40-49,premeno,20-24,3-5,no,2,right,left_low,no,no-recurrence-events 225 | 50-59,ge40,35-39,0-2,no,2,left,left_up,no,no-recurrence-events 226 | 30-39,premeno,20-24,0-2,no,3,left,left_up,yes,recurrence-events 227 | 60-69,ge40,30-34,0-2,no,1,right,left_up,no,no-recurrence-events 228 | 60-69,ge40,25-29,0-2,no,3,right,left_low,no,no-recurrence-events 229 | 40-49,ge40,30-34,0-2,no,2,left,left_up,yes,no-recurrence-events 230 | 30-39,premeno,25-29,0-2,no,2,left,left_low,no,no-recurrence-events 231 | 40-49,premeno,20-24,0-2,no,2,left,left_low,no,recurrence-events 232 | 30-39,premeno,20-24,0-2,no,2,left,right_low,no,no-recurrence-events 233 | 40-49,premeno,10-14,0-2,no,2,right,left_low,no,no-recurrence-events 234 | 50-59,premeno,15-19,0-2,no,2,right,right_low,no,no-recurrence-events 235 | 50-59,premeno,25-29,0-2,no,1,right,left_up,no,no-recurrence-events 236 | 60-69,ge40,20-24,0-2,no,2,right,left_up,no,no-recurrence-events 237 | 60-69,ge40,40-44,0-2,no,2,right,left_low,no,recurrence-events 238 | 30-39,lt40,15-19,0-2,no,3,right,left_up,no,no-recurrence-events 239 | 40-49,premeno,30-34,12-14,yes,3,left,left_up,yes,recurrence-events 240 | 60-69,ge40,30-34,0-2,yes,2,right,right_up,yes,recurrence-events 241 | 50-59,ge40,40-44,6-8,yes,3,left,left_low,yes,recurrence-events 242 | 50-59,ge40,30-34,0-2,no,3,left,,no,recurrence-events 243 | 70-79,ge40,10-14,0-2,no,2,left,central,no,no-recurrence-events 244 | 30-39,premeno,40-44,0-2,no,2,left,left_low,yes,no-recurrence-events 245 | 40-49,premeno,30-34,0-2,no,2,right,right_low,no,no-recurrence-events 246 | 40-49,premeno,30-34,0-2,no,1,left,left_low,no,no-recurrence-events 247 | 60-69,ge40,15-19,0-2,no,2,left,left_low,no,no-recurrence-events 248 | 40-49,premeno,10-14,0-2,no,2,left,left_low,no,no-recurrence-events 249 | 60-69,ge40,20-24,0-2,no,1,left,left_low,no,no-recurrence-events 250 | 50-59,ge40,10-14,0-2,no,1,left,left_up,no,no-recurrence-events 251 | 50-59,premeno,25-29,0-2,no,1,left,left_low,no,no-recurrence-events 252 | 50-59,ge40,30-34,9-11,yes,3,left,right_low,yes,recurrence-events 253 | 50-59,ge40,10-14,0-2,no,2,left,left_low,no,no-recurrence-events 254 | 40-49,premeno,30-34,0-2,no,1,left,right_up,no,no-recurrence-events 255 | 70-79,ge40,0-4,0-2,no,1,left,right_low,no,no-recurrence-events 256 | 40-49,premeno,25-29,0-2,no,3,right,left_up,yes,no-recurrence-events 257 | 50-59,premeno,25-29,0-2,no,3,right,left_low,yes,recurrence-events 258 | 50-59,ge40,40-44,0-2,no,2,left,left_low,no,no-recurrence-events 259 | 60-69,ge40,25-29,0-2,no,3,left,right_low,yes,recurrence-events 260 | 40-49,premeno,30-34,3-5,yes,2,right,left_low,no,no-recurrence-events 261 | 50-59,ge40,20-24,0-2,no,2,left,left_up,no,recurrence-events 262 | 70-79,ge40,20-24,0-2,no,3,left,left_up,no,no-recurrence-events 263 | 30-39,premeno,25-29,0-2,no,1,left,central,no,no-recurrence-events 264 | 60-69,ge40,30-34,0-2,no,2,left,left_low,no,no-recurrence-events 265 | 40-49,premeno,20-24,3-5,yes,2,right,right_up,yes,recurrence-events 266 | 50-59,ge40,30-34,9-11,,3,left,left_low,yes,no-recurrence-events 267 | 50-59,ge40,0-4,0-2,no,2,left,central,no,no-recurrence-events 268 | 40-49,premeno,20-24,0-2,no,3,right,left_low,yes,no-recurrence-events 269 | 30-39,premeno,35-39,0-2,no,3,left,left_low,no,recurrence-events 270 | 60-69,ge40,30-34,0-2,no,1,left,left_up,no,no-recurrence-events 271 | 60-69,ge40,20-24,0-2,no,1,left,left_low,no,no-recurrence-events 272 | 50-59,ge40,25-29,6-8,no,3,left,left_low,yes,recurrence-events 273 | 50-59,premeno,35-39,15-17,yes,3,right,right_up,no,recurrence-events 274 | 30-39,premeno,20-24,3-5,yes,2,right,left_up,yes,no-recurrence-events 275 | 40-49,premeno,20-24,6-8,no,2,right,left_low,yes,no-recurrence-events 276 | 50-59,ge40,35-39,0-2,no,3,left,left_low,no,no-recurrence-events 277 | 50-59,premeno,35-39,0-2,no,2,right,left_up,no,no-recurrence-events 278 | 40-49,premeno,25-29,0-2,no,2,left,left_up,yes,no-recurrence-events 279 | 40-49,premeno,35-39,0-2,no,2,right,right_up,no,no-recurrence-events 280 | 50-59,premeno,30-34,3-5,yes,2,left,left_low,yes,no-recurrence-events 281 | 40-49,premeno,20-24,0-2,no,2,right,right_up,no,no-recurrence-events 282 | 60-69,ge40,15-19,0-2,no,3,right,left_up,yes,no-recurrence-events 283 | 50-59,ge40,30-34,6-8,yes,2,left,left_low,no,no-recurrence-events 284 | 50-59,premeno,25-29,3-5,yes,2,left,left_low,yes,no-recurrence-events 285 | 30-39,premeno,30-34,6-8,yes,2,right,right_up,no,no-recurrence-events 286 | 50-59,premeno,15-19,0-2,no,2,right,left_low,no,no-recurrence-events 287 | 50-59,ge40,40-44,0-2,no,3,left,right_up,no,no-recurrence-events 288 | -------------------------------------------------------------------------------- /datasets/cancer2.csv: -------------------------------------------------------------------------------- 1 | "","inst","time","status","age","sex","ph.ecog","ph.karno","pat.karno","meal.cal","wt.loss" 2 | "1",3,306,2,74,1,1,90,100,1175,NA 3 | "2",3,455,2,68,1,0,90,90,1225,15 4 | "3",3,1010,1,56,1,0,90,90,NA,15 5 | "4",5,210,2,57,1,1,90,60,1150,11 6 | "5",1,883,2,60,1,0,100,90,NA,0 7 | "6",12,1022,1,74,1,1,50,80,513,0 8 | "7",7,310,2,68,2,2,70,60,384,10 9 | "8",11,361,2,71,2,2,60,80,538,1 10 | "9",1,218,2,53,1,1,70,80,825,16 11 | "10",7,166,2,61,1,2,70,70,271,34 12 | "11",6,170,2,57,1,1,80,80,1025,27 13 | "12",16,654,2,68,2,2,70,70,NA,23 14 | "13",11,728,2,68,2,1,90,90,NA,5 15 | "14",21,71,2,60,1,NA,60,70,1225,32 16 | "15",12,567,2,57,1,1,80,70,2600,60 17 | "16",1,144,2,67,1,1,80,90,NA,15 18 | "17",22,613,2,70,1,1,90,100,1150,-5 19 | "18",16,707,2,63,1,2,50,70,1025,22 20 | "19",1,61,2,56,2,2,60,60,238,10 21 | "20",21,88,2,57,1,1,90,80,1175,NA 22 | "21",11,301,2,67,1,1,80,80,1025,17 23 | "22",6,81,2,49,2,0,100,70,1175,-8 24 | "23",11,624,2,50,1,1,70,80,NA,16 25 | "24",15,371,2,58,1,0,90,100,975,13 26 | "25",12,394,2,72,1,0,90,80,NA,0 27 | "26",12,520,2,70,2,1,90,80,825,6 28 | "27",4,574,2,60,1,0,100,100,1025,-13 29 | "28",13,118,2,70,1,3,60,70,1075,20 30 | "29",13,390,2,53,1,1,80,70,875,-7 31 | "30",1,12,2,74,1,2,70,50,305,20 32 | "31",12,473,2,69,2,1,90,90,1025,-1 33 | "32",1,26,2,73,1,2,60,70,388,20 34 | "33",7,533,2,48,1,2,60,80,NA,-11 35 | "34",16,107,2,60,2,2,50,60,925,-15 36 | "35",12,53,2,61,1,2,70,100,1075,10 37 | "36",1,122,2,62,2,2,50,50,1025,NA 38 | "37",22,814,2,65,1,2,70,60,513,28 39 | "38",15,965,1,66,2,1,70,90,875,4 40 | "39",1,93,2,74,1,2,50,40,1225,24 41 | "40",1,731,2,64,2,1,80,100,1175,15 42 | "41",5,460,2,70,1,1,80,60,975,10 43 | "42",11,153,2,73,2,2,60,70,1075,11 44 | "43",10,433,2,59,2,0,90,90,363,27 45 | "44",12,145,2,60,2,2,70,60,NA,NA 46 | "45",7,583,2,68,1,1,60,70,1025,7 47 | "46",7,95,2,76,2,2,60,60,625,-24 48 | "47",1,303,2,74,1,0,90,70,463,30 49 | "48",3,519,2,63,1,1,80,70,1025,10 50 | "49",13,643,2,74,1,0,90,90,1425,2 51 | "50",22,765,2,50,2,1,90,100,1175,4 52 | "51",3,735,2,72,2,1,90,90,NA,9 53 | "52",12,189,2,63,1,0,80,70,NA,0 54 | "53",21,53,2,68,1,0,90,100,1025,0 55 | "54",1,246,2,58,1,0,100,90,1175,7 56 | "55",6,689,2,59,1,1,90,80,1300,15 57 | "56",1,65,2,62,1,0,90,80,725,NA 58 | "57",5,5,2,65,2,0,100,80,338,5 59 | "58",22,132,2,57,1,2,70,60,NA,18 60 | "59",3,687,2,58,2,1,80,80,1225,10 61 | "60",1,345,2,64,2,1,90,80,1075,-3 62 | "61",22,444,2,75,2,2,70,70,438,8 63 | "62",12,223,2,48,1,1,90,80,1300,68 64 | "63",21,175,2,73,1,1,80,100,1025,NA 65 | "64",11,60,2,65,2,1,90,80,1025,0 66 | "65",3,163,2,69,1,1,80,60,1125,0 67 | "66",3,65,2,68,1,2,70,50,825,8 68 | "67",16,208,2,67,2,2,70,NA,538,2 69 | "68",5,821,1,64,2,0,90,70,1025,3 70 | "69",22,428,2,68,1,0,100,80,1039,0 71 | "70",6,230,2,67,1,1,80,100,488,23 72 | "71",13,840,1,63,1,0,90,90,1175,-1 73 | "72",3,305,2,48,2,1,80,90,538,29 74 | "73",5,11,2,74,1,2,70,100,1175,0 75 | "74",2,132,2,40,1,1,80,80,NA,3 76 | "75",21,226,2,53,2,1,90,80,825,3 77 | "76",12,426,2,71,2,1,90,90,1075,19 78 | "77",1,705,2,51,2,0,100,80,1300,0 79 | "78",6,363,2,56,2,1,80,70,1225,-2 80 | "79",3,11,2,81,1,0,90,NA,731,15 81 | "80",1,176,2,73,1,0,90,70,169,30 82 | "81",4,791,2,59,1,0,100,80,768,5 83 | "82",13,95,2,55,1,1,70,90,1500,15 84 | "83",11,196,1,42,1,1,80,80,1425,8 85 | "84",21,167,2,44,2,1,80,90,588,-1 86 | "85",16,806,1,44,1,1,80,80,1025,1 87 | "86",6,284,2,71,1,1,80,90,1100,14 88 | "87",22,641,2,62,2,1,80,80,1150,1 89 | "88",21,147,2,61,1,0,100,90,1175,4 90 | "89",13,740,1,44,2,1,90,80,588,39 91 | "90",1,163,2,72,1,2,70,70,910,2 92 | "91",11,655,2,63,1,0,100,90,975,-1 93 | "92",22,239,2,70,1,1,80,100,NA,23 94 | "93",5,88,2,66,1,1,90,80,875,8 95 | "94",10,245,2,57,2,1,80,60,280,14 96 | "95",1,588,1,69,2,0,100,90,NA,13 97 | "96",12,30,2,72,1,2,80,60,288,7 98 | "97",3,179,2,69,1,1,80,80,NA,25 99 | "98",12,310,2,71,1,1,90,100,NA,0 100 | "99",11,477,2,64,1,1,90,100,910,0 101 | "100",3,166,2,70,2,0,90,70,NA,10 102 | "101",1,559,1,58,2,0,100,100,710,15 103 | "102",6,450,2,69,2,1,80,90,1175,3 104 | "103",13,364,2,56,1,1,70,80,NA,4 105 | "104",6,107,2,63,1,1,90,70,NA,0 106 | "105",13,177,2,59,1,2,50,NA,NA,32 107 | "106",12,156,2,66,1,1,80,90,875,14 108 | "107",26,529,1,54,2,1,80,100,975,-3 109 | "108",1,11,2,67,1,1,90,90,925,NA 110 | "109",21,429,2,55,1,1,100,80,975,5 111 | "110",3,351,2,75,2,2,60,50,925,11 112 | "111",13,15,2,69,1,0,90,70,575,10 113 | "112",1,181,2,44,1,1,80,90,1175,5 114 | "113",10,283,2,80,1,1,80,100,1030,6 115 | "114",3,201,2,75,2,0,90,100,NA,1 116 | "115",6,524,2,54,2,1,80,100,NA,15 117 | "116",1,13,2,76,1,2,70,70,413,20 118 | "117",3,212,2,49,1,2,70,60,675,20 119 | "118",1,524,2,68,1,2,60,70,1300,30 120 | "119",16,288,2,66,1,2,70,60,613,24 121 | "120",15,363,2,80,1,1,80,90,346,11 122 | "121",22,442,2,75,1,0,90,90,NA,0 123 | "122",26,199,2,60,2,2,70,80,675,10 124 | "123",3,550,2,69,2,1,70,80,910,0 125 | "124",11,54,2,72,1,2,60,60,768,-3 126 | "125",1,558,2,70,1,0,90,90,1025,17 127 | "126",22,207,2,66,1,1,80,80,925,20 128 | "127",7,92,2,50,1,1,80,60,1075,13 129 | "128",12,60,2,64,1,1,80,90,993,0 130 | "129",16,551,1,77,2,2,80,60,750,28 131 | "130",12,543,1,48,2,0,90,60,NA,4 132 | "131",4,293,2,59,2,1,80,80,925,52 133 | "132",16,202,2,53,1,1,80,80,NA,20 134 | "133",6,353,2,47,1,0,100,90,1225,5 135 | "134",13,511,1,55,2,1,80,70,NA,49 136 | "135",1,267,2,67,1,0,90,70,313,6 137 | "136",22,511,1,74,2,2,60,40,96,37 138 | "137",12,371,2,58,2,1,80,70,NA,0 139 | "138",13,387,2,56,1,2,80,60,1075,NA 140 | "139",1,457,2,54,1,1,90,90,975,-5 141 | "140",5,337,2,56,1,0,100,100,1500,15 142 | "141",21,201,2,73,2,2,70,60,1225,-16 143 | "142",3,404,1,74,1,1,80,70,413,38 144 | "143",26,222,2,76,1,2,70,70,1500,8 145 | "144",1,62,2,65,2,1,80,90,1075,0 146 | "145",11,458,1,57,1,1,80,100,513,30 147 | "146",26,356,1,53,2,1,90,90,NA,2 148 | "147",16,353,2,71,1,0,100,80,775,2 149 | "148",16,163,2,54,1,1,90,80,1225,13 150 | "149",12,31,2,82,1,0,100,90,413,27 151 | "150",13,340,2,59,2,0,100,90,NA,0 152 | "151",13,229,2,70,1,1,70,60,1175,-2 153 | "152",22,444,1,60,1,0,90,100,NA,7 154 | "153",5,315,1,62,2,0,90,90,NA,0 155 | "154",16,182,2,53,2,1,80,60,NA,4 156 | "155",32,156,2,55,1,2,70,30,1025,10 157 | "156",NA,329,2,69,1,2,70,80,713,20 158 | "157",26,364,1,68,2,1,90,90,NA,7 159 | "158",4,291,2,62,1,2,70,60,475,27 160 | "159",12,179,2,63,1,1,80,70,538,-2 161 | "160",1,376,1,56,2,1,80,90,825,17 162 | "161",32,384,1,62,2,0,90,90,588,8 163 | "162",10,268,2,44,2,1,90,100,2450,2 164 | "163",11,292,1,69,1,2,60,70,2450,36 165 | "164",6,142,2,63,1,1,90,80,875,2 166 | "165",7,413,1,64,1,1,80,70,413,16 167 | "166",16,266,1,57,2,0,90,90,1075,3 168 | "167",11,194,2,60,2,1,80,60,NA,33 169 | "168",21,320,2,46,1,0,100,100,860,4 170 | "169",6,181,2,61,1,1,90,90,730,0 171 | "170",12,285,2,65,1,0,100,90,1025,0 172 | "171",13,301,1,61,1,1,90,100,825,2 173 | "172",2,348,2,58,2,0,90,80,1225,10 174 | "173",2,197,2,56,1,1,90,60,768,37 175 | "174",16,382,1,43,2,0,100,90,338,6 176 | "175",1,303,1,53,1,1,90,80,1225,12 177 | "176",13,296,1,59,2,1,80,100,1025,0 178 | "177",1,180,2,56,1,2,60,80,1225,-2 179 | "178",13,186,2,55,2,1,80,70,NA,NA 180 | "179",1,145,2,53,2,1,80,90,588,13 181 | "180",7,269,1,74,2,0,100,100,588,0 182 | "181",13,300,1,60,1,0,100,100,975,5 183 | "182",1,284,1,39,1,0,100,90,1225,-5 184 | "183",16,350,2,66,2,0,90,100,1025,NA 185 | "184",32,272,1,65,2,1,80,90,NA,-1 186 | "185",12,292,1,51,2,0,90,80,1225,0 187 | "186",12,332,1,45,2,0,90,100,975,5 188 | "187",2,285,2,72,2,2,70,90,463,20 189 | "188",3,259,1,58,1,0,90,80,1300,8 190 | "189",15,110,2,64,1,1,80,60,1025,12 191 | "190",22,286,2,53,1,0,90,90,1225,8 192 | "191",16,270,2,72,1,1,80,90,488,14 193 | "192",16,81,2,52,1,2,60,70,1075,NA 194 | "193",12,131,2,50,1,1,90,80,513,NA 195 | "194",1,225,1,64,1,1,90,80,825,33 196 | "195",22,269,2,71,1,1,90,90,1300,-2 197 | "196",12,225,1,70,1,0,100,100,1175,6 198 | "197",32,243,1,63,2,1,80,90,825,0 199 | "198",21,279,1,64,1,1,90,90,NA,4 200 | "199",1,276,1,52,2,0,100,80,975,0 201 | "200",32,135,2,60,1,1,90,70,1275,0 202 | "201",15,79,2,64,2,1,90,90,488,37 203 | "202",22,59,2,73,1,1,60,60,2200,5 204 | "203",32,240,1,63,2,0,90,100,1025,0 205 | "204",3,202,1,50,2,0,100,100,635,1 206 | "205",26,235,1,63,2,0,100,90,413,0 207 | "206",33,105,2,62,1,2,NA,70,NA,NA 208 | "207",5,224,1,55,2,0,80,90,NA,23 209 | "208",13,239,2,50,2,2,60,60,1025,-3 210 | "209",21,237,1,69,1,1,80,70,NA,NA 211 | "210",33,173,1,59,2,1,90,80,NA,10 212 | "211",1,252,1,60,2,0,100,90,488,-2 213 | "212",6,221,1,67,1,1,80,70,413,23 214 | "213",15,185,1,69,1,1,90,70,1075,0 215 | "214",11,92,1,64,2,2,70,100,NA,31 216 | "215",11,13,2,65,1,1,80,90,NA,10 217 | "216",11,222,1,65,1,1,90,70,1025,18 218 | "217",13,192,1,41,2,1,90,80,NA,-10 219 | "218",21,183,2,76,1,2,80,60,825,7 220 | "219",11,211,1,70,2,2,70,30,131,3 221 | "220",2,175,1,57,2,0,80,80,725,11 222 | "221",22,197,1,67,1,1,80,90,1500,2 223 | "222",11,203,1,71,2,1,80,90,1025,0 224 | "223",1,116,2,76,1,1,80,80,NA,0 225 | "224",1,188,1,77,1,1,80,60,NA,3 226 | "225",13,191,1,39,1,0,90,90,2350,-5 227 | "226",32,105,1,75,2,2,60,70,1025,5 228 | "227",6,174,1,66,1,1,90,100,1075,1 229 | "228",22,177,1,58,2,1,80,90,1060,0 230 | -------------------------------------------------------------------------------- /datasets/house-prices-advanced-regression-techniques/data_description.txt: -------------------------------------------------------------------------------- 1 | MSSubClass: Identifies the type of dwelling involved in the sale. 2 | 3 | 20 1-STORY 1946 & NEWER ALL STYLES 4 | 30 1-STORY 1945 & OLDER 5 | 40 1-STORY W/FINISHED ATTIC ALL AGES 6 | 45 1-1/2 STORY - UNFINISHED ALL AGES 7 | 50 1-1/2 STORY FINISHED ALL AGES 8 | 60 2-STORY 1946 & NEWER 9 | 70 2-STORY 1945 & OLDER 10 | 75 2-1/2 STORY ALL AGES 11 | 80 SPLIT OR MULTI-LEVEL 12 | 85 SPLIT FOYER 13 | 90 DUPLEX - ALL STYLES AND AGES 14 | 120 1-STORY PUD (Planned Unit Development) - 1946 & NEWER 15 | 150 1-1/2 STORY PUD - ALL AGES 16 | 160 2-STORY PUD - 1946 & NEWER 17 | 180 PUD - MULTILEVEL - INCL SPLIT LEV/FOYER 18 | 190 2 FAMILY CONVERSION - ALL STYLES AND AGES 19 | 20 | MSZoning: Identifies the general zoning classification of the sale. 21 | 22 | A Agriculture 23 | C Commercial 24 | FV Floating Village Residential 25 | I Industrial 26 | RH Residential High Density 27 | RL Residential Low Density 28 | RP Residential Low Density Park 29 | RM Residential Medium Density 30 | 31 | LotFrontage: Linear feet of street connected to property 32 | 33 | LotArea: Lot size in square feet 34 | 35 | Street: Type of road access to property 36 | 37 | Grvl Gravel 38 | Pave Paved 39 | 40 | Alley: Type of alley access to property 41 | 42 | Grvl Gravel 43 | Pave Paved 44 | NA No alley access 45 | 46 | LotShape: General shape of property 47 | 48 | Reg Regular 49 | IR1 Slightly irregular 50 | IR2 Moderately Irregular 51 | IR3 Irregular 52 | 53 | LandContour: Flatness of the property 54 | 55 | Lvl Near Flat/Level 56 | Bnk Banked - Quick and significant rise from street grade to building 57 | HLS Hillside - Significant slope from side to side 58 | Low Depression 59 | 60 | Utilities: Type of utilities available 61 | 62 | AllPub All public Utilities (E,G,W,& S) 63 | NoSewr Electricity, Gas, and Water (Septic Tank) 64 | NoSeWa Electricity and Gas Only 65 | ELO Electricity only 66 | 67 | LotConfig: Lot configuration 68 | 69 | Inside Inside lot 70 | Corner Corner lot 71 | CulDSac Cul-de-sac 72 | FR2 Frontage on 2 sides of property 73 | FR3 Frontage on 3 sides of property 74 | 75 | LandSlope: Slope of property 76 | 77 | Gtl Gentle slope 78 | Mod Moderate Slope 79 | Sev Severe Slope 80 | 81 | Neighborhood: Physical locations within Ames city limits 82 | 83 | Blmngtn Bloomington Heights 84 | Blueste Bluestem 85 | BrDale Briardale 86 | BrkSide Brookside 87 | ClearCr Clear Creek 88 | CollgCr College Creek 89 | Crawfor Crawford 90 | Edwards Edwards 91 | Gilbert Gilbert 92 | IDOTRR Iowa DOT and Rail Road 93 | MeadowV Meadow Village 94 | Mitchel Mitchell 95 | Names North Ames 96 | NoRidge Northridge 97 | NPkVill Northpark Villa 98 | NridgHt Northridge Heights 99 | NWAmes Northwest Ames 100 | OldTown Old Town 101 | SWISU South & West of Iowa State University 102 | Sawyer Sawyer 103 | SawyerW Sawyer West 104 | Somerst Somerset 105 | StoneBr Stone Brook 106 | Timber Timberland 107 | Veenker Veenker 108 | 109 | Condition1: Proximity to various conditions 110 | 111 | Artery Adjacent to arterial street 112 | Feedr Adjacent to feeder street 113 | Norm Normal 114 | RRNn Within 200' of North-South Railroad 115 | RRAn Adjacent to North-South Railroad 116 | PosN Near positive off-site feature--park, greenbelt, etc. 117 | PosA Adjacent to postive off-site feature 118 | RRNe Within 200' of East-West Railroad 119 | RRAe Adjacent to East-West Railroad 120 | 121 | Condition2: Proximity to various conditions (if more than one is present) 122 | 123 | Artery Adjacent to arterial street 124 | Feedr Adjacent to feeder street 125 | Norm Normal 126 | RRNn Within 200' of North-South Railroad 127 | RRAn Adjacent to North-South Railroad 128 | PosN Near positive off-site feature--park, greenbelt, etc. 129 | PosA Adjacent to postive off-site feature 130 | RRNe Within 200' of East-West Railroad 131 | RRAe Adjacent to East-West Railroad 132 | 133 | BldgType: Type of dwelling 134 | 135 | 1Fam Single-family Detached 136 | 2FmCon Two-family Conversion; originally built as one-family dwelling 137 | Duplx Duplex 138 | TwnhsE Townhouse End Unit 139 | TwnhsI Townhouse Inside Unit 140 | 141 | HouseStyle: Style of dwelling 142 | 143 | 1Story One story 144 | 1.5Fin One and one-half story: 2nd level finished 145 | 1.5Unf One and one-half story: 2nd level unfinished 146 | 2Story Two story 147 | 2.5Fin Two and one-half story: 2nd level finished 148 | 2.5Unf Two and one-half story: 2nd level unfinished 149 | SFoyer Split Foyer 150 | SLvl Split Level 151 | 152 | OverallQual: Rates the overall material and finish of the house 153 | 154 | 10 Very Excellent 155 | 9 Excellent 156 | 8 Very Good 157 | 7 Good 158 | 6 Above Average 159 | 5 Average 160 | 4 Below Average 161 | 3 Fair 162 | 2 Poor 163 | 1 Very Poor 164 | 165 | OverallCond: Rates the overall condition of the house 166 | 167 | 10 Very Excellent 168 | 9 Excellent 169 | 8 Very Good 170 | 7 Good 171 | 6 Above Average 172 | 5 Average 173 | 4 Below Average 174 | 3 Fair 175 | 2 Poor 176 | 1 Very Poor 177 | 178 | YearBuilt: Original construction date 179 | 180 | YearRemodAdd: Remodel date (same as construction date if no remodeling or additions) 181 | 182 | RoofStyle: Type of roof 183 | 184 | Flat Flat 185 | Gable Gable 186 | Gambrel Gabrel (Barn) 187 | Hip Hip 188 | Mansard Mansard 189 | Shed Shed 190 | 191 | RoofMatl: Roof material 192 | 193 | ClyTile Clay or Tile 194 | CompShg Standard (Composite) Shingle 195 | Membran Membrane 196 | Metal Metal 197 | Roll Roll 198 | Tar&Grv Gravel & Tar 199 | WdShake Wood Shakes 200 | WdShngl Wood Shingles 201 | 202 | Exterior1st: Exterior covering on house 203 | 204 | AsbShng Asbestos Shingles 205 | AsphShn Asphalt Shingles 206 | BrkComm Brick Common 207 | BrkFace Brick Face 208 | CBlock Cinder Block 209 | CemntBd Cement Board 210 | HdBoard Hard Board 211 | ImStucc Imitation Stucco 212 | MetalSd Metal Siding 213 | Other Other 214 | Plywood Plywood 215 | PreCast PreCast 216 | Stone Stone 217 | Stucco Stucco 218 | VinylSd Vinyl Siding 219 | Wd Sdng Wood Siding 220 | WdShing Wood Shingles 221 | 222 | Exterior2nd: Exterior covering on house (if more than one material) 223 | 224 | AsbShng Asbestos Shingles 225 | AsphShn Asphalt Shingles 226 | BrkComm Brick Common 227 | BrkFace Brick Face 228 | CBlock Cinder Block 229 | CemntBd Cement Board 230 | HdBoard Hard Board 231 | ImStucc Imitation Stucco 232 | MetalSd Metal Siding 233 | Other Other 234 | Plywood Plywood 235 | PreCast PreCast 236 | Stone Stone 237 | Stucco Stucco 238 | VinylSd Vinyl Siding 239 | Wd Sdng Wood Siding 240 | WdShing Wood Shingles 241 | 242 | MasVnrType: Masonry veneer type 243 | 244 | BrkCmn Brick Common 245 | BrkFace Brick Face 246 | CBlock Cinder Block 247 | None None 248 | Stone Stone 249 | 250 | MasVnrArea: Masonry veneer area in square feet 251 | 252 | ExterQual: Evaluates the quality of the material on the exterior 253 | 254 | Ex Excellent 255 | Gd Good 256 | TA Average/Typical 257 | Fa Fair 258 | Po Poor 259 | 260 | ExterCond: Evaluates the present condition of the material on the exterior 261 | 262 | Ex Excellent 263 | Gd Good 264 | TA Average/Typical 265 | Fa Fair 266 | Po Poor 267 | 268 | Foundation: Type of foundation 269 | 270 | BrkTil Brick & Tile 271 | CBlock Cinder Block 272 | PConc Poured Contrete 273 | Slab Slab 274 | Stone Stone 275 | Wood Wood 276 | 277 | BsmtQual: Evaluates the height of the basement 278 | 279 | Ex Excellent (100+ inches) 280 | Gd Good (90-99 inches) 281 | TA Typical (80-89 inches) 282 | Fa Fair (70-79 inches) 283 | Po Poor (<70 inches 284 | NA No Basement 285 | 286 | BsmtCond: Evaluates the general condition of the basement 287 | 288 | Ex Excellent 289 | Gd Good 290 | TA Typical - slight dampness allowed 291 | Fa Fair - dampness or some cracking or settling 292 | Po Poor - Severe cracking, settling, or wetness 293 | NA No Basement 294 | 295 | BsmtExposure: Refers to walkout or garden level walls 296 | 297 | Gd Good Exposure 298 | Av Average Exposure (split levels or foyers typically score average or above) 299 | Mn Mimimum Exposure 300 | No No Exposure 301 | NA No Basement 302 | 303 | BsmtFinType1: Rating of basement finished area 304 | 305 | GLQ Good Living Quarters 306 | ALQ Average Living Quarters 307 | BLQ Below Average Living Quarters 308 | Rec Average Rec Room 309 | LwQ Low Quality 310 | Unf Unfinshed 311 | NA No Basement 312 | 313 | BsmtFinSF1: Type 1 finished square feet 314 | 315 | BsmtFinType2: Rating of basement finished area (if multiple types) 316 | 317 | GLQ Good Living Quarters 318 | ALQ Average Living Quarters 319 | BLQ Below Average Living Quarters 320 | Rec Average Rec Room 321 | LwQ Low Quality 322 | Unf Unfinshed 323 | NA No Basement 324 | 325 | BsmtFinSF2: Type 2 finished square feet 326 | 327 | BsmtUnfSF: Unfinished square feet of basement area 328 | 329 | TotalBsmtSF: Total square feet of basement area 330 | 331 | Heating: Type of heating 332 | 333 | Floor Floor Furnace 334 | GasA Gas forced warm air furnace 335 | GasW Gas hot water or steam heat 336 | Grav Gravity furnace 337 | OthW Hot water or steam heat other than gas 338 | Wall Wall furnace 339 | 340 | HeatingQC: Heating quality and condition 341 | 342 | Ex Excellent 343 | Gd Good 344 | TA Average/Typical 345 | Fa Fair 346 | Po Poor 347 | 348 | CentralAir: Central air conditioning 349 | 350 | N No 351 | Y Yes 352 | 353 | Electrical: Electrical system 354 | 355 | SBrkr Standard Circuit Breakers & Romex 356 | FuseA Fuse Box over 60 AMP and all Romex wiring (Average) 357 | FuseF 60 AMP Fuse Box and mostly Romex wiring (Fair) 358 | FuseP 60 AMP Fuse Box and mostly knob & tube wiring (poor) 359 | Mix Mixed 360 | 361 | 1stFlrSF: First Floor square feet 362 | 363 | 2ndFlrSF: Second floor square feet 364 | 365 | LowQualFinSF: Low quality finished square feet (all floors) 366 | 367 | GrLivArea: Above grade (ground) living area square feet 368 | 369 | BsmtFullBath: Basement full bathrooms 370 | 371 | BsmtHalfBath: Basement half bathrooms 372 | 373 | FullBath: Full bathrooms above grade 374 | 375 | HalfBath: Half baths above grade 376 | 377 | Bedroom: Bedrooms above grade (does NOT include basement bedrooms) 378 | 379 | Kitchen: Kitchens above grade 380 | 381 | KitchenQual: Kitchen quality 382 | 383 | Ex Excellent 384 | Gd Good 385 | TA Typical/Average 386 | Fa Fair 387 | Po Poor 388 | 389 | TotRmsAbvGrd: Total rooms above grade (does not include bathrooms) 390 | 391 | Functional: Home functionality (Assume typical unless deductions are warranted) 392 | 393 | Typ Typical Functionality 394 | Min1 Minor Deductions 1 395 | Min2 Minor Deductions 2 396 | Mod Moderate Deductions 397 | Maj1 Major Deductions 1 398 | Maj2 Major Deductions 2 399 | Sev Severely Damaged 400 | Sal Salvage only 401 | 402 | Fireplaces: Number of fireplaces 403 | 404 | FireplaceQu: Fireplace quality 405 | 406 | Ex Excellent - Exceptional Masonry Fireplace 407 | Gd Good - Masonry Fireplace in main level 408 | TA Average - Prefabricated Fireplace in main living area or Masonry Fireplace in basement 409 | Fa Fair - Prefabricated Fireplace in basement 410 | Po Poor - Ben Franklin Stove 411 | NA No Fireplace 412 | 413 | GarageType: Garage location 414 | 415 | 2Types More than one type of garage 416 | Attchd Attached to home 417 | Basment Basement Garage 418 | BuiltIn Built-In (Garage part of house - typically has room above garage) 419 | CarPort Car Port 420 | Detchd Detached from home 421 | NA No Garage 422 | 423 | GarageYrBlt: Year garage was built 424 | 425 | GarageFinish: Interior finish of the garage 426 | 427 | Fin Finished 428 | RFn Rough Finished 429 | Unf Unfinished 430 | NA No Garage 431 | 432 | GarageCars: Size of garage in car capacity 433 | 434 | GarageArea: Size of garage in square feet 435 | 436 | GarageQual: Garage quality 437 | 438 | Ex Excellent 439 | Gd Good 440 | TA Typical/Average 441 | Fa Fair 442 | Po Poor 443 | NA No Garage 444 | 445 | GarageCond: Garage condition 446 | 447 | Ex Excellent 448 | Gd Good 449 | TA Typical/Average 450 | Fa Fair 451 | Po Poor 452 | NA No Garage 453 | 454 | PavedDrive: Paved driveway 455 | 456 | Y Paved 457 | P Partial Pavement 458 | N Dirt/Gravel 459 | 460 | WoodDeckSF: Wood deck area in square feet 461 | 462 | OpenPorchSF: Open porch area in square feet 463 | 464 | EnclosedPorch: Enclosed porch area in square feet 465 | 466 | 3SsnPorch: Three season porch area in square feet 467 | 468 | ScreenPorch: Screen porch area in square feet 469 | 470 | PoolArea: Pool area in square feet 471 | 472 | PoolQC: Pool quality 473 | 474 | Ex Excellent 475 | Gd Good 476 | TA Average/Typical 477 | Fa Fair 478 | NA No Pool 479 | 480 | Fence: Fence quality 481 | 482 | GdPrv Good Privacy 483 | MnPrv Minimum Privacy 484 | GdWo Good Wood 485 | MnWw Minimum Wood/Wire 486 | NA No Fence 487 | 488 | MiscFeature: Miscellaneous feature not covered in other categories 489 | 490 | Elev Elevator 491 | Gar2 2nd Garage (if not described in garage section) 492 | Othr Other 493 | Shed Shed (over 100 SF) 494 | TenC Tennis Court 495 | NA None 496 | 497 | MiscVal: $Value of miscellaneous feature 498 | 499 | MoSold: Month Sold (MM) 500 | 501 | YrSold: Year Sold (YYYY) 502 | 503 | SaleType: Type of sale 504 | 505 | WD Warranty Deed - Conventional 506 | CWD Warranty Deed - Cash 507 | VWD Warranty Deed - VA Loan 508 | New Home just constructed and sold 509 | COD Court Officer Deed/Estate 510 | Con Contract 15% Down payment regular terms 511 | ConLw Contract Low Down payment and low interest 512 | ConLI Contract Low Interest 513 | ConLD Contract Low Down 514 | Oth Other 515 | 516 | SaleCondition: Condition of sale 517 | 518 | Normal Normal Sale 519 | Abnorml Abnormal Sale - trade, foreclosure, short sale 520 | AdjLand Adjoining Land Purchase 521 | Alloca Allocation - two linked properties with separate deeds, typically condo with a garage unit 522 | Family Sale between family members 523 | Partial Home was not completed when last assessed (associated with New Homes) 524 | -------------------------------------------------------------------------------- /datasets/veri.csv: -------------------------------------------------------------------------------- 1 | School,Women,Men,Gap 2 | MIT,94,152,58 3 | Stanford,96,151,55 4 | Harvard,112,165,53 5 | U.Penn,92,141,49 6 | Princeton,90,137,47 7 | Chicago,78,118,40 8 | Georgetown,94,131,37 9 | Tufts,76,112,36 10 | Yale,79,114,35 11 | Columbia,86,119,33 12 | Duke,93,124,31 13 | Dartmouth,84,114,30 14 | NYU,67,94,27 15 | Notre Dame,73,100,27 16 | Cornell,80,107,27 17 | Michigan,62,84,22 18 | Brown,72,92,20 19 | Berkeley,71,88,17 20 | Emory,68,82,14 21 | UCLA,64,78,14 22 | SoCal,72,81,9 -------------------------------------------------------------------------------- /grafiklerle_kesifci_veri_analizi.R: -------------------------------------------------------------------------------- 1 | library(ggplot2) 2 | library(tidyverse) 3 | 4 | #ggplot içindeki diamond verisetini kullanalım 5 | veri <- diamonds 6 | glimpse(diamonds) 7 | 8 | #ggplot'un katmanlı yapısını bilmek grafikleri nasıl çizdiğimizi anlamayı kolaylaştırır. 9 | 10 | # Bar Grafikleri 11 | ggplot(veri, aes(cut, fill = color)) + 12 | geom_bar(position = position_dodge2()) + 13 | ggtitle("Diamond Dataset") + 14 | xlab("Elmas Kalitesi") + 15 | ylab("Gözlenme Sıklığı") 16 | 17 | #HİSTOGRAM VE YOĞUNLUK GRAFİKLERİ 18 | #Hangi fiyat aralığında kaç elmas var acaba? 19 | ggplot(veri, aes(price)) + geom_histogram(color = "green", binwidth = 1000) 20 | 21 | #Peki yoğunluk grafiği istersek nasıl olacak? 22 | colors() 23 | ggplot(veri, aes(price)) + geom_density(color = "violetred4") 24 | 25 | #hem yoğunluk hem histogram istersek 26 | ggplot(veri, aes(price)) + 27 | geom_histogram(aes(y = ..density..), color = "green", binwidth = 1000) + 28 | geom_density(color = "magenta", 29 | fill = "blue", 30 | alpha = 0.2) 31 | 32 | #biraz daha net anlaşılması için; 33 | ggplot(veri, aes(price)) + 34 | geom_histogram(color = "green", binwidth = 1000) + 35 | #az önceki gibi fill=color (bar grafikteydi) yerine şöyle de yapabiliriz. 36 | facet_grid(cut ~ .) 37 | #facet_grid ekleyince her bir kategorinin yoğunluğu ayrı ama aynı ölçekte görülebilir. 38 | 39 | 40 | 41 | #İNTERAKTİF HİSTOGRAM 42 | #Plotly kütüphanesi python da olduğu gibi r için de kullanılabilir. 43 | install.packages("plotly") 44 | library(plotly) 45 | 46 | plot_ly(x = rnorm(500), 47 | type = "histogram", 48 | color = "red") 49 | 50 | 51 | 52 | #plotly ile pipe kullanılarak üst üste grafikler çizilebilir!!! 53 | # r notebook veya markdown kullanılırken plotly son derece güzel durur bence 54 | g <- 55 | plot_ly( 56 | x = rnbinom(500, 50, 0.9), 57 | type = "histogram", 58 | name = "binom1", 59 | opacity = 0.5 60 | ) %>% 61 | add_trace(x = rbinom(500, 50, 0.2), 62 | color = "red", 63 | name = "binom2") %>% 64 | add_trace(x = c(1:25, 2), 65 | type = "scatter", 66 | name = "noktalar") %>% 67 | layout(barmode = "overlay") 68 | g 69 | 70 | 71 | #DAĞILIM-ÇOKLU FREKANS 72 | ggplot(diamonds, aes(x = price, y = ..density..)) + 73 | geom_freqpoly(aes(colour = cut), bindwith = 500) 74 | 75 | #Yoğunluk grafiği ile aynı hemen hemen 76 | ggplot(diamonds, aes(x = price, y = ..density..)) + 77 | geom_density(aes(colour = cut)) 78 | 79 | #BOXPLOT (DAĞILIM GRAFİĞİ) 80 | ggplot(diamonds, aes(x = cut, y = price, fill = cut)) + 81 | geom_boxplot() 82 | #bir sürekli değişkenin bir kategorik değişken ayrımına göre boxplot grafiği 83 | 84 | 85 | #VIOLIN DAĞILIM GRAFİĞİ 86 | ggplot(diamonds, aes(x = cut, y = price, fill = cut)) + 87 | geom_violin(aes(alpha(0.7))) 88 | 89 | # KORELASYONLAR İÇİN GRAFİKLEŞTİRME 90 | 91 | #scatterplot 92 | 93 | df <- iris 94 | glimpse(iris) 95 | ggplot(iris, aes(x = Sepal.Length, y = Sepal.Width)) + 96 | geom_point( 97 | size = 2, 98 | shape = 21, 99 | stroke = 1, 100 | color = "black", 101 | fill = "green" 102 | ) + 103 | #korelasyonu görmek için line ekliyoruz. 104 | geom_smooth(method = lm, color = "red", se = T) 105 | 106 | # Türüne göre her grubu ayrı göstermek istersek: 107 | ggplot(iris, 108 | aes( 109 | x = Sepal.Length, 110 | y = Sepal.Width, 111 | color = Species, 112 | shape = Species 113 | )) + 114 | geom_point(size = 2) 115 | 116 | #farklı bir özelliğe göre şöyle de yapılabilir. 117 | ggplot(iris, 118 | aes( 119 | x = Sepal.Length, 120 | y = Sepal.Width, 121 | color = Petal.Length, 122 | size = Petal.Length 123 | )) + 124 | geom_point(size = 2) 125 | 126 | ggplot(iris, 127 | aes( 128 | x = Sepal.Length, 129 | y = Sepal.Width, 130 | color = Petal.Length, 131 | size = Petal.Length 132 | )) + 133 | geom_point(size = 2, alpha = 0.6) 134 | 135 | # SCATTERPLOT - BİRİMLERİ GRAFİĞE EKLEMEK 136 | 137 | df <- mtcars 138 | glimpse(df) 139 | ggplot(df, aes(x = wt, y = mpg, fill = cyl)) + 140 | geom_point() + 141 | geom_label( 142 | label = row.names(df), 143 | nudge_x = 0.25, 144 | nudge_y = 0.25, 145 | check_overlap = T 146 | ) + 147 | geom_smooth(method = lm, se = F, color = "red") 148 | 149 | 150 | # Yukarıda çok fazla şeyi aynı anda grafikleştirdik 151 | #eğer daha fazla grafik üst üste eklemek istersek nasıl olacak? 152 | # bunun için ggextra kütüphanesinden ggMarginal fonksiyonunu kullanabiliriz! 153 | #install.packages("ggExtra") 154 | library(ggExtra) 155 | g <- ggplot(df, aes(x = wt, y = mpg, fill = cyl)) + 156 | geom_point() + 157 | geom_label( 158 | label = row.names(df), 159 | nudge_x = 0.25, 160 | nudge_y = 0.25, 161 | ) + 162 | geom_smooth(method = lm, se = F, color = "red") 163 | 164 | # birinci argüman ilk grafik, ikincisi ise eksenler için hangi tipte olacağı 165 | ggMarginal(g, type = "his") 166 | ggMarginal(g, type = "boxplot", color="yellow4") 167 | # “density”, “histogram”, “boxplot”, “violin” olarak tip belirlenebilir. 168 | 169 | # ISI HARİTASI VEYA HEATMAP OLUŞTURMAK 170 | veriseti <- mtcars 171 | veriseti <- as.matrix(veriseti) 172 | heatmap(veriseti) 173 | #böyle birşey anlaşılmıyor ama kolon bazlı gösterilirse daha düzgün olur. 174 | heatmap(veriseti, scale = "column") 175 | #dendogramları devredışı bırakmak için 176 | heatmap(veriseti, scale = "column", Colv = NA, Rowv = NA) 177 | 178 | 179 | #KORELASYON MATRİSLERİ 180 | install.packages("GGally") 181 | library(GGally) 182 | 183 | df <- mtcars[, c(1, 3:6)] 184 | glimpse(df) 185 | cor(df) 186 | cor.test(df$mpg, df$disp) 187 | plot(df) 188 | 189 | #korelasyon şiddetini daha iyi görebilmek için ggplot içinden 190 | ggcorr(df) 191 | ggpairs(df) 192 | 193 | 194 | # ZAMAN SERİSİ GRAFİKLEŞTİRME 195 | 196 | df <- economics 197 | glimpse(df) 198 | #tarihin date şeklinde olmasına dikkat edilmeli, değilse dönüştürülmeli 199 | 200 | ggplot(df, aes(x = date, y = pop)) + 201 | geom_line(aes(size=unemploy/pop), color="blue") #işsizlik oranına göre çizgikalınlığı 202 | 203 | 204 | #başka bir değişkene bakalım 205 | ggplot(df, aes(x = date, y = psavert)) + 206 | geom_line(color="red") + #çizgi grafiği çizildi zaman göre 207 | stat_smooth(color="blue") # çizgi grafiği ekleyip ortalamayı çizer 208 | 209 | 210 | # TREEMAP GRAFİĞİ 211 | 212 | install.packages("treemap") 213 | library(treemap) 214 | 215 | veri <- data.frame( 216 | gruplar = c("grup_1", "grup_2", "grup_3"), 217 | degerler = c(10, 60, 40) 218 | ) 219 | veri 220 | 221 | treemap(veri, index = "gruplar", vSize = "degerler", type = "index") 222 | 223 | # treemap ile alt gruplar oluşturma 224 | 225 | 226 | 227 | 228 | 229 | 230 | 231 | 232 | 233 | 234 | 235 | 236 | 237 | 238 | 239 | -------------------------------------------------------------------------------- /hiyerarşik_kümeleme.R: -------------------------------------------------------------------------------- 1 | library(tidyverse) 2 | library(cluster) #kumeleme 3 | library(factoextra) #gorsel 4 | library(dplyr) 5 | library(funModeling) 6 | library(ggplot2) 7 | library(ggExtra) 8 | library(GGally) 9 | 10 | df <- USArrests 11 | apply(df, 2, var) 12 | #varyanslar çok yüksek olduğu için standartlaştırma işlemi yapmamız gerekiyor. 13 | df <- scale(df) 14 | #uzaklık metrikleri oluşturalım 15 | d <- dist(df, diag = TRUE) 16 | 17 | #birleştirici kümeleme yöntemi için hclust, bölümleyici kümeleme için 18 | 19 | hc1 <- hclust(d, method = "complete") 20 | plot(hc1) 21 | 22 | hc2 <- agnes(df, method = "complete") 23 | hc2$ac # method = "complete" parametresinin başarısını veren katsayıdır. 24 | # fakat başka metodlar da var ve bunlardan hangisinin en iyi sonucu verdiğini 25 | # görmek istersek bütün methodların başarısını aşağıdaki gibi bulabliriz. 26 | 27 | #kullanabileceğimiz methodlardan oluşan bir vektör oluşturalım 28 | 29 | m = c("average", "complete", "single", "ward") 30 | names(m) <- c("average", "complete", "single", "ward") 31 | 32 | ac <- function(x) { 33 | agnes(df, method = x)$ac 34 | } 35 | 36 | sapply(m, ac) 37 | " 38 | gördük ki ward methodu en iyi sonucu verdi ve son dendogramı buna göre oluşturalım 39 | " 40 | 41 | hc3 <- agnes(df, method = "ward") 42 | hc3 43 | pltree(hc3) 44 | 45 | #şimdi bölümleyici kümeleme yöntemine bakalım 46 | hc4 <- diana(df) 47 | hc4 48 | hc4$dc 49 | pltree(hc4) 50 | 51 | den <- hclust(d, method = "ward.D2") 52 | alt_grup <- cutree(den, k = 3) 53 | table(alt_grup) 54 | pltree(alt_grup) 55 | 56 | USArrests %>% mutate(cluster = alt_grup) %>% filter(cluster==1) %>% select(Murder) 57 | 58 | plot(den) 59 | rect.hclust(den, k = 4, border="blue") 60 | rect.hclust(den, k = 3, border="red") 61 | rect.hclust(den, k = 2, border="green") 62 | 63 | fviz_cluster(list(data=df, cluster=alt_grup)) 64 | 65 | install.packages("dendextend") 66 | library(dendextend) 67 | df <- USArrests 68 | df <- scale(df) 69 | 70 | dd <- dist(df) 71 | bir <- hclust(dd, method = "ward.D2") 72 | iki <- hclust(dd, method = "complete") 73 | 74 | d1 <- as.dendrogram(bir) 75 | d2 <- as.dendrogram(iki) 76 | 77 | tanglegram(d1, d2) 78 | 79 | # optimum küme sayısının belirlenmesi 80 | fviz_nbclust(x = df, FUNcluster = hcut, method = "wss") 81 | fviz_nbclust(x = df, FUNcluster = hcut, method = "silhouette") 82 | fviz_nbclust(x = df, FUNcluster = hcut, method = "gap") 83 | #biz bu grseller ve incelemeler sonucunda 3 sınıflı yapı oluşturmaya karar verdik 84 | 85 | son = hclust(dd, method = "ward.D") 86 | alt_grup = cutree(son, k = 3) 87 | fviz_cluster(data = df, show.clust.cent = T, object = son) 88 | 89 | USArrests %>% 90 | mutate(cluster=alt_grup) 91 | 92 | new_df <- USArrests %>% 93 | mutate(cluster=alt_grup)%>% 94 | group_by(cluster)%>% 95 | 96 | new_df 97 | 98 | par(mfrow=c(1,2)) 99 | barplot(height = new_df$Murder, names.arg = new_df$cluster, 100 | col = 1:3, main = "Eyalet Gruplarının \nCinayet Oranları") 101 | barplot(height = new_df$Assault, names.arg = new_df$cluster, 102 | col = 1:3, main = "Eyalet Gruplarının \nSaldırı Oranları") 103 | barplot(height = new_df$Rape, names.arg = new_df$cluster, 104 | col = 1:3, main = "Eyalet Gruplarının \nTecavüz Oranları") 105 | barplot(height = new_df$UrbanPop, names.arg = new_df$cluster, 106 | col = 1:3, main = "Eyalet Gruplarının \nNüfusları") 107 | 108 | 109 | isimli <- data.frame(grup=alt_grup, isim=rownames(USArrests)) 110 | 111 | Eyalet_ismi <- rownames(USArrests) 112 | 113 | 114 | 115 | 116 | -------------------------------------------------------------------------------- /logistic-regression.R: -------------------------------------------------------------------------------- 1 | #install.packages("ISLR") 2 | library(ISLR) 3 | #install.packages("tidyverse") 4 | library(tidyverse) 5 | #install.packages("funModeling") 6 | library(funModeling) 7 | #install.packages("caret") 8 | library(caret) 9 | #install.packages("pROC") 10 | library(pROC) 11 | #install.packages("class") 12 | library(class)#knn icin 13 | #install.packages("e1071") 14 | library(e1071)#knn icin 15 | #install.packages("kernlab") 16 | library(kernlab) #svm icin 17 | #install.packages("ROCR") 18 | library(ROCR) #roc icin 19 | #install.packages("neuralnet") 20 | library(neuralnet) 21 | #install.packages("GGally") 22 | library(GGally) 23 | #install.packages("nnet") 24 | library(nnet) 25 | #install.packages("rpart") 26 | library(rpart) 27 | #install.packages("cli") 28 | library(cli) 29 | #install.packages("tree") 30 | library(tree) 31 | #install.packages("rpart.plot") 32 | library(rpart.plot) 33 | #install.packages("randomForest") 34 | library(randomForest) 35 | #install.packages("gbm") 36 | library(gbm) 37 | #install.packages("xgboost") 38 | library(xgboost) 39 | #install.packages("DiagrammeR") 40 | library(DiagrammeR) 41 | #install.packages("mlbench") 42 | library(mlbench) 43 | 44 | rm(list = ls()) 45 | 46 | #default veriseti temerrüde düşmüş kredileri gösteriyor. bağımlı değişken default değişkeni. 47 | df <- Default 48 | head(df) 49 | train <- df[1:8000,] 50 | test <- df[8001:10000,] 51 | 52 | train_y <- train["default"] 53 | test_y <- test["default"] 54 | 55 | train_x <- train %>% dplyr::select(-default) 56 | test_x <- test %>% dplyr::select(-default) 57 | 58 | # model kurma 59 | 60 | #lineer model 61 | model_lm <- lm(as.numeric(default)-1 ~ balance, data = train) 62 | summary(model_lm) 63 | 64 | summary(model_lm$fitted.values) 65 | plot(as.numeric(default)-1 ~ balance, data = train, 66 | col = "turquoise4", 67 | pch = "I", 68 | ylim = c(-0.2,1.2) 69 | ) 70 | abline(h = 0, lty=2) 71 | abline(h=1, lty=2) 72 | abline(h=0.5, lty=2, col="black") 73 | abline(model_lm, lwd=3, col="darkorange", cex=0.01) 74 | 75 | 76 | # logistic regression modeli 77 | 78 | model_glm <- glm(as.numeric(default)-1 ~ balance, data = train, family = "binomial") 79 | 80 | summary(model_glm) 81 | 82 | curve(predict(model_glm, data.frame(balance=x), type="response"), add = T, 83 | lwd=3, col="red") 84 | 85 | options(scipen = 9) 86 | 87 | model_glm_pred <- ifelse(predict(model_glm, type="response") > 0.5, "Yes", "No") 88 | head(model_glm_pred) 89 | summary(model_glm_pred) 90 | summary(train) 91 | 92 | 93 | class_error <- function(gercek, tahmin) { 94 | return(data.frame(sin_hatasi = mean(gercek != tahmin), dogruluk = 1-mean(gercek != tahmin))) 95 | } 96 | 97 | degerler <- class_error(train$default, model_glm_pred) 98 | degerler$sin_hatasi 99 | degerler$dogruluk 100 | 101 | tahmin <- table(gercek=train$default, tahmin=model_glm_pred) 102 | tahmin 103 | 104 | 105 | confusionMatrix(tahmin, positive = "Yes") 106 | #positive sınıfın doğru belirtilmesi son derece önemli. aksi takdirde sonuçlar patlar. 107 | 108 | mdoel_glm <- glm(as.numeric(default)-1 ~ ., data = train, family = "binomial") 109 | test_ol <- predict(model_glm,test_x, type = "response") 110 | 111 | roc(test_y$default~test_ol, plot=TRUE, print.auc=TRUE) 112 | #nesne olarak kaydedilip içinden değerler de okunabilir. 113 | 114 | # model tuning 115 | attributes(trainControl()) 116 | ctrl <- trainControl(method = "cv", number = 10, 117 | summaryFunction = twoClassSummary, 118 | savePredictions = TRUE, 119 | classProbs = TRUE 120 | ) 121 | glm_tune <- caret::train(train_x, train_y$default, 122 | method="glm", 123 | trControl=ctrl) 124 | 125 | glm_tune$pred$Yes 126 | 127 | defaultSummary(data.frame(obs = test_y$default, 128 | pred = predict(glm_tune, test_x) 129 | ) 130 | ) 131 | train_hata <- confusionMatrix(data = predict(glm_tune, train_x), 132 | reference = train_y$default, 133 | positive = "Yes") 134 | 135 | 136 | test_hata <- confusionMatrix(data = predict(glm_tune, test_x), 137 | reference = test_y$default, 138 | positive = "Yes") 139 | train_hata 140 | test_hata 141 | 142 | roc(glm_tune$pred$obs, 143 | glm_tune$pred$Yes, 144 | levels = rev(levels(glm_tune$pred$obs)), 145 | plot = T, 146 | print.auc = T) 147 | 148 | 149 | -------------------------------------------------------------------------------- /metin_madenciligi.R: -------------------------------------------------------------------------------- 1 | library(tidyverse) 2 | 3 | # Kullanacağımız kitap sherlock holmes 4 | # Adresi: http://www.gutenberg.org/ebooks/1661 5 | 6 | sherlock <- readLines("sherlock.txt") 7 | 8 | save(sherlock, file = "sherlock.rda") #dosyayı dizine kaydetme. 9 | rm(sherlock) 10 | load(file = "sherlock.rda") 11 | head(sherlock) 12 | length(sherlock) 13 | tail(sherlock) 14 | 15 | sherlock <- sherlock[-(1:61)] 16 | #bu indeks düştükten sonra geriye kalanlardan bakıp sondan gereksiz olanları çıkaralım 17 | sherlock <- sherlock[-(12621:12992)] 18 | 19 | head(sherlock) 20 | 21 | sherlock <- paste(sherlock, collapse = " ") 22 | A <- strsplit(sherlock, ">>") 23 | A <- unlist(A) 24 | A <- A[-1] 25 | 26 | install.packages("tm") 27 | library(tm) 28 | class(A) 29 | dokuman_vektoru <- VectorSource(A) 30 | class(dokuman_vektoru) 31 | attributes(dokuman_vektoru) 32 | dokuman_derlem <- VCorpus(dokuman_vektoru) 33 | class(dokuman_derlem) 34 | attributes(dokuman_derlem) 35 | 36 | #harfleri küçültme 37 | dokuman_derlem <- tm_map(dokuman_derlem, content_transformer(tolower)) 38 | #noktalama işaretlerinin silinmesi 39 | dokuman_derlem <- tm_map(dokuman_derlem, content_transformer(removePunctuation)) 40 | #sayıları kaldırma 41 | dokuman_derlem <- tm_map(dokuman_derlem, content_transformer(removeNumbers)) 42 | dokuman_derlem <- tm_map(dokuman_derlem, removeWords, stopwords("english")) 43 | 44 | # stemming (kelime köklerine inme işlemi) 45 | 46 | install.packages("SnowballC") 47 | library(SnowballC) 48 | dokuman_derlem <- tm_map(dokuman_derlem, stemDocument) 49 | dokuman_derlem <- tm_map(dokuman_derlem, stripWhitespace) 50 | 51 | #terim belge matrisi oluşturma 52 | 53 | tdm <- TermDocumentMatrix(dokuman_derlem) 54 | inspect(tdm[1:4,1:12]) 55 | tdm$nrow 56 | tdm$ncol 57 | tdm$dimnames$Docs 58 | #buradaki isimleri hikaye başlıkları yapalım ranlar yerine 59 | # sınıflandırma bölümünde lazım olacak 60 | tdm$dimnames$Docs <- c( 61 | "I. A Scandal in Bohemia", 62 | "II. The Red-headed League", 63 | "III. A Case of Identity", 64 | "IV. The Boscombe Valley Mystery", 65 | "V. The Five Orange Pips", 66 | "VI. The Man with the Twisted Lip", 67 | "VII. The Adventure of the Blue Carbuncle", 68 | "VIII. The Adventure of the Speckled Band", 69 | "IX. The Adventure of the Engineer's Thumb", 70 | "X. The Adventure of the Noble Bachelor", 71 | "XI. The Adventure of the Beryl Coronet", 72 | "XII. The Adventure of the Copper Beeches" 73 | ) 74 | tdm$dimnames$Docs 75 | 76 | # şimdi bu metinde en az 100 defa geçen kelimeleri bulalım 77 | findFreqTerms(tdm, lowfreq = 100) 78 | 79 | #kelimeleri ilişkilendirmye yarayan bir fınksiyonumuz var tm kütüphanesinde 80 | # şimdi watsonla ilgili kelimelere bakalım, belki watson'ın karakteri hakkında bilgi verir. 81 | findAssocs(tdm, "watson", corlimit = 0.80) 82 | #corlimit, korelasyon oranıdır. 83 | #şimdi ev sahibi olan hudson ile ilgili kelimeleri bulalım 84 | findAssocs(tdm, "hudson", corlimit = 0.85) 85 | #birlikte arama da yapabiliriz. 86 | 87 | findAssocs(tdm, c("love","women", "think"), corlimit = c(0.80, 0.8, 0.85)) 88 | 89 | sum(tdm[1, 1:10]) 90 | inspect(tdm[1, 1:10]) 91 | 92 | 93 | #şimdi tdm matrisinin seyreklğini ortadan kaldırarak daha sonraki hesaplamaları kolaylaştıralım 94 | tdm_seyrek <- removeSparseTerms(tdm, 0.1) 95 | tdm 96 | tdm_seyrek 97 | # seyreklik görüleceği üzere %75'den %3'e düştü 98 | #kelimelerin ne kadar azaldığına ise şöyle bakabiliriz. 99 | length(tdm$dimnames$Terms) 100 | length(tdm_seyrek$dimnames$Terms) 101 | 102 | #ama en fazla geçen kelimeler kalıyor metinde. şöyle görebiliriz. 103 | length(findFreqTerms(tdm, lowfreq = 100)) 104 | length(findFreqTerms(tdm_seyrek, lowfreq = 100)) 105 | #gördüğümüz gibi 100 'den fazla geçen kelimelerin sayısı aynı 106 | 107 | length(findFreqTerms(tdm, lowfreq = 10)) 108 | length(findFreqTerms(tdm_seyrek, lowfreq = 10)) 109 | #ama 10'dan fazla geçen kelimelerin sayısı 1007'den 329 a düşmüş 110 | 111 | 112 | # METİNLERDE VERİ GÖRSELLEŞTİRME 113 | matris <- as.matrix(tdm_seyrek) 114 | 115 | frekanslar <- rowSums(matris) 116 | head(frekanslar) 117 | isimler <- rownames(matris) 118 | head(isimler) 119 | frekanslar["watson"] 120 | frekanslar["sherlock"] 121 | hist(frekanslar, col = "blue") 122 | frekanslar2 <- frekanslar[frekanslar>100] 123 | barplot(frekanslar2) 124 | 125 | # kelime blutu oluşturma 126 | install.packages("wordcloud") 127 | install.packages("wordcloud2") 128 | install.packages("RColorBrewer") 129 | library(wordcloud2) 130 | library(RColorBrewer) 131 | library(wordcloud) 132 | wordcloud(rownames(matris), rowSums(matris)) 133 | 134 | #daha güzel olması için 135 | palet <- brewer.pal(9, "BuGn")[-c(1:4)] 136 | veri <- data.frame(frekanslar = rowSums(matris)) 137 | veri <- data.frame(words=rownames(veri), frekans=veri$frekanslar) 138 | wordcloud2(data = veri, rotateRatio = 1) 139 | 140 | # ISI HARİTASI OLUŞTURMA 141 | install.packages("slam") 142 | install.packages("reshape2") 143 | library(slam) 144 | library(reshape2) 145 | tdm_yogunluk <- melt(matris, value.name = "count") 146 | library(ggplot2) 147 | 148 | 149 | #seyreklik matris igüzel görünsün diye sayıyı azaltalım 150 | yogunluk2 <- removeSparseTerms(tdm, 0.001) 151 | yogunluk2 <- as.matrix(yogunluk2) 152 | isimler <- subset(rowSums(yogunluk2), rowSums(yogunluk2)>200) 153 | isimler <- names(isimler) 154 | matris <- matris[c(isimler), ] 155 | tdm_yogunluk2 <- melt(matris, value.name = "count") 156 | 157 | ggplot(tdm_yogunluk2, aes(Docs, Terms, fill=log10(count))) + 158 | geom_tile(colour="white") + 159 | scale_fill_gradient(high = "#FF0000", low = "#FFFFFF")+ 160 | ylab("")+ 161 | theme(panel.background = element_blank())+ 162 | theme(axis.text.x = element_blank(), axis.ticks.x = element_blank()) 163 | 164 | # KÜMELEME ANALİZİ UYGULANMASI 165 | dtm <- DocumentTermMatrix(dokuman_derlem) 166 | dtm_yogun <- removeSparseTerms(dtm, 0.1) 167 | frekanslar <- as.matrix(dtm_yogun) 168 | satir_toplam <- rowSums(frekanslar) 169 | olcek <- frekanslar /satir_toplam 170 | 171 | uzaklık <- dist(olcek) 172 | library(cluster) 173 | kume <- agnes(x = uzaklık, method = "ward", metric = "euclidean") 174 | plot(kume) 175 | 176 | library(mclust) 177 | model_kume <- mclustICL(uzaklık) 178 | plot(model_kume) 179 | attributes(model_kume) 180 | model_mclust <- Mclust(data = uzaklık) 181 | 182 | plot(model_mclust$classification) 183 | plot(model_mclust$BIC) 184 | model_mclust$modelName 185 | summary(model_mclust) 186 | -------------------------------------------------------------------------------- /tahmin-ile-eksik-veri-atama.R: -------------------------------------------------------------------------------- 1 | """ 2 | ###VERİSETİNDEKİ EKSİK GÖZLEMLERİ DOLDURMANIN YÖNTEMLERİ 3 | 1) DOĞRUSAL İNTERPOLASYON YÖNTEMİ: Bir doğru üzerindeki eksik bir noktayı bulmaya çalışır. 4 | Dolayısıyla formülü nokta formülüne benzerdir. Verisetinde doğrusallık varsa bir başka değişkendeki 5 | doğrusal artışın kendi değişkenimiz üzerindeki etkisinden faydalanarak eksik değerleri bulabiliriz. 6 | 7 | 2) MAKSİMUM BEKLENTİ YÖNTEMİ: İlk olarak belirlenen bir ratgele değer üzerinden 8 | belirlenen hassasiyete ulaşılana kadar, aritmetik ortalamanın rastgele değerden farkı 9 | yine aritmetik ortalamaya eklenerek devam edilir. Ortalamanın belirlenen değerden farkı 10 | hassasiyet değerinden küçük olana kadar devam edilir ve belirlenen değere ulaşıldığında 11 | bütün eksik gözlemler o değerle doldurulur. 12 | 13 | 3) JACKKNIFE YÖNTEMİ: Maksimum beklentiden farklı olarak bütün eksik değerlerin aynı sonuçla doldurulması 14 | yerine, her eksik değer için ayrı hesaplama yapılmasıdır. Bir kere hesaplanan değer artık bilinen değer 15 | olarak kabul edilip hesalamada bu değer bilinenler arsında kullanılır. 16 | 17 | 4) MODELLEME YÖNTEMİ: Belirli bir model belirlenerek bu model ile eksik değerler tahmin edilir. 18 | 19 | 5) EKSİK VERİYİ SİLME: Bu yöntemde eksik veriler silinir. Fakat veriseti küçükse bu yöntemi tercih etmek 20 | verisetini daha da küçülteceğinden modelin başarısını etkileyecektir. 21 | 22 | ÖRNEK OLARAK BUNLARI SÖYLEYEBİLİRİZ AMA BİRÇOK BAŞKA YÖNTEM DE BULUNMAKTADIR. 23 | """ 24 | library(DMwR) 25 | library(ISLR) 26 | 27 | 28 | #KNN İLE BOŞ VERİYİ DOLDURMA 29 | 30 | df <- Hitters 31 | 32 | df[sample(1:nrow(df), 7), "Hits"] <- NA #hits içine 7 tane esksik veri koyduk 33 | df[sample(1:nrow(df), 12), "Runs"] <- NA #runs içine 12 na koyduk 34 | 35 | anyNA(df) 36 | 37 | knn_data <- knnImputation(df) 38 | anyNA(knn_data) 39 | 40 | f <- sapply(df, FUN = function(x) which(is.na(x))) 41 | #orjinal hitters ı çağırıp içindeki değerlerle karşılaştıralım şimdi 42 | df <- Hitters 43 | 44 | knn_hits <-knn_data[knn_data$Hits[c(f$Hits)], ]$Hits 45 | hitters_hits <- df[df$Hits[c(f$Hits)], ]$Hits 46 | 47 | summary(knn_hits) 48 | summary(hitters_hits) 49 | #summary ile orjinaldeki ile aradaki farka bakalım 50 | 51 | #RANDOM FORESTS İLE BOŞ VERİYİ DOLDURMA 52 | 53 | #Gerekli kütüphaneler 54 | install.packages("missForest") 55 | library(missForest) 56 | 57 | df <- Hitters 58 | 59 | #YİNE HİTTERS İÇİNE BİLEREK EKSİK VERİ DOLDURALIM 60 | df[sample(1:nrow(df), 7), "Hits"] <- NA #hits içine 7 tane esksik veri koyduk 61 | df[sample(1:nrow(df), 12), "Runs"] <- NA #runs içine 12 na koyduk 62 | 63 | 64 | rf_data <- missForest(df, ntree = 10) 65 | 66 | rftree_data <- rf_data$ximp 67 | 68 | l <- sapply(df, FUN = function(x) which(is.na(x))) 69 | 70 | 71 | #ŞİMDİ DEĞERLENDİRELİM ORJİNAL VERİ İLE KARŞILAŞTIRARAK 72 | hits_org <- Hitters[c(l$Hits), ]$Hits 73 | hits_rf <- rftree_data[c(l$Hits), ]$Hits 74 | 75 | runs_org <- Hitters[c(l$Runs), ]$Runs 76 | runs_rf <- rftree_data[c(l$Runs), ]$Runs 77 | 78 | summary(hits_org) 79 | summary(hits_rf) 80 | summary(runs_org) 81 | summary(runs_rf) 82 | #GÖRÜLDÜĞÜ GİBİ RANDOM FOREST İLE ORJİNALE ÇOK YAKIN DEĞERLERE ULAŞTIK. 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | -------------------------------------------------------------------------------- /tarih_saat_değişkenleri.R: -------------------------------------------------------------------------------- 1 | #TARİH VE SAAT DEĞİŞKENLERİ 2 | 3 | #tarih ve saat işlemleri için lubridate kütüphanesi kullanılabilir. 4 | #tidywords kütüphanesi de kullanılabilir. 5 | 6 | install.packages("lubridate") 7 | 8 | library(lubridate) 9 | 10 | df_bir <- data.frame( 11 | yas = c(10, 11, 30), 12 | boy = c(120, 140, 160), 13 | dogum = c("20100201", "20110522", "20090430") 14 | ) 15 | 16 | 17 | df_iki <- data.frame( 18 | yas = c(10, 11, 30), 19 | boy = c(120, 140, 160), 20 | dogum = c("2010_02_01", "2011_05_22", "2009_04_30") 21 | ) 22 | 23 | 24 | df_uc <- data.frame( 25 | yas = c(10, 11, 30), 26 | boy = c(120, 140, 160), 27 | dogum = c("01022010", "22052011", "30042009") 28 | ) 29 | 30 | str(df_bir) # gördüğümüz gibi doğum factor değişken ama tarih olması lazım. 31 | #özellikle grafik işlemlerimnde, zaman serilerinde vs. 32 | #değişkenin tarih tipinde olması gerekiyor ki düzgünce çalışabilelim. 33 | 34 | df_bir$dogum <- ymd(df_bir$dogum) #ymd --> year, month, day şeklinde sıralandığını belirtiyor 35 | str(df_bir) # doğum değikenleri tarih haline döndü görüldüğü gibi 36 | 37 | plot(df_bir$dogum, df_bir$boy) #görmek açısından plot çizelim 38 | #gördüğümüz gibi tarih sadece yıl olarak gösterildi. 39 | 40 | #bir de tarih haline çevirmesek nasıl olurdu bakalım 41 | plot(df_iki$dogum, df_iki$boy) 42 | #düzgün bir grafik oluşturulamadığı görülüyor. 43 | #eğer çok veri olsaydı x eksenindeki yazılar birbirine girecekti zaten. 44 | 45 | 46 | # ingilizce baş harfleri ile çok çeşitli başka tipler de dönüştürülebilir. 47 | a <- ymd("20111123") 48 | b <- dmy("21122018") 49 | c <- mdy("06232011") 50 | d <- mdy_hms("06252015025506") 51 | e <- ymd_hms("2014_04_21_06_55_45") 52 | f <- dmy_hm("301220192345") 53 | a 54 | b 55 | c 56 | d 57 | e 58 | f 59 | 60 | 61 | #tarih ve saat işlemleri için bazı başka gömülü kütüphane ve farklı libraryler bulunabilir. 62 | 63 | -------------------------------------------------------------------------------- /test.R: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RegaipKURT/R-Programming-for-Data-Science/ed385c3bcfcfebdb66d09f522f1ea257482c52c9/test.R -------------------------------------------------------------------------------- /titanic_r.Rmd: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Titanic: Machine Learning From Disaster" 3 | author: "Regaip Kurt" 4 | --- 5 | 6 | ## Titanic Verisetinin R ile İncelenmesi 7 | 8 | 9 | Titanic veriseti adından da anlaşılacağı üzre titanic gemisindeki yolcuların bilgilerini içermektedir. Survived bağımlı değişkenimizin yer aldığı kolon ve 10 | 11 diğer bağımsız değişkenden oluışan bir verisetidir. Makine öğrenmesine girişte sık eğitim amaçlı sık kullanılan verisetlerinden birisidir. 11 | 12 | Biz de burada titanic veriseti üzerinden xgboost algoritmasının nasıl kullanııldığını görmeye çalışacağız. 13 | 14 | 15 | Kütüphanelerin import edilmesi: 16 | ```{r} 17 | library(tidyverse) 18 | library(dplyr) 19 | library(funModeling) 20 | library(ggplot2) 21 | library(xgboost) 22 | ``` 23 | 24 | 25 | Verinin import edilmesi: 26 | ```{r} 27 | train_data <- read.csv("titanic/train.csv") 28 | test_data <- read.csv("titanic/test.csv") 29 | ``` 30 | 31 | Verinin kolon isimlerine bkalım 32 | 33 | ```{r} 34 | colnames(train_data) 35 | ``` 36 | 37 | 38 | İlk bakışta görüleceği gibi bağımlı değişkenimiz olan Survive kolonuna etki etmeyecek PassengerId ve Name gibi kolonlar görülüyor. Bu kolonları sonuca bir etkisi olmadığını bildiğimiz için verisetimizden kaldıracağız. 39 | 40 | ```{r} 41 | train_data <- select(train_data, -c(PassengerId, Name)) 42 | colnames(train_data) 43 | ``` 44 | 45 | ```{r} 46 | plot(train_data) 47 | ``` 48 | 49 | Diğer değişkenlerle ilgili karar vermeden önce eksik gözlemlerimiz var mı, varsa ne yapabiliriz bir inceleyelim. 50 | 51 | ```{r} 52 | colSums(is.na(train_data)) 53 | ``` 54 | 55 | Eksik gözlemlerimiz olduğunu gördük ve bu eksikliğin sadece age kolonunda ve tek başına meydana geldiğini anladık. Bu eksikliği tahmin tahmin modeli kurarak veya ortalama, medyan gibi değerlerle doldurmak ne kadar doğru olabilir? Bu sorunun cevabını verebilmemiz için eksik gözlemlerin tüm gözlemlere oranına bakmamız ve eksikliğin rastgele olup olmadığının cevabını vermemiz gerekiyor. 56 | 57 | ```{r} 58 | library(BaylorEdPsych) 59 | eksik_gozlem_test <- LittleMCAR(train_data) 60 | print("Eksik Gözlem Sayısı ve Oranları") 61 | eksik_gozlem_test$amount.missing 62 | 63 | 64 | ``` 65 | 66 | Gördüğümüz gibi eksiklik sadece "Age" kolonunda ve 177 eksik gözlem var. Bu gözlemin tüm gözlemlere oranı %19.8 civarında. Veribilimciler arasında %15 üstündeki oranlarda verinin silinmesinin doğru olmadığı yönünde bir görüş mevcut. Ben burada kararsız kaldığım için iki yöntem deneyip iki veriseti üzerinden ilerleyeceğim. 1. yöntemde eksik verileri silip kalan verilerle tahmin yaparken, 2. yöntemde eksik veriyi random forest ve knn modellleri le tahmin edip doldurmaya çalışacağım. Şimdi bu yöntemleri uygulamadan önce diğer gözlemlerde dönüştürme işlemlerimizi yapalım ve ardından iki yöntemle train ve test verilerimizi oluşturalım. 67 | 68 | ### Verisetinin özet istatistikleri 69 | 70 | ```{r} 71 | summary(train_data) 72 | ``` 73 | 74 | Sex, Ticket, Cabin ve Embarked değişkenlerini integer değişkenlere çevirmemiz gerekiyor öncelikle. 75 | 76 | ```{r} 77 | train_data$Sex <- as.integer(train_data$Sex) 78 | train_data$Ticket <- as.integer(train_data$Ticket) 79 | train_data$Cabin <- as.integer(train_data$Cabin) 80 | train_data$Embarked <- as.integer(train_data$Embarked) 81 | 82 | #age'i random forest ile kullanacağımız için onu da integer yapıyorum. 83 | train_data$Age <- as.integer(train_data$Age) 84 | 85 | summary(train_data) 86 | colSums(train_data) 87 | glimpse(train_data) 88 | ``` 89 | 90 | Şimdi age kolonundaki eksik gözlemleri random forest ile tahmin edip yeni veriseti oluşturalım. 91 | 92 | 93 | ```{r} 94 | library(missForest) 95 | library(DMwR) 96 | 97 | #bir de knn uyguladık 98 | knn_data <- knnImputation(train_data, k=10) 99 | rf_data <- missForest(train_data, ntree = 10) 100 | 101 | rftree_data <- rf_data$ximp 102 | 103 | l <- sapply(train_data, FUN = function(x) which(is.na(x))) 104 | 105 | rftree_data$Age <- as.integer(rftree_data$Age) 106 | 107 | knn_data$ Age <- as.integer(knn_data$Age) 108 | ``` 109 | 110 | 111 | Şimdi ise eksik gözlemleri sileceğimiz verisetini oluşturalım. 112 | 113 | ```{r} 114 | tam_veri <- train_data[complete.cases(train_data),] 115 | anyNA(tam_veri) 116 | tam_veri 117 | ``` 118 | 119 | ```{r} 120 | ``` 121 | 122 | ## Model oluşturma aşamaları 123 | 124 | ### Orjinal verilerle oluşturulan model 125 | 126 | ```{r} 127 | library(caret) 128 | train_indeks <- createDataPartition(tam_veri$Survived, p = .8, list = FALSE, times = 1) 129 | 130 | train <- train_data[train_indeks,] 131 | test <- train_data[-train_indeks,] 132 | 133 | train_x <- train %>% dplyr::select(-Survived) 134 | train_y <- train$Survived 135 | test_x <- test %>% dplyr::select(-Survived) 136 | test_y <- test$Survived 137 | 138 | #tek bir veri seti 139 | training <- data.frame(train_x, Survived = train_y) 140 | 141 | d_train <- xgb.DMatrix(data = as.matrix(train_x), label = train_y) 142 | 143 | d_test <- xgb.DMatrix(data = as.matrix(test_x), label = test_y) 144 | 145 | xgb_model <- xgboost(data = d_train, max.depth=2, eta=1, ntread=2, 146 | nrounds = 20, objective="binary:logistic", verbose = 1) 147 | 148 | bst <- xgb.train(data = d_train, max.depth=1, eta=0.34, ntread=2, 149 | nrounds = 31, eval.metric="error", gamma=1.7, 150 | eval.metric="logloss", objective = "binary:logistic") 151 | 152 | 153 | pred_y_xgb <- factor(ifelse(predict(bst, as.matrix(test_x))<0.5,0,1)) 154 | pred_y_xgb2 <- factor(ifelse(predict(bst, as.matrix(test_x))<0.5,0,1)) 155 | pred_y_xgb 156 | test_y 157 | 158 | sonuclar <- data.frame(pred=pred_y_xgb, obs=test_y) 159 | sonuclar 160 | 161 | confusionMatrix(factor(test_y), sonuclar$pred, positive = "1") 162 | 163 | ``` 164 | 165 | 166 | ### KNN verisiyle oluşturulan model 167 | ```{r} 168 | library(caret) 169 | train_indeks <- createDataPartition(knn_data$Survived, p = .8, list = FALSE, times = 1) 170 | 171 | train <- knn_data[train_indeks,] 172 | test <- knn_data[-train_indeks,] 173 | 174 | train_x <- train %>% dplyr::select(-Survived) 175 | train_y <- train$Survived 176 | test_x <- test %>% dplyr::select(-Survived) 177 | test_y <- test$Survived 178 | 179 | #tek bir veri seti 180 | training <- data.frame(train_x, Survived = train_y) 181 | 182 | d_train <- xgb.DMatrix(data = as.matrix(train_x), label = train_y) 183 | 184 | d_test <- xgb.DMatrix(data = as.matrix(test_x), label = test_y) 185 | 186 | xgb_model <- xgboost(data = d_train, max.depth=2, eta=1, ntread=2, 187 | nrounds = 20, objective="binary:logistic", verbose = 1) 188 | 189 | bst <- xgb.train(data = d_train, max.depth=1, eta=0.34, ntread=2, 190 | nrounds = 31, eval.metric="error", gamma=1.7, 191 | eval.metric="logloss", objective = "binary:logistic") 192 | 193 | 194 | pred_y_xgb <- factor(ifelse(predict(bst, as.matrix(test_x))<0.5,0,1)) 195 | pred_y_xgb2 <- factor(ifelse(predict(bst, as.matrix(test_x))<0.5,0,1)) 196 | pred_y_xgb 197 | test_y 198 | 199 | sonuclar <- data.frame(pred=pred_y_xgb, obs=test_y) 200 | sonuclar 201 | 202 | confusionMatrix(factor(test_y), sonuclar$pred, positive = "1") 203 | ``` 204 | 205 | ### Random Forest verisiyle oluşturulan model 206 | ```{r} 207 | library(caret) 208 | train_indeks <- createDataPartition(rftree_data$Survived, p = .8, list = FALSE, times = 1) 209 | 210 | train <- rftree_data[train_indeks,] 211 | test <- rftree_data[-train_indeks,] 212 | 213 | train_x <- train %>% dplyr::select(-Survived) 214 | train_y <- train$Survived 215 | test_x <- test %>% dplyr::select(-Survived) 216 | test_y <- test$Survived 217 | 218 | #tek bir veri seti 219 | training <- data.frame(train_x, Survived = train_y) 220 | 221 | d_train <- xgb.DMatrix(data = as.matrix(train_x), label = train_y) 222 | 223 | d_test <- xgb.DMatrix(data = as.matrix(test_x), label = test_y) 224 | 225 | xgb_model <- xgboost(data = d_train, max.depth=2, eta=1, ntread=2, 226 | nrounds = 20, objective="binary:logistic", verbose = 1) 227 | 228 | bst <- xgb.train(data = d_train, max.depth=1, eta=0.34, ntread=2, 229 | nrounds = 31, eval.metric="error", gamma=1.7, 230 | eval.metric="logloss", objective = "binary:logistic") 231 | 232 | 233 | pred_y_xgb <- factor(ifelse(predict(bst, as.matrix(test_x))<0.5,0,1)) 234 | pred_y_xgb2 <- factor(ifelse(predict(bst, as.matrix(test_x))<0.5,0,1)) 235 | pred_y_xgb 236 | test_y 237 | 238 | sonuclar <- data.frame(pred=pred_y_xgb, obs=test_y) 239 | sonuclar 240 | 241 | confusionMatrix(factor(test_y), sonuclar$pred, positive = "1") 242 | ``` 243 | 244 | SOnuç olarak random forest modelini kullanmaya karar verdim ve bu modeli optimize ederek tahmin yapmaya çalışacağız. 245 | 246 | ## Model Tuning and optimization 247 | 248 | ```{r} 249 | 250 | 251 | 252 | train_indeks <- createDataPartition(rftree_data$Survived, p = .8, list = FALSE, times = 1) 253 | 254 | train <- rftree_data[train_indeks,] 255 | test <- rftree_data[-train_indeks,] 256 | 257 | train_x <- train %>% dplyr::select(-Survived) 258 | train_y <- train$Survived 259 | test_x <- test %>% dplyr::select(-Survived) 260 | test_y <- test$Survived 261 | 262 | #tek bir veri seti 263 | training <- data.frame(train_x, Survived = train_y) 264 | 265 | d_train <- xgb.DMatrix(data = as.matrix(train_x), label = train_y) 266 | 267 | d_test <- xgb.DMatrix(data = as.matrix(test_x), label = test_y) 268 | 269 | 270 | ctrl <- trainControl(method = "cv", 271 | number = 10, 272 | summaryFunction = twoClassSummary, 273 | classProbs = TRUE) 274 | 275 | xgb_grid <- expand.grid(eta = c(0.05,0.03, 0.02), 276 | nrounds = c(10, 20, 30, 50, 75,100), 277 | max_depth = 1:10, 278 | min_child_weight = c(2.0, 2.25, 1.75), 279 | colsample_bytree = c(0.3, 0.4, 0.5), 280 | gamma = c(0, 0.2), 281 | subsample = 1) 282 | 283 | dim(xgb_grid) 284 | 285 | glimpse(rftree_data) 286 | 287 | rftree_data$Survived <- as.factor(rftree_data$Survived) 288 | levels(rftree_data$Survived)<-make.names(levels(factor(rftree_data$Survived))) 289 | 290 | xgb_tune <- train(Survived~., data = rftree_data, 291 | method = "xgbTree", 292 | tuneGrid = xgb_grid, 293 | trControl = ctrl, 294 | metric = "ROC") 295 | xgb_tune$bestTune 296 | plot(xgb_tune) 297 | 298 | pred <- predict(xgb_tune, test_x) 299 | pred <- ifelse(pred == "X1", 1, 0) 300 | test_y <- ifelse(test_y == "X1", 1, 0) 301 | pred <- factor(pred) 302 | 303 | confusionMatrix(pred, factor(test_y), positive = "1") 304 | 305 | ``` 306 | 307 | ```{r} 308 | test_verisi <- select(test_data, -c(PassengerId, Name)) 309 | head(test_verisi) 310 | test_verisi$Sex <- as.integer(test_verisi$Sex) 311 | test_verisi$Ticket <- as.integer(test_verisi$Ticket) 312 | test_verisi$Cabin <- as.integer(test_verisi$Cabin) 313 | test_verisi$Embarked <- as.integer(test_verisi$Embarked) 314 | 315 | #age'i random forest ile kullanacağımız için onu da integer yapıyorum. 316 | test_verisi$Age <- as.integer(test_verisi$Age) 317 | Pass_id <- select(test_data, PassengerId) 318 | ``` 319 | 320 | 321 | ```{r} 322 | test_verisi <- missForest(test_verisi, ntree = 10) 323 | 324 | test_verisi <- test_verisi$ximp 325 | test_verisi$Age = as.integer(test_verisi$Age) 326 | glimpse(test_verisi) 327 | ``` 328 | 329 | 330 | 331 | ```{r} 332 | pred <- predict(xgb_tune, test_verisi) 333 | pred <- ifelse(pred == "X1", 1, 0) 334 | pred <- factor(pred) 335 | length(Pass_id$PassengerId) 336 | ``` 337 | 338 | ```{r} 339 | sonuc = data.frame("PassengerId"=Pass_id, "Survived"=pred, row.names = FALSE) 340 | sonuc = sonuc[,c("PassengerId", "Survived")] 341 | write.csv(sonuc, file = "tahminler.csv",row.names=FALSE) 342 | ``` 343 | 344 | 345 | 346 | 347 | 348 | 349 | 350 | 351 | 352 | 353 | 354 | 355 | 356 | 357 | 358 | 359 | 360 | -------------------------------------------------------------------------------- /yapay-sinir-aglari.R: -------------------------------------------------------------------------------- 1 | # YAPAY SİNİR AĞLARI 2 | 3 | ### İlk önce bütün girdileri temizleyelim 4 | rm(list = ls()) 5 | 6 | ## Kütüphaneler 7 | library(caret) 8 | library(tidyverse) 9 | library(AppliedPredictiveModeling) 10 | library(pls) #kismi en kucuk kareler ve pcr icin 11 | library(elasticnet) 12 | library(broom) #tidy model icin 13 | library(glmnet) 14 | library(MASS) 15 | library(ISLR) 16 | library(PerformanceAnalytics) 17 | library(funModeling) 18 | library(Matrix) 19 | library(kernlab) #svm 20 | library(e1071) #svm icin 21 | library(rpart) #cart icin 22 | library(pgmm) #olive data seti icin 23 | library(dslabs) 24 | library(rpart.plot) #rpart gorsel icin 25 | library(partykit) #karar agaci gorseli icin 26 | library(ipred) #bagging icin 27 | library(randomForest) 28 | library(gbm) 29 | library(nnet) 30 | library(neuralnet) 31 | library(GGally) 32 | library(NeuralNetTools) #garson fonksiyonu icin 33 | library(FNN) 34 | library(dplyr) 35 | 36 | ## Verisetimizi alalım 37 | 38 | # http://archive.ics.uci.edu/ml/datasets/Yacht+Hydrodynamics 39 | 40 | 41 | dff <- read_table( 42 | file = 'http://archive.ics.uci.edu/ml/machine-learning-databases/00243/yacht_hydrodynamics.data', 43 | col_names = c( 44 | 'longpos_cob', 45 | 'prismatic_coeff', 46 | 'len_disp_ratio', 47 | 'beam_draut_ratio', 48 | 'length_beam_ratio', 49 | 'froude_num', 50 | 'residuary_resist' 51 | ) 52 | ) 53 | 54 | glimpse(dff) 55 | summary(dff) 56 | profiling_num(dff) 57 | ggpairs(dff) 58 | chart.Correlation(dff, histogram = T, pch=19) 59 | 60 | olcekleme <- function(x) { 61 | (x - min(x)) / (max(x)-min(x)) 62 | } 63 | 64 | dff <- na.omit(dff) 65 | 66 | sapply(dff, FUN = olcekleme) 67 | 68 | 69 | train_indeks <- createDataPartition(dff$residuary_resist, p = 0.8, times = 1) 70 | head(train_indeks) 71 | train <- dff[train_indeks$Resample1, ] 72 | test <- dff[-train_indeks$Resample1, ] 73 | 74 | train_x <- train %>% dplyr::select(-residuary_resist) 75 | train_y <- train %>% dplyr::select(residuary_resist) 76 | test_x <- test %>% dplyr::select(-residuary_resist) 77 | test_y <- test %>% dplyr::select(residuary_resist) 78 | 79 | training <- data.frame(train_x, residuary_resist = train_y) 80 | 81 | names(training) 82 | 83 | # neuralnet kullanacağız ve bunun için formülün açıkça girilmesi gerekiyor. 84 | ysa_formul <- residuary_resist ~ longpos_cob + prismatic_coeff + len_disp_ratio + 85 | beam_draut_ratio + length_beam_ratio + froude_num 86 | #bağımlı ve bağımsız değilkenlerle oluşan formülü yazdık 87 | 88 | neuralnet(formula = ysa_formul, data = training) 89 | 90 | plot(neuralnet(formula = ysa_formul, data = training, hidden = c(2,1), stepmax = 100), 91 | rep="best") 92 | 93 | mynn <- 94 | nnet( 95 | residuary_resist ~ longpos_cob + prismatic_coeff + len_disp_ratio + beam_draut_ratio + length_beam_ratio + froude_num, 96 | data = training, 97 | size = 2, 98 | decay = 1.0e-5, 99 | maxit = 5000 100 | ) 101 | 102 | 103 | ysa_formul <- residuary_resist ~ longpos_cob + prismatic_coeff + len_disp_ratio + beam_draut_ratio + length_beam_ratio + froude_num 104 | 105 | ysa1 <- neuralnet(ysa_formul, data = training) 106 | 107 | 108 | plot(ysa1) 109 | 110 | ysa1$result.matrix 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | -------------------------------------------------------------------------------- /İstatistiksel-Testler.R: -------------------------------------------------------------------------------- 1 | #İSTATİSTİKSEL TESTLER 2 | 3 | ## VERİSETİMİZİ OLUŞTURALIM 4 | veri <- rnorm(100, 40, 10) 5 | numara <- c(1:100) 6 | 7 | ## HİSTOGRAM VE GGQQPLOT(HARİCİ KÜTÜPHANE) İLE GRAFİĞİNE BAKALIM 8 | hist(veri, density = 100, col = "turquoise4") 9 | 10 | ### harici kütphane ### 11 | install.packages("ggpubr") 12 | 13 | library(ggpubr) 14 | 15 | ggqqplot(veri) 16 | 17 | 18 | ## T- TESTİ 19 | ### SHAPİRO-WİLKS TESTİ 20 | shapiro.test(veri) 21 | 22 | ## R içindeki t-testi ile bakalım 23 | t.test(veri, mu = 120, alternative = "two.sided", conf.level = 0.95) 24 | 25 | ### alternatif kütüphane ile bakalım 26 | install.packages("inferr") 27 | library(inferr) 28 | 29 | #### verisetini dataframe'e çevirmemiz lazı kullanabilmek için 30 | df <- as.data.frame(veri) 31 | df 32 | infer_os_t_test(df, veri, mu = 120, alpha = 0.05, alternative = "all") 33 | 34 | #dağılım normal değilse t-testi örneklem 30'dan büyük olduğunda yine kullanılır 35 | #ama 30'dan az ise şöyle bir kütüphane ve fonksiyon kullanabiliriz. 36 | 37 | install.packages("DescTools") 38 | library(DescTools) 39 | 40 | SignTest(df$veri, mu = 120) 41 | #bunun farkı dağılımk normal değilse medyanı kullanıyor olması 42 | 43 | #Tek örneklem oran testi 44 | ##eğer bir verisetinde oran değerini test etmek istersek kullanılır 45 | 46 | library(tidyverse) 47 | 48 | #bunu saçma şekilde yaptım. 49 | infer_os_prop_test(df, variable = veri, prob = 0.5, phat = 0.6, alternative = "less") 50 | 51 | 52 | # A-B TESTİ (BAĞIMSIZ İKİ ÖRNEKLEM T-TESTİ) 53 | 54 | ## Veriseti oluşturalım 55 | 56 | veri <- data.frame( 57 | A = rnorm(100, mean = 18000, sd = 5000), 58 | B = rnorm(100, mean = 20000, sd = 4500) 59 | ) 60 | 61 | #aynı veriyi farklı şekilde yapalım. 62 | A <- data.frame(degerler=veri$A, sinif = "A") 63 | B <- data.frame(degerler = veri$B, sinif="B") 64 | yeni_veri <- rbind(A,B) 65 | yeni_veri 66 | 67 | #küçük bir inceleme yapalım 68 | library(funModeling) 69 | profiling_num(veri) 70 | 71 | 72 | #grafiksel incelemelerle test yapalım 73 | ggplot(veri, aes(A, B)) + geom_boxplot() 74 | 75 | 76 | 77 | ggplot(yeni_veri, aes(sinif, degerler, fill=sinif)) + geom_boxplot() 78 | 79 | ggplot(yeni_veri, aes(degerler, fill=sinif)) + 80 | geom_histogram(aes(y=..density..), bins = 100) + 81 | geom_density(alpha=0.3) + 82 | facet_grid(sinif~.) 83 | 84 | # numerik istatistiksel test yapılması 85 | 86 | apply(veri, 2, shapiro.test) 87 | 88 | #varyansları farklı mı test edelim (Varyans Homojenliği Testi) 89 | install.packages("car") 90 | library(car) 91 | 92 | leveneTest(yeni_veri$degerler~yeni_veri$sinif, mean = center) 93 | 94 | t.test(yeni_veri$degerler~yeni_veri$sinif, var.equal=TRUE) 95 | 96 | 97 | #alternatif fonksiyon 98 | library(inferr) 99 | infer_ts_ind_ttest(data = yeni_veri, x = sinif, y = degerler, 100 | confint = 0.95, alternative = "all") 101 | 102 | 103 | # BAĞIMLI İKİ ÖRNEKLEM T-TESTİ 104 | 105 | ### iki örneklem birbirine bağımlıysa veya aynıysa, örneğin öncesi ve 106 | ### sonrası için aynı çalışanları bir eğitimden sonra değerlendirmek 107 | ### istiyorsak bağımlı iki örneklem t testi kullanılmalıdır. 108 | 109 | ## verisetini oluşturalım. 110 | ### Normal dağılıma sahip iki veriseti oluşturalım 111 | oncesi <- rnorm(40, mean = 140, sd = 25) 112 | sonrasi <- rnorm(40, mean = 155, sd = 30) 113 | 114 | #verileri data frame haline getirip etiketleyelim 115 | A <- data.frame(Ort_Satis=oncesi, Durum = "önce") 116 | B <- data.frame(Ort_Satis=sonrasi, Durum = "sonra") 117 | 118 | #A ve B'yi birleştirelim 119 | veriseti = rbind(A,B) 120 | veriseti 121 | 122 | library(ggplot2) 123 | library(tidyverse) 124 | library(funModeling) 125 | library(dplyr) 126 | 127 | 128 | #ilk başta grafiklere bakalım 129 | ggplot(veriseti, aes(Durum,Ort_Satis, fill=Durum)) + geom_boxplot() 130 | 131 | ggplot(veriseti, aes(Ort_Satis, fill=Durum)) + 132 | geom_histogram(aes(y = ..density..)) + 133 | geom_density(alpha=0.3) + 134 | facet_grid(Durum~.) 135 | 136 | #varsayalım ki veri iç içe geldi. tıpkı bizim verisetimizdeki gibi 137 | #dolayısıyla oncesi ve sonrasını ayırmamız gerekecek. 138 | #o zaman nasıl istatistiklere ulaşacağız. 139 | 140 | # pipe kullanalım bu sefer 141 | veriseti%>% 142 | group_by(Durum)%>% 143 | summarise(mean(Ort_Satis), sd(Ort_Satis), var(Ort_Satis)) 144 | 145 | #verisetini aldık, Durum kolonundaki tipe göre grupladık, sonra istatistikleri çektik. 146 | 147 | ## TESTLERİN UYGULANMASI 148 | #şimdi shapiro-wilk testi uygulayalım 149 | apply(data.frame(oncesi, sonrasi), MARGIN = 2, FUN = shapiro.test) 150 | #apply kullanırken FUN= kısmında fonksiyonların parantezleri yazılmaz 151 | # shapiro testinin hipotezi örneklem dağılımı ile anakitle dapılımı arasında fark olmadığıdır. 152 | # yani verimiz normal dağılmıştır şeklinde bir boş hipotezi var. 153 | # p value 0.05'den büyük çıktığı için boş hipotez reddedilemez. yani verimiz normal dağılmıştır. 154 | 155 | # BAĞIMLI İKİ ÖRNEKLEM T TESTİ 156 | 157 | t.test(veriseti$Ort_Satis~veriseti$Durum, paired=TRUE) #paired bağımlı demek. 158 | #bu ilk testin sonucunda p-value = 0.072 çıktı. yani boş hipotez reddedilemez. 159 | #yani, iki veriseti arasında anlamlı bir farklılık yok. 160 | #sonuç olarak eğitimlerden sonra personelimizin performansında istatistiki bir 161 | #artış yok. Çalışmamız ortaya anlamlı bir sonuç çıkaramamış ve başarısız olmuş. 162 | 163 | 164 | #2. bir alternatid fonksiyon daha deneyelim 165 | df <- data.frame(oncesi, sonrasi) 166 | df 167 | library(inferr) 168 | infer_ts_paired_ttest(data=df, x = oncesi, y = sonrasi, confint=0.95, 169 | alternative="all") 170 | #yine burada da aynı sonuçlar çıktı 171 | #en altta ~= hipotezi görüldüğü gibi reddedilemiyor. yani fark yok. 172 | #sonuç olarak çalışanlara eğitim verdikten sonra bir fark oluşmamış 173 | 174 | # Aynı veriler için non-parametrik test 175 | ## non-parametrik test normallik varsayımı sağlanmadığında uygulanır 176 | wilcox.test(df$oncesi, df$sonrasi, paired = T) 177 | 178 | 179 | # İKİ ÖRNEKLEM ORAN TESTİ 180 | 181 | ## iki tane butona ilişkin görüntülenme ve tıklanma oranları olsun 182 | ## buna göre bir dönüşüm oranı belirleyip anlamlı bir fark var mı bakalım. 183 | 184 | ## kırmızı buton 300 tıklanma - 1000 görüntülenme 185 | ## yeşil buton 250 tıklanma - 1100 görüntülenme 186 | 187 | df <- data.frame(görüntülenme=c(1000,1100), 188 | tıklanma=c(300,250), row.names = c("kırmızı", "yeşil")) 189 | 190 | 191 | # testin yapılması 192 | library(inferr) 193 | infer_ts_prop_test(data = df, görüntülenme, tıklanma) 194 | #alternatif fonksiyon 195 | install.packages("mosaic") 196 | library(mosaic) 197 | mosaic::prop.test(x=c(300,250), n=c(1000, 1100)) 198 | ## p-value 0.05'ten küçük ve sonuç olarak anlamlı bir fark vardır diyoruz. 199 | 200 | 201 | # ANOVA TESTİ - VARYANS ANALİZİ 202 | 203 | ## İkiden fazla grup olduğunda varyans analizi kullanılır. 204 | 205 | # siteye 3 farklı tema uygulayıp anasayfada kalma sürelerini inceleyelim 206 | 207 | A <- rnbinom(100, 1000, prob = 0.5) 208 | B <- rnbinom(100, 1000, prob = 0.5) 209 | C <- rnbinom(100, 1000, prob = 0.52) 210 | hist(A) 211 | hist(B) 212 | hist(C) 213 | 214 | dfa <- data.frame(tür ="A", süre = A) 215 | dfb <- data.frame(tür ="B", süre = B) 216 | dfc <- data.frame(tür ="C", süre = C) 217 | 218 | df <- rbind(dfc,dfb, dfa) 219 | 220 | df 221 | library(ggplot2) 222 | 223 | ggplot(df, aes(tür, süre, fill=süre)) + 224 | geom_boxplot() 225 | 226 | 227 | ggplot(df, aes(süre, fill=tür)) + geom_histogram() 228 | 229 | ggplot(df, aes(süre, fill=tür)) + 230 | geom_histogram(aes(y=..density..), bins = 100) + 231 | geom_density(alpha=0.3) + 232 | facet_grid(tür~.) 233 | 234 | library(dplyr) 235 | #pipe kullanacağız ve dplyr içinde bulunuyor pipe lar 236 | group_by(df, tür) %>% 237 | summarise(mean(süre), median(süre), sd(süre)) 238 | 239 | 240 | ## testler 241 | 242 | bartlett.test(süre~tür, data = df) 243 | library(DescTools) 244 | DescTools::LeveneTest(süre~tür, data =df) 245 | 246 | 247 | # normal dağılıma sahip miyiz shapiro.test ile bakalım 248 | 249 | # A, B, C gruplarında süre normal dağılmış mı bakalım. 250 | shapiro.test(df[df$tür=="A", ]$süre) 251 | shapiro.test(df[df$tür=="B", ]$süre) 252 | shapiro.test(df[df$tür=="C", ]$süre) 253 | 254 | #her üçünde de süre normal dağılmış. 255 | # p değeri 0.05'ten büyük ve boş hipotez reddedilmez 256 | 257 | # ANOVA HİPOTEZ TESTİ 258 | anova = aov(süre~tür, data = df) 259 | 260 | summary(anova) 261 | 262 | # p-value değeri 0.05'ten küçük olduğu için h0 reddedilir. 263 | # yani grupların varyansı birbirinden farklıdır. 264 | 265 | 266 | #şimdi bu farklılığın nereden kaynaklandığını bulalım 267 | TukeyHSD(anova) 268 | 269 | # alternatif fonksiyon 270 | library(inferr) 271 | infer_oneway_anova(df, süre, tür) 272 | 273 | #non-parametrik test 274 | kruskal.test(süre~tür, data = df) 275 | 276 | 277 | # KORELASYON TESTLERİ 278 | 279 | ### bütün verilerimizi silelim 280 | rm(list = ls()) 281 | 282 | ## SATICILARIN SKORU İLE YAPTIKLARI SATIŞLAR ARASINDA 283 | ## BİR KORELASON VEYA ANLAMLI BİR İLİŞKİ VAR MI? İNCELEYELİM. 284 | 285 | ### verisetinin oluşturulması 286 | df <- mtcars 287 | 288 | library(ggpubr) 289 | ggscatter(df, x = "mpg", y ="wt", add = "reg.line", conf.int = T, 290 | cor.coef = T, 291 | cor.method = "pearson") 292 | 293 | shapiro.test(df$mpg) 294 | shapiro.test(df$wt) 295 | 296 | cor.test(df$wt, df$mpg, method = "pearson") 297 | 298 | #eğer varsayımlar sağlanmıyorsa yani veriseti normal dağılıma sahip değilse 299 | # method olarak non-parametrik yöntem olan spearman kullanılabilir. 300 | 301 | cor.test(df$wt, df$mpg, method = "spearman") 302 | cor.test(df$wt, df$mpg, method = "kendall") 303 | 304 | #alternatif yöntemler 305 | cor(df, use = "complete.obs") 306 | library(Hmisc) 307 | rcorr(as.matrix(df)) 308 | 309 | ggscatter(df, x = "qsec", y ="wt", add = "reg.line", conf.int = T, 310 | cor.coef = T, 311 | cor.method = "pearson") 312 | 313 | # GELİŞMİŞ KORELASYON MATRİSİ GRAFİĞİ 314 | library(PerformanceAnalytics) 315 | 316 | df <- mtcars[, c(1,3,4,5,6,7)] 317 | chart.Correlation(df, histogram = T, pch=19, method = "pearson") 318 | --------------------------------------------------------------------------------