{ "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",
"
\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"
]
}
]
}