{ "nbformat": 4, "nbformat_minor": 2, "metadata": { "colab": { "name": "lesson_1-R.ipynb", "provenance": [], "collapsed_sections": [], "toc_visible": true }, "kernelspec": { "name": "ir", "display_name": "R" }, "language_info": { "name": "R" }, "coopTranslator": { "original_hash": "c18d3bd0bd8ae3878597e89dcd1fa5c1", "translation_date": "2025-09-06T13:45:03+00:00", "source_file": "2-Regression/1-Tools/solution/R/lesson_1-R.ipynb", "language_code": "tr" } }, "cells": [ { "cell_type": "markdown", "source": [], "metadata": { "id": "YJUHCXqK57yz" } }, { "cell_type": "markdown", "source": [ "## Regresyona Giriş - Ders 1\n", "\n", "#### Perspektif Kazanma\n", "\n", "✅ Regresyon yöntemlerinin birçok türü vardır ve hangisini seçeceğiniz, aradığınız cevaba bağlıdır. Örneğin, belirli bir yaşta bir kişinin muhtemel boyunu tahmin etmek istiyorsanız, **sayısal bir değer** aradığınız için `doğrusal regresyon` kullanırsınız. Eğer bir mutfak türünün vegan olarak kabul edilip edilmemesi gerektiğini keşfetmek istiyorsanız, **kategori ataması** arıyorsunuz demektir ve bu durumda `lojistik regresyon` kullanırsınız. Lojistik regresyon hakkında daha fazla bilgi edineceksiniz. Verilere sorabileceğiniz bazı soruları düşünün ve bu yöntemlerden hangisinin daha uygun olacağını değerlendirin.\n", "\n", "Bu bölümde, [diyabet hakkında küçük bir veri seti](https://www4.stat.ncsu.edu/~boos/var.select/diabetes.html) ile çalışacaksınız. Diyabet hastaları için bir tedaviyi test etmek istediğinizi hayal edin. Makine Öğrenimi modelleri, değişkenlerin kombinasyonlarına dayanarak hangi hastaların tedaviye daha iyi yanıt vereceğini belirlemenize yardımcı olabilir. Görselleştirildiğinde, çok basit bir regresyon modeli bile teorik klinik deneylerinizi organize etmenize yardımcı olacak değişkenler hakkında bilgi gösterebilir.\n", "\n", "Öyleyse, bu göreve başlayalım!\n", "\n", "

\n", " \n", "

@allison_horst tarafından yapılmış sanat eseri
\n", "\n", "\n" ], "metadata": { "id": "LWNNzfqd6feZ" } }, { "cell_type": "markdown", "source": [ "## 1. Araç setimizi yükleme\n", "\n", "Bu görev için aşağıdaki paketlere ihtiyacımız olacak:\n", "\n", "- `tidyverse`: [tidyverse](https://www.tidyverse.org/), veri bilimini daha hızlı, kolay ve eğlenceli hale getirmek için tasarlanmış bir [R paketleri koleksiyonudur](https://www.tidyverse.org/packages).\n", "\n", "- `tidymodels`: [tidymodels](https://www.tidymodels.org/) çerçevesi, modelleme ve makine öğrenimi için bir [paketler koleksiyonudur](https://www.tidymodels.org/packages).\n", "\n", "Bu paketleri şu şekilde yükleyebilirsiniz:\n", "\n", "`install.packages(c(\"tidyverse\", \"tidymodels\"))`\n", "\n", "Aşağıdaki script, bu modülü tamamlamak için gerekli paketlere sahip olup olmadığınızı kontrol eder ve eksik olanları sizin için yükler.\n" ], "metadata": { "id": "FIo2YhO26wI9" } }, { "cell_type": "code", "execution_count": 2, "source": [ "suppressWarnings(if(!require(\"pacman\")) install.packages(\"pacman\"))\n", "pacman::p_load(tidyverse, tidymodels)" ], "outputs": [ { "output_type": "stream", "name": "stderr", "text": [ "Loading required package: pacman\n", "\n" ] } ], "metadata": { "id": "cIA9fz9v7Dss", "colab": { "base_uri": "https://localhost:8080/" }, "outputId": "2df7073b-86b2-4b32-cb86-0da605a0dc11" } }, { "cell_type": "markdown", "source": [ "Şimdi, bu harika paketleri yükleyelim ve mevcut R oturumumuzda kullanılabilir hale getirelim. (Bu sadece bir örnek için, `pacman::p_load()` bunu zaten sizin için yaptı)\n" ], "metadata": { "id": "gpO_P_6f9WUG" } }, { "cell_type": "code", "execution_count": null, "source": [ "# load the core Tidyverse packages\r\n", "library(tidyverse)\r\n", "\r\n", "# load the core Tidymodels packages\r\n", "library(tidymodels)\r\n" ], "outputs": [], "metadata": { "id": "NLMycgG-9ezO" } }, { "cell_type": "markdown", "source": [ "## 2. Diyabet veri seti\n", "\n", "Bu alıştırmada, diyabet veri seti üzerinde tahminler yaparak regresyon becerilerimizi sergileyeceğiz. [Diyabet veri seti](https://www4.stat.ncsu.edu/~boos/var.select/diabetes.rwrite1.txt), diyabetle ilgili `442 örnek` veri içerir ve 10 tahmin edici özellik değişkeni, `yaş`, `cinsiyet`, `vücut kitle indeksi`, `ortalama kan basıncı` ve `altı kan serumu ölçümü` ile bir sonuç değişkeni `y`: başlangıçtan bir yıl sonra hastalık ilerlemesinin nicel bir ölçüsünü içerir.\n", "\n", "|Gözlem Sayısı|442|\n", "|----------------------|:---|\n", "|Tahmin Edici Sayısı|İlk 10 sütun sayısal tahmin edici|\n", "|Sonuç/Hedef|11. sütun başlangıçtan bir yıl sonra hastalık ilerlemesinin nicel bir ölçüsüdür|\n", "|Tahmin Edici Bilgileri|- yaş (yıl olarak)\n", "||- cinsiyet\n", "||- bmi vücut kitle indeksi\n", "||- bp ortalama kan basıncı\n", "||- s1 tc, toplam serum kolesterol\n", "||- s2 ldl, düşük yoğunluklu lipoproteinler\n", "||- s3 hdl, yüksek yoğunluklu lipoproteinler\n", "||- s4 tch, toplam kolesterol / HDL\n", "||- s5 ltg, muhtemelen serum trigliserit seviyesinin logaritması\n", "||- s6 glu, kan şekeri seviyesi|\n", "\n", "\n", "> 🎓 Unutmayın, bu denetimli öğrenmedir ve adlandırılmış bir 'y' hedefine ihtiyacımız var.\n", "\n", "R ile veri üzerinde işlem yapmadan önce, veriyi R'nin belleğine aktarmanız veya R'nin veriye uzaktan erişebilmesi için bir bağlantı oluşturmanız gerekir.\n", "\n", "> [readr](https://readr.tidyverse.org/) paketi, Tidyverse'in bir parçası olup, dikdörtgen verileri R'ye hızlı ve kullanıcı dostu bir şekilde aktarmanın bir yolunu sunar.\n", "\n", "Şimdi, bu kaynak URL'de sağlanan diyabet veri setini yükleyelim: \n", "\n", "Ayrıca, verilerimiz üzerinde bir kontrol yapacağız ve `glimpse()` kullanarak veri yapısını inceleyeceğiz, ardından `slice()` ile ilk 5 satırı görüntüleyeceğiz.\n", "\n", "Daha ileri gitmeden önce, R kodunda sıkça karşılaşacağınız bir şeyi tanıtalım 🥁🥁: pipe operatörü `%>%`\n", "\n", "Pipe operatörü (`%>%`), bir nesneyi mantıksal bir sırayla bir fonksiyona veya çağrı ifadesine ileterek işlemleri gerçekleştirir. Pipe operatörünü kodunuzda \"ve sonra\" demek gibi düşünebilirsiniz.\n" ], "metadata": { "id": "KM6iXLH996Cl" } }, { "cell_type": "code", "execution_count": null, "source": [ "# Import the data set\r\n", "diabetes <- read_table2(file = \"https://www4.stat.ncsu.edu/~boos/var.select/diabetes.rwrite1.txt\")\r\n", "\r\n", "\r\n", "# Get a glimpse and dimensions of the data\r\n", "glimpse(diabetes)\r\n", "\r\n", "\r\n", "# Select the first 5 rows of the data\r\n", "diabetes %>% \r\n", " slice(1:5)" ], "outputs": [], "metadata": { "id": "Z1geAMhM-bSP" } }, { "cell_type": "markdown", "source": [ "`glimpse()` bize bu verinin 442 satır ve 11 sütundan oluştuğunu, tüm sütunların veri türünün `double` olduğunu gösteriyor.\n", "\n", "
\n", "\n", "> glimpse() ve slice(), [`dplyr`](https://dplyr.tidyverse.org/) paketindeki fonksiyonlardır. Dplyr, Tidyverse'in bir parçası olup, veri manipülasyonu için bir dil sunar ve en yaygın veri manipülasyonu zorluklarını çözmenize yardımcı olan tutarlı bir dizi fiil sağlar.\n", "\n", "
\n", "\n", "Artık elimizde veri olduğuna göre, bu alıştırma için bir özelliği (`bmi`) hedef alarak daraltalım. Bunun için istediğimiz sütunları seçmemiz gerekecek. Peki bunu nasıl yaparız?\n", "\n", "[`dplyr::select()`](https://dplyr.tidyverse.org/reference/select.html), bir veri çerçevesindeki sütunları *seçmemize* (ve isteğe bağlı olarak yeniden adlandırmamıza) olanak tanır.\n" ], "metadata": { "id": "UwjVT1Hz-c3Z" } }, { "cell_type": "code", "execution_count": null, "source": [ "# Select predictor feature `bmi` and outcome `y`\r\n", "diabetes_select <- diabetes %>% \r\n", " select(c(bmi, y))\r\n", "\r\n", "# Print the first 5 rows\r\n", "diabetes_select %>% \r\n", " slice(1:10)" ], "outputs": [], "metadata": { "id": "RDY1oAKI-m80" } }, { "cell_type": "markdown", "source": [ "## 3. Eğitim ve Test Verileri\n", "\n", "Denetimli öğrenmede, verileri iki alt kümeye *bölmek* yaygın bir uygulamadır; modelin eğitilmesi için kullanılan (genellikle daha büyük) bir küme ve modelin performansını görmek için kullanılan daha küçük bir \"ayrılmış\" küme.\n", "\n", "Artık veriler hazır olduğuna göre, bu veri kümesindeki sayılar arasında mantıklı bir ayrım yapıp yapamayacağını görmek için bir makineye başvurabiliriz. Verileri nasıl böleceğimize dair bilgileri içeren bir nesne oluşturmak için Tidymodels çerçevesinin bir parçası olan [rsample](https://tidymodels.github.io/rsample/) paketini kullanabiliriz. Daha sonra oluşturulan eğitim ve test kümelerini çıkarmak için iki rsample fonksiyonunu kullanabiliriz:\n" ], "metadata": { "id": "SDk668xK-tc3" } }, { "cell_type": "code", "execution_count": null, "source": [ "set.seed(2056)\r\n", "# Split 67% of the data for training and the rest for tesing\r\n", "diabetes_split <- diabetes_select %>% \r\n", " initial_split(prop = 0.67)\r\n", "\r\n", "# Extract the resulting train and test sets\r\n", "diabetes_train <- training(diabetes_split)\r\n", "diabetes_test <- testing(diabetes_split)\r\n", "\r\n", "# Print the first 3 rows of the training set\r\n", "diabetes_train %>% \r\n", " slice(1:10)" ], "outputs": [], "metadata": { "id": "EqtHx129-1h-" } }, { "cell_type": "markdown", "source": [ "## 4. Tidymodels ile bir doğrusal regresyon modeli eğitmek\n", "\n", "Artık modelimizi eğitmeye hazırız!\n", "\n", "Tidymodels'de modelleri `parsnip()` kullanarak üç kavramı belirterek tanımlarsınız:\n", "\n", "- Model **türü**, doğrusal regresyon, lojistik regresyon, karar ağacı modelleri gibi modelleri birbirinden ayırır.\n", "\n", "- Model **modu**, regresyon ve sınıflandırma gibi yaygın seçenekleri içerir; bazı model türleri her iki modu desteklerken bazıları yalnızca bir moda sahiptir.\n", "\n", "- Model **motoru**, modeli eğitmek için kullanılacak hesaplama aracıdır. Genellikle bunlar R paketleridir, örneğin **`\"lm\"`** veya **`\"ranger\"`**\n", "\n", "Bu modelleme bilgisi bir model spesifikasyonunda tutulur, o halde bir tane oluşturalım!\n" ], "metadata": { "id": "sBOS-XhB-6v7" } }, { "cell_type": "code", "execution_count": null, "source": [ "# Build a linear model specification\r\n", "lm_spec <- \r\n", " # Type\r\n", " linear_reg() %>% \r\n", " # Engine\r\n", " set_engine(\"lm\") %>% \r\n", " # Mode\r\n", " set_mode(\"regression\")\r\n", "\r\n", "\r\n", "# Print the model specification\r\n", "lm_spec" ], "outputs": [], "metadata": { "id": "20OwEw20--t3" } }, { "cell_type": "markdown", "source": [ "Bir model *belirlendikten* sonra, model [`fit()`](https://parsnip.tidymodels.org/reference/fit.html) fonksiyonu kullanılarak genellikle bir formül ve bazı verilerle `tahmin edilebilir` veya `eğitilebilir`.\n", "\n", "`y ~ .` ifadesi, `y`'yi tahmin edilen değer/hedef olarak, tüm tahmin ediciler/özellikler tarafından açıklanacak şekilde (yani `.`) uyarlayacağımız anlamına gelir (bu durumda yalnızca bir tahmin edicimiz var: `bmi`).\n" ], "metadata": { "id": "_oDHs89k_CJj" } }, { "cell_type": "code", "execution_count": null, "source": [ "# Build a linear model specification\r\n", "lm_spec <- linear_reg() %>% \r\n", " set_engine(\"lm\") %>%\r\n", " set_mode(\"regression\")\r\n", "\r\n", "\r\n", "# Train a linear regression model\r\n", "lm_mod <- lm_spec %>% \r\n", " fit(y ~ ., data = diabetes_train)\r\n", "\r\n", "# Print the model\r\n", "lm_mod" ], "outputs": [], "metadata": { "id": "YlsHqd-q_GJQ" } }, { "cell_type": "markdown", "source": [ "Model çıktısından, eğitim sırasında öğrenilen katsayıları görebiliriz. Bu katsayılar, gerçek ve tahmin edilen değişken arasındaki toplam hatayı en aza indiren en iyi uyum çizgisinin katsayılarını temsil eder.\n", "
\n", "\n", "## 5. Test seti üzerinde tahminler yapma\n", "\n", "Artık bir model eğittiğimize göre, test veri seti için hastalık ilerlemesi y'yi [parsnip::predict()](https://parsnip.tidymodels.org/reference/predict.model_fit.html) kullanarak tahmin edebiliriz. Bu, veri grupları arasındaki çizgiyi çizmek için kullanılacaktır.\n" ], "metadata": { "id": "kGZ22RQj_Olu" } }, { "cell_type": "code", "execution_count": null, "source": [ "# Make predictions for the test set\r\n", "predictions <- lm_mod %>% \r\n", " predict(new_data = diabetes_test)\r\n", "\r\n", "# Print out some of the predictions\r\n", "predictions %>% \r\n", " slice(1:5)" ], "outputs": [], "metadata": { "id": "nXHbY7M2_aao" } }, { "cell_type": "markdown", "source": [ "Woohoo! 💃🕺 Bir model eğittik ve tahminler yapmak için kullandık!\n", "\n", "Tahmin yaparken, tidymodels geleneği her zaman standartlaştırılmış sütun adlarına sahip bir tibble/veri çerçevesi üretmektir. Bu, orijinal verilerle tahminleri birleştirerek, grafik oluşturma gibi sonraki işlemler için kullanılabilir bir format oluşturmayı kolaylaştırır.\n", "\n", "`dplyr::bind_cols()` birden fazla veri çerçevesini sütun olarak verimli bir şekilde birleştirir.\n" ], "metadata": { "id": "R_JstwUY_bIs" } }, { "cell_type": "code", "execution_count": null, "source": [ "# Combine the predictions and the original test set\r\n", "results <- diabetes_test %>% \r\n", " bind_cols(predictions)\r\n", "\r\n", "\r\n", "results %>% \r\n", " slice(1:5)" ], "outputs": [], "metadata": { "id": "RybsMJR7_iI8" } }, { "cell_type": "markdown", "source": [ "## 6. Modelleme Sonuçlarını Görselleştirme\n", "\n", "Şimdi bunu görsel olarak inceleme zamanı 📈. Test setindeki tüm `y` ve `bmi` değerlerinin bir dağılım grafiğini oluşturacağız, ardından modelin tahminlerini kullanarak, modelin veri gruplamaları arasında en uygun yere bir çizgi çizeceğiz.\n", "\n", "R, grafik oluşturmak için birkaç sisteme sahiptir, ancak `ggplot2` bunların en zarif ve en esnek olanlarından biridir. Bu, grafikleri **bağımsız bileşenleri birleştirerek** oluşturmanıza olanak tanır.\n" ], "metadata": { "id": "XJbYbMZW_n_s" } }, { "cell_type": "code", "execution_count": null, "source": [ "# Set a theme for the plot\r\n", "theme_set(theme_light())\r\n", "# Create a scatter plot\r\n", "results %>% \r\n", " ggplot(aes(x = bmi)) +\r\n", " # Add a scatter plot\r\n", " geom_point(aes(y = y), size = 1.6) +\r\n", " # Add a line plot\r\n", " geom_line(aes(y = .pred), color = \"blue\", size = 1.5)" ], "outputs": [], "metadata": { "id": "R9tYp3VW_sTn" } }, { "cell_type": "markdown", "source": [ "✅ Burada neler olduğunu biraz düşünün. Bir doğru, birçok küçük veri noktasının içinden geçiyor, ancak tam olarak ne yapıyor? Bu doğruyu kullanarak yeni, görülmemiş bir veri noktasının grafiğin y ekseniyle olan ilişkisini nasıl tahmin edebileceğinizi görebiliyor musunuz? Bu modelin pratik kullanımını kelimelerle ifade etmeye çalışın.\n", "\n", "Tebrikler, ilk doğrusal regresyon modelinizi oluşturdunuz, onunla bir tahmin yaptınız ve bunu bir grafikte gösterdiniz!\n" ], "metadata": { "id": "zrPtHIxx_tNI" } }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n---\n\n**Feragatname**: \nBu belge, [Co-op Translator](https://github.com/Azure/co-op-translator) adlı yapay zeka çeviri hizmeti kullanılarak çevrilmiştir. Doğruluk için çaba göstersek de, otomatik çevirilerin hata veya yanlışlıklar içerebileceğini lütfen unutmayın. Belgenin orijinal dili, yetkili kaynak olarak kabul edilmelidir. Kritik bilgiler için profesyonel insan çevirisi önerilir. Bu çevirinin kullanımından kaynaklanan yanlış anlama veya yanlış yorumlamalardan sorumlu değiliz.\n" ] } ] }