You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
ML-For-Beginners/translations/tr/4-Classification/1-Introduction/solution/R/lesson_10-R.ipynb

727 lines
28 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

{
"nbformat": 4,
"nbformat_minor": 2,
"metadata": {
"colab": {
"name": "lesson_10-R.ipynb",
"provenance": [],
"collapsed_sections": []
},
"kernelspec": {
"name": "ir",
"display_name": "R"
},
"language_info": {
"name": "R"
},
"coopTranslator": {
"original_hash": "2621e24705e8100893c9bf84e0fc8aef",
"translation_date": "2025-09-06T15:01:10+00:00",
"source_file": "4-Classification/1-Introduction/solution/R/lesson_10-R.ipynb",
"language_code": "tr"
}
},
"cells": [
{
"cell_type": "markdown",
"source": [
"# Lezzetli Asya ve Hint Mutfağı: Bir sınıflandırma modeli oluşturun\n"
],
"metadata": {
"id": "ItETB4tSFprR"
}
},
{
"cell_type": "markdown",
"source": [
"## Sınıflandırmaya Giriş: Verilerinizi Temizleyin, Hazırlayın ve Görselleştirin\n",
"\n",
"Bu dört derste, klasik makine öğreniminin temel odak noktalarından biri olan *sınıflandırmayı* keşfedeceksiniz. Asya ve Hindistan'ın tüm muhteşem mutfakları hakkında bir veri seti kullanarak çeşitli sınıflandırma algoritmalarını inceleyeceğiz. Umarım acıkmışsınızdır!\n",
"\n",
"<p >\n",
" <img src=\"../../images/pinch.png\"\n",
" width=\"600\"/>\n",
" <figcaption>Bu derslerde pan-Asya mutfaklarını kutlayın! Görsel: Jen Looper</figcaption>\n",
"\n",
"\n",
"<!--![Bu derslerde pan-Asya mutfaklarını kutlayın! Görsel: Jen Looper](../../../../../../4-Classification/1-Introduction/solution/R/images/pinch.png)-->\n",
"\n",
"Sınıflandırma, regresyon teknikleriyle birçok ortak noktası olan bir [denetimli öğrenme](https://wikipedia.org/wiki/Supervised_learning) biçimidir. Sınıflandırmada, bir öğenin hangi `kategoriye` ait olduğunu tahmin etmek için bir model eğitirsiniz. Makine öğrenimi, veri setlerini kullanarak değerleri veya şeylerin isimlerini tahmin etmekle ilgiliyse, sınıflandırma genellikle iki gruba ayrılır: *ikili sınıflandırma* ve *çoklu sınıflandırma*.\n",
"\n",
"Unutmayın:\n",
"\n",
"- **Doğrusal regresyon**, değişkenler arasındaki ilişkileri tahmin etmenize ve yeni bir veri noktasının bu çizgiyle ilişkili olarak nerede yer alacağını doğru bir şekilde tahmin etmenize yardımcı oldu. Örneğin, *Eylül ve Aralık aylarında bir kabağın fiyatının ne olacağını* tahmin edebilirsiniz.\n",
"\n",
"- **Lojistik regresyon**, \"ikili kategorileri\" keşfetmenize yardımcı oldu: bu fiyat noktasında, *bu kabak turuncu mu yoksa turuncu değil mi*?\n",
"\n",
"Sınıflandırma, bir veri noktasının etiketini veya sınıfını belirlemenin diğer yollarını belirlemek için çeşitli algoritmalar kullanır. Bu mutfak verileriyle çalışarak, bir grup malzemeyi gözlemleyerek, bu malzemelerin hangi mutfağa ait olduğunu belirleyip belirleyemeyeceğimizi görelim.\n",
"\n",
"### [**Ders Öncesi Testi**](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/19/)\n",
"\n",
"### **Giriş**\n",
"\n",
"Sınıflandırma, makine öğrenimi araştırmacısının ve veri bilimcisinin temel faaliyetlerinden biridir. Basit bir ikili değerin sınıflandırılmasından (\"bu e-posta spam mi değil mi?\"), bilgisayarla görme kullanarak karmaşık görüntü sınıflandırma ve segmentasyona kadar, verileri sınıflara ayırmak ve onlara sorular sormak her zaman faydalıdır.\n",
"\n",
"Bu süreci daha bilimsel bir şekilde ifade etmek gerekirse, sınıflandırma yöntemi, giriş değişkenleri ile çıkış değişkenleri arasındaki ilişkiyi haritalamanıza olanak tanıyan bir tahmin modeli oluşturur.\n",
"\n",
"<p >\n",
" <img src=\"../../images/binary-multiclass.png\"\n",
" width=\"600\"/>\n",
" <figcaption>Sınıflandırma algoritmalarının ele alması gereken ikili ve çoklu sınıf problemleri. Bilgilendirme görseli: Jen Looper</figcaption>\n",
"\n",
"\n",
"\n",
"Verilerimizi temizleme, görselleştirme ve makine öğrenimi görevlerimiz için hazırlama sürecine başlamadan önce, makine öğreniminin verileri sınıflandırmak için kullanılabileceği çeşitli yollar hakkında biraz bilgi edinelim.\n",
"\n",
"[İstatistikten](https://wikipedia.org/wiki/Statistical_classification) türetilen klasik makine öğrenimi ile sınıflandırma, `sigara içen`, `kilo` ve `yaş` gibi özellikleri kullanarak *X hastalığını geliştirme olasılığını* belirler. Daha önce gerçekleştirdiğiniz regresyon egzersizlerine benzer bir denetimli öğrenme tekniği olarak, verileriniz etiketlenir ve makine öğrenimi algoritmaları bu etiketleri kullanarak bir veri setinin sınıflarını (veya 'özelliklerini') sınıflandırır ve bunları bir gruba veya sonuca atar.\n",
"\n",
"✅ Bir mutfaklar hakkında bir veri seti hayal etmek için bir an durun. Çoklu sınıf modeli neyi cevaplayabilir? İkili model neyi cevaplayabilir? Belirli bir mutfağın çemen otu kullanma olasılığını belirlemek isteseydiniz ne olurdu? Ya yıldız anason, enginar, karnabahar ve yaban turpu dolu bir market çantası hediye aldığınızda, tipik bir Hint yemeği yapıp yapamayacağınızı görmek isteseydiniz?\n",
"\n",
"### **Merhaba 'sınıflandırıcı'**\n",
"\n",
"Bu mutfak veri setine sormak istediğimiz soru aslında bir **çoklu sınıf sorusu**, çünkü çalışabileceğimiz birkaç olası ulusal mutfak var. Bir grup malzeme verildiğinde, bu birçok sınıftan hangisine veri uyacak?\n",
"\n",
"Tidymodels, çözmek istediğiniz problemin türüne bağlı olarak verileri sınıflandırmak için kullanabileceğiniz çeşitli algoritmalar sunar. Önümüzdeki iki derste, bu algoritmalardan birkaçını öğreneceksiniz.\n",
"\n",
"#### **Ön Koşul**\n",
"\n",
"Bu ders için, verilerimizi temizlemek, hazırlamak ve görselleştirmek için aşağıdaki paketlere ihtiyacımız olacak:\n",
"\n",
"- `tidyverse`: [tidyverse](https://www.tidyverse.org/), veri bilimi işlemlerini 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",
"- `DataExplorer`: [DataExplorer paketi](https://cran.r-project.org/web/packages/DataExplorer/vignettes/dataexplorer-intro.html), EDA sürecini ve rapor oluşturmayı basitleştirmek ve otomatikleştirmek için tasarlanmıştır.\n",
"\n",
"- `themis`: [themis paketi](https://themis.tidymodels.org/), Dengesiz Verilerle Başa Çıkmak için Ek Tarif Adımları sağlar.\n",
"\n",
"Bu paketleri şu şekilde yükleyebilirsiniz:\n",
"\n",
"`install.packages(c(\"tidyverse\", \"tidymodels\", \"DataExplorer\", \"here\"))`\n",
"\n",
"Alternatif olarak, aşağıdaki script, bu modülü tamamlamak için gereken paketlere sahip olup olmadığınızı kontrol eder ve eksik olanları sizin için yükler.\n"
],
"metadata": {
"id": "ri5bQxZ-Fz_0"
}
},
{
"cell_type": "code",
"execution_count": null,
"source": [
"suppressWarnings(if (!require(\"pacman\"))install.packages(\"pacman\"))\r\n",
"\r\n",
"pacman::p_load(tidyverse, tidymodels, DataExplorer, themis, here)"
],
"outputs": [],
"metadata": {
"id": "KIPxa4elGAPI"
}
},
{
"cell_type": "markdown",
"source": [
"Daha sonra bu harika paketleri yükleyip mevcut R oturumumuzda kullanılabilir hale getireceğiz. (Bu sadece bir örnekleme için, `pacman::p_load()` bunu zaten sizin için yaptı)\n"
],
"metadata": {
"id": "YkKAxOJvGD4C"
}
},
{
"cell_type": "markdown",
"source": [
"## Alıştırma - Verilerinizi temizleyin ve dengeleyin\n",
"\n",
"Bu projeye başlamadan önceki ilk görev, daha iyi sonuçlar elde etmek için verilerinizi temizlemek ve **dengelemektir**.\n",
"\n",
"Haydi verilerle tanışalım!🕵️\n"
],
"metadata": {
"id": "PFkQDlk0GN5O"
}
},
{
"cell_type": "code",
"execution_count": null,
"source": [
"# Import data\r\n",
"df <- read_csv(file = \"https://raw.githubusercontent.com/microsoft/ML-For-Beginners/main/4-Classification/data/cuisines.csv\")\r\n",
"\r\n",
"# View the first 5 rows\r\n",
"df %>% \r\n",
" slice_head(n = 5)\r\n"
],
"outputs": [],
"metadata": {
"id": "Qccw7okxGT0S"
}
},
{
"cell_type": "markdown",
"source": [
"İlginç! Görünüşe göre, ilk sütun bir tür `id` sütunu. Hadi veri hakkında biraz daha bilgi edinelim.\n"
],
"metadata": {
"id": "XrWnlgSrGVmR"
}
},
{
"cell_type": "code",
"execution_count": null,
"source": [
"# Basic information about the data\r\n",
"df %>%\r\n",
" introduce()\r\n",
"\r\n",
"# Visualize basic information above\r\n",
"df %>% \r\n",
" plot_intro(ggtheme = theme_light())"
],
"outputs": [],
"metadata": {
"id": "4UcGmxRxGieA"
}
},
{
"cell_type": "markdown",
"source": [
ıktıdan hemen görebiliyoruz ki `2448` satır ve `385` sütun ile `0` eksik değerimiz var. Ayrıca 1 ayrık sütunumuz var, *cuisine*.\n",
"\n",
"## Alıştırma - mutfaklar hakkında bilgi edinme\n",
"\n",
"Şimdi işler daha ilginç hale gelmeye başlıyor. Haydi, veri dağılımını her bir mutfak için keşfedelim.\n"
],
"metadata": {
"id": "AaPubl__GmH5"
}
},
{
"cell_type": "code",
"execution_count": null,
"source": [
"# Count observations per cuisine\r\n",
"df %>% \r\n",
" count(cuisine) %>% \r\n",
" arrange(n)\r\n",
"\r\n",
"# Plot the distribution\r\n",
"theme_set(theme_light())\r\n",
"df %>% \r\n",
" count(cuisine) %>% \r\n",
" ggplot(mapping = aes(x = n, y = reorder(cuisine, -n))) +\r\n",
" geom_col(fill = \"midnightblue\", alpha = 0.7) +\r\n",
" ylab(\"cuisine\")"
],
"outputs": [],
"metadata": {
"id": "FRsBVy5eGrrv"
}
},
{
"cell_type": "markdown",
"source": [
"Mutfak türleri sınırlıdır, ancak veri dağılımı dengesizdir. Bunu düzeltebilirsiniz! Ancak önce biraz daha keşfetmeye devam edin.\n",
"\n",
"Sonraki adımda, her bir mutfak türünü kendi tibble'ına atayalım ve her mutfak türü için ne kadar veri olduğunu (satırlar, sütunlar) öğrenelim.\n",
"\n",
"> Bir [tibble](https://tibble.tidyverse.org/) modern bir veri çerçevesidir.\n",
"\n",
"<p >\n",
" <img src=\"../../images/dplyr_filter.jpg\"\n",
" width=\"600\"/>\n",
" <figcaption>@allison_horst tarafından yapılmış bir eser</figcaption>\n"
],
"metadata": {
"id": "vVvyDb1kG2in"
}
},
{
"cell_type": "code",
"execution_count": null,
"source": [
"# Create individual tibble for the cuisines\r\n",
"thai_df <- df %>% \r\n",
" filter(cuisine == \"thai\")\r\n",
"japanese_df <- df %>% \r\n",
" filter(cuisine == \"japanese\")\r\n",
"chinese_df <- df %>% \r\n",
" filter(cuisine == \"chinese\")\r\n",
"indian_df <- df %>% \r\n",
" filter(cuisine == \"indian\")\r\n",
"korean_df <- df %>% \r\n",
" filter(cuisine == \"korean\")\r\n",
"\r\n",
"\r\n",
"# Find out how much data is available per cuisine\r\n",
"cat(\" thai df:\", dim(thai_df), \"\\n\",\r\n",
" \"japanese df:\", dim(japanese_df), \"\\n\",\r\n",
" \"chinese_df:\", dim(chinese_df), \"\\n\",\r\n",
" \"indian_df:\", dim(indian_df), \"\\n\",\r\n",
" \"korean_df:\", dim(korean_df))"
],
"outputs": [],
"metadata": {
"id": "0TvXUxD3G8Bk"
}
},
{
"cell_type": "markdown",
"source": [
"## **Alıştırma - dplyr ile mutfaklara göre en popüler malzemeleri keşfetmek**\n",
"\n",
"Artık verilere daha derinlemesine bakabilir ve her mutfak için tipik malzemelerin neler olduğunu öğrenebilirsiniz. Mutfaklar arasında kafa karışıklığına neden olan tekrar eden verileri temizlemeniz gerekiyor, bu sorunu birlikte inceleyelim.\n",
"\n",
"R'de bir `create_ingredient()` fonksiyonu oluşturun ve bu fonksiyon bir malzeme veri çerçevesi döndürsün. Bu fonksiyon, işe yaramaz bir sütunu kaldırarak başlayacak ve malzemeleri sayısına göre sıralayacak.\n",
"\n",
"R'deki bir fonksiyonun temel yapısı şu şekildedir:\n",
"\n",
"`myFunction <- function(arglist){`\n",
"\n",
"**`...`**\n",
"\n",
"**`return`**`(value)`\n",
"\n",
"`}`\n",
"\n",
"R fonksiyonlarına dair düzenli bir giriş [burada](https://skirmer.github.io/presentations/functions_with_r.html#1) bulunabilir.\n",
"\n",
"Hadi başlayalım! Daha önceki derslerimizde öğrendiğimiz [dplyr fiillerini](https://dplyr.tidyverse.org/) kullanacağız. Hatırlatma olarak:\n",
"\n",
"- `dplyr::select()`: hangi **sütunları** tutacağınızı veya hariç tutacağınızı seçmenize yardımcı olur.\n",
"\n",
"- `dplyr::pivot_longer()`: veriyi \"uzatmanıza\" yardımcı olur, satır sayısını artırır ve sütun sayısını azaltır.\n",
"\n",
"- `dplyr::group_by()` ve `dplyr::summarise()`: farklı gruplar için özet istatistikler bulmanıza ve bunları düzenli bir tabloya koymanıza yardımcı olur.\n",
"\n",
"- `dplyr::filter()`: yalnızca koşullarınızı karşılayan satırları içeren bir veri alt kümesi oluşturur.\n",
"\n",
"- `dplyr::mutate()`: sütunlar oluşturmanıza veya mevcut sütunları değiştirmenize yardımcı olur.\n",
"\n",
"Allison Horst tarafından hazırlanan, dplyr *(Tidyverse'in bir parçası)* içindeki bazı kullanışlı veri düzenleme fonksiyonlarını tanıtan bu [*sanat*-dolu learnr eğitimine](https://allisonhorst.shinyapps.io/dplyr-learnr/#section-welcome) göz atabilirsiniz.\n"
],
"metadata": {
"id": "K3RF5bSCHC76"
}
},
{
"cell_type": "code",
"execution_count": null,
"source": [
"# Creates a functions that returns the top ingredients by class\r\n",
"\r\n",
"create_ingredient <- function(df){\r\n",
" \r\n",
" # Drop the id column which is the first colum\r\n",
" ingredient_df = df %>% select(-1) %>% \r\n",
" # Transpose data to a long format\r\n",
" pivot_longer(!cuisine, names_to = \"ingredients\", values_to = \"count\") %>% \r\n",
" # Find the top most ingredients for a particular cuisine\r\n",
" group_by(ingredients) %>% \r\n",
" summarise(n_instances = sum(count)) %>% \r\n",
" filter(n_instances != 0) %>% \r\n",
" # Arrange by descending order\r\n",
" arrange(desc(n_instances)) %>% \r\n",
" mutate(ingredients = factor(ingredients) %>% fct_inorder())\r\n",
" \r\n",
" \r\n",
" return(ingredient_df)\r\n",
"} # End of function"
],
"outputs": [],
"metadata": {
"id": "uB_0JR82HTPa"
}
},
{
"cell_type": "markdown",
"source": [
"Şimdi, mutfağa göre en popüler on malzeme hakkında bir fikir edinmek için fonksiyonu kullanabiliriz. Hadi bunu `thai_df` ile deneyelim.\n"
],
"metadata": {
"id": "h9794WF8HWmc"
}
},
{
"cell_type": "code",
"execution_count": null,
"source": [
"# Call create_ingredient and display popular ingredients\r\n",
"thai_ingredient_df <- create_ingredient(df = thai_df)\r\n",
"\r\n",
"thai_ingredient_df %>% \r\n",
" slice_head(n = 10)"
],
"outputs": [],
"metadata": {
"id": "agQ-1HrcHaEA"
}
},
{
"cell_type": "markdown",
"source": [
"Önceki bölümde `geom_col()` kullandık, şimdi de çubuk grafikler oluşturmak için `geom_bar` nasıl kullanılır görelim. Daha fazla bilgi için `?geom_bar` kullanın.\n"
],
"metadata": {
"id": "kHu9ffGjHdcX"
}
},
{
"cell_type": "code",
"execution_count": null,
"source": [
"# Make a bar chart for popular thai cuisines\r\n",
"thai_ingredient_df %>% \r\n",
" slice_head(n = 10) %>% \r\n",
" ggplot(aes(x = n_instances, y = ingredients)) +\r\n",
" geom_bar(stat = \"identity\", width = 0.5, fill = \"steelblue\") +\r\n",
" xlab(\"\") + ylab(\"\")"
],
"outputs": [],
"metadata": {
"id": "fb3Bx_3DHj6e"
}
},
{
"cell_type": "markdown",
"source": [
"Haydi Japonca veriler için de aynısını yapalım.\n"
],
"metadata": {
"id": "RHP_xgdkHnvM"
}
},
{
"cell_type": "code",
"execution_count": null,
"source": [
"# Get popular ingredients for Japanese cuisines and make bar chart\r\n",
"create_ingredient(df = japanese_df) %>% \r\n",
" slice_head(n = 10) %>%\r\n",
" ggplot(aes(x = n_instances, y = ingredients)) +\r\n",
" geom_bar(stat = \"identity\", width = 0.5, fill = \"darkorange\", alpha = 0.8) +\r\n",
" xlab(\"\") + ylab(\"\")\r\n"
],
"outputs": [],
"metadata": {
"id": "019v8F0XHrRU"
}
},
{
"cell_type": "markdown",
"source": [
"Peki ya Çin mutfağı?\n"
],
"metadata": {
"id": "iIGM7vO8Hu3v"
}
},
{
"cell_type": "code",
"execution_count": null,
"source": [
"# Get popular ingredients for Chinese cuisines and make bar chart\r\n",
"create_ingredient(df = chinese_df) %>% \r\n",
" slice_head(n = 10) %>%\r\n",
" ggplot(aes(x = n_instances, y = ingredients)) +\r\n",
" geom_bar(stat = \"identity\", width = 0.5, fill = \"cyan4\", alpha = 0.8) +\r\n",
" xlab(\"\") + ylab(\"\")"
],
"outputs": [],
"metadata": {
"id": "lHd9_gd2HyzU"
}
},
{
"cell_type": "markdown",
"source": [],
"metadata": {
"id": "ir8qyQbNH1c7"
}
},
{
"cell_type": "code",
"execution_count": null,
"source": [
"# Get popular ingredients for Indian cuisines and make bar chart\r\n",
"create_ingredient(df = indian_df) %>% \r\n",
" slice_head(n = 10) %>%\r\n",
" ggplot(aes(x = n_instances, y = ingredients)) +\r\n",
" geom_bar(stat = \"identity\", width = 0.5, fill = \"#041E42FF\", alpha = 0.8) +\r\n",
" xlab(\"\") + ylab(\"\")"
],
"outputs": [],
"metadata": {
"id": "ApukQtKjH5FO"
}
},
{
"cell_type": "markdown",
"source": [
"Son olarak, Kore malzemelerini çiz.\n"
],
"metadata": {
"id": "qv30cwY1H-FM"
}
},
{
"cell_type": "code",
"execution_count": null,
"source": [
"# Get popular ingredients for Korean cuisines and make bar chart\r\n",
"create_ingredient(df = korean_df) %>% \r\n",
" slice_head(n = 10) %>%\r\n",
" ggplot(aes(x = n_instances, y = ingredients)) +\r\n",
" geom_bar(stat = \"identity\", width = 0.5, fill = \"#852419FF\", alpha = 0.8) +\r\n",
" xlab(\"\") + ylab(\"\")"
],
"outputs": [],
"metadata": {
"id": "lumgk9cHIBie"
}
},
{
"cell_type": "markdown",
"source": [
"Veri görselleştirmelerinden, artık farklı mutfaklar arasında karışıklık yaratan en yaygın malzemeleri `dplyr::select()` kullanarak çıkarabiliriz.\n",
"\n",
"Herkes pirinci, sarımsağı ve zencefili sever!\n"
],
"metadata": {
"id": "iO4veMXuIEta"
}
},
{
"cell_type": "code",
"execution_count": null,
"source": [
"# Drop id column, rice, garlic and ginger from our original data set\r\n",
"df_select <- df %>% \r\n",
" select(-c(1, rice, garlic, ginger))\r\n",
"\r\n",
"# Display new data set\r\n",
"df_select %>% \r\n",
" slice_head(n = 5)"
],
"outputs": [],
"metadata": {
"id": "iHJPiG6rIUcK"
}
},
{
"cell_type": "markdown",
"source": [
"## Tarifler kullanarak veri ön işleme 👩‍🍳👨‍🍳 - Dengesiz veriyle başa çıkma ⚖️\n",
"\n",
"<p >\n",
" <img src=\"../../images/recipes.png\"\n",
" width=\"600\"/>\n",
" <figcaption>Çizim: @allison_horst</figcaption>\n",
"\n",
"Bu dersin mutfaklarla ilgili olduğunu göz önünde bulundurarak, `tarifleri` bağlama oturtmamız gerekiyor.\n",
"\n",
"Tidymodels, veri ön işleme için başka bir harika paket sunar: `recipes` - veri ön işleme için bir paket.\n"
],
"metadata": {
"id": "kkFd-JxdIaL6"
}
},
{
"cell_type": "markdown",
"source": [
"Haydi mutfaklarımızın dağılımına bir kez daha göz atalım.\n"
],
"metadata": {
"id": "6l2ubtTPJAhY"
}
},
{
"cell_type": "code",
"execution_count": null,
"source": [
"# Distribution of cuisines\r\n",
"old_label_count <- df_select %>% \r\n",
" count(cuisine) %>% \r\n",
" arrange(desc(n))\r\n",
"\r\n",
"old_label_count"
],
"outputs": [],
"metadata": {
"id": "1e-E9cb7JDVi"
}
},
{
"cell_type": "markdown",
"source": [
"Gördüğünüz gibi, mutfak türlerinin sayısında oldukça eşitsiz bir dağılım var. Kore mutfakları, Tayland mutfaklarının neredeyse 3 katı. Dengesiz veriler genellikle model performansı üzerinde olumsuz etkilere sahiptir. Bir ikili sınıflandırmayı düşünün. Eğer verilerinizin çoğu bir sınıfa aitse, bir ML modeli, sadece o sınıfa ait daha fazla veri olduğu için, o sınıfı daha sık tahmin edecektir. Verilerin dengelenmesi, herhangi bir dengesizliği giderir ve bu eşitsizliği ortadan kaldırmaya yardımcı olur. Birçok model, gözlem sayılarının eşit olduğu durumlarda en iyi performansı gösterir ve bu nedenle dengesiz verilerle çalışırken zorlanır.\n",
"\n",
"Dengesiz veri setleriyle başa çıkmanın temel olarak iki yolu vardır:\n",
"\n",
"- azınlık sınıfına gözlem eklemek: `Over-sampling` örneğin, bir SMOTE algoritması kullanarak\n",
"\n",
"- çoğunluk sınıfından gözlem çıkarmak: `Under-sampling`\n",
"\n",
"Şimdi bir `recipe` kullanarak dengesiz veri setleriyle nasıl başa çıkılacağını gösterelim. Bir recipe, bir veri setine hangi adımların uygulanması gerektiğini tanımlayan bir plan olarak düşünülebilir ve veri analizi için hazır hale getirilmesini sağlar.\n"
],
"metadata": {
"id": "soAw6826JKx9"
}
},
{
"cell_type": "code",
"execution_count": null,
"source": [
"# Load themis package for dealing with imbalanced data\r\n",
"library(themis)\r\n",
"\r\n",
"# Create a recipe for preprocessing data\r\n",
"cuisines_recipe <- recipe(cuisine ~ ., data = df_select) %>% \r\n",
" step_smote(cuisine)\r\n",
"\r\n",
"cuisines_recipe"
],
"outputs": [],
"metadata": {
"id": "HS41brUIJVJy"
}
},
{
"cell_type": "markdown",
"source": [
"Ön işleme adımlarımızı inceleyelim.\n",
"\n",
"- Bir formül ile `recipe()` çağrısı, `df_select` verilerini referans alarak değişkenlerin *rollerini* tarif eder. Örneğin, `cuisine` sütunu bir `outcome` rolü alırken, diğer sütunlar bir `predictor` rolü almıştır.\n",
"\n",
"- [`step_smote(cuisine)`](https://themis.tidymodels.org/reference/step_smote.html), bu vakaların en yakın komşularını kullanarak azınlık sınıfının sentetik olarak yeni örneklerini oluşturan bir tarif adımının *spesifikasyonunu* oluşturur.\n",
"\n",
"Şimdi, ön işlenmiş veriyi görmek istersek, tarifimizi [**`prep()`**](https://recipes.tidymodels.org/reference/prep.html) ve [**`bake()`**](https://recipes.tidymodels.org/reference/bake.html) ile işlememiz gerekir.\n",
"\n",
"`prep()`: Eğitim setinden gerekli parametreleri tahmin eder ve bu parametreler daha sonra diğer veri setlerine uygulanabilir.\n",
"\n",
"`bake()`: Hazırlanmış bir tarifi alır ve işlemleri herhangi bir veri setine uygular.\n"
],
"metadata": {
"id": "Yb-7t7XcJaC8"
}
},
{
"cell_type": "code",
"execution_count": null,
"source": [
"# Prep and bake the recipe\r\n",
"preprocessed_df <- cuisines_recipe %>% \r\n",
" prep() %>% \r\n",
" bake(new_data = NULL) %>% \r\n",
" relocate(cuisine)\r\n",
"\r\n",
"# Display data\r\n",
"preprocessed_df %>% \r\n",
" slice_head(n = 5)\r\n",
"\r\n",
"# Quick summary stats\r\n",
"preprocessed_df %>% \r\n",
" introduce()"
],
"outputs": [],
"metadata": {
"id": "9QhSgdpxJl44"
}
},
{
"cell_type": "markdown",
"source": [
"Haydi şimdi mutfaklarımızın dağılımını kontrol edelim ve bunları dengesiz verilerle karşılaştıralım.\n"
],
"metadata": {
"id": "dmidELh_LdV7"
}
},
{
"cell_type": "code",
"execution_count": null,
"source": [
"# Distribution of cuisines\r\n",
"new_label_count <- preprocessed_df %>% \r\n",
" count(cuisine) %>% \r\n",
" arrange(desc(n))\r\n",
"\r\n",
"list(new_label_count = new_label_count,\r\n",
" old_label_count = old_label_count)"
],
"outputs": [],
"metadata": {
"id": "aSh23klBLwDz"
}
},
{
"cell_type": "markdown",
"source": [
"Yum! Veriler temiz, dengeli ve çok lezzetli 😋!\n",
"\n",
"> Normalde, bir tarif genellikle modelleme için bir ön işlemci olarak kullanılır ve bir veri setine modellemeye hazır hale getirmek için hangi adımların uygulanması gerektiğini tanımlar. Bu durumda, genellikle (önceki derslerimizde gördüğümüz gibi) bir `workflow()` kullanılır, tarifleri manuel olarak tahmin etmek yerine.\n",
">\n",
"> Bu nedenle, tidymodels kullanırken genellikle tarifleri **`prep()`** ve **`bake()`** yapmanız gerekmez, ancak tariflerin beklentilerinizi karşılayıp karşılamadığını doğrulamak için bizim durumumuzda olduğu gibi bu işlevler faydalı olabilir.\n",
">\n",
"> Bir hazırlanmış tarifi **`new_data = NULL`** ile **`bake()`** ettiğinizde, tarifi tanımlarken sağladığınız veriyi geri alırsınız, ancak ön işleme adımlarından geçmiş olur.\n",
"\n",
"Şimdi bu verinin bir kopyasını gelecekteki derslerde kullanmak için kaydedelim:\n"
],
"metadata": {
"id": "HEu80HZ8L7ae"
}
},
{
"cell_type": "code",
"execution_count": null,
"source": [
"# Save preprocessed data\r\n",
"write_csv(preprocessed_df, \"../../../data/cleaned_cuisines_R.csv\")"
],
"outputs": [],
"metadata": {
"id": "cBmCbIgrMOI6"
}
},
{
"cell_type": "markdown",
"source": [
"Bu yeni CSV artık kök veri klasöründe bulunabilir.\n",
"\n",
"**🚀Meydan Okuma**\n",
"\n",
"Bu müfredat birkaç ilginç veri seti içeriyor. `data` klasörlerini inceleyin ve ikili veya çok sınıflı sınıflandırma için uygun olabilecek veri setleri içerip içermediğini kontrol edin. Bu veri seti hakkında hangi soruları sorardınız?\n",
"\n",
"## [**Ders sonrası test**](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/20/)\n",
"\n",
"## **Gözden Geçirme ve Kendi Kendine Çalışma**\n",
"\n",
"- [package themis](https://github.com/tidymodels/themis)'e göz atın. Dengesiz veriyle başa çıkmak için başka hangi teknikleri kullanabiliriz?\n",
"\n",
"- Tidy models [referans web sitesi](https://www.tidymodels.org/start/).\n",
"\n",
"- H. Wickham ve G. Grolemund, [*R for Data Science: Görselleştirme, Modelleme, Dönüştürme, Düzenleme ve Veri İçe Aktarma*](https://r4ds.had.co.nz/).\n",
"\n",
"#### TEŞEKKÜRLER:\n",
"\n",
"[`Allison Horst`](https://twitter.com/allison_horst/) R'yi daha sıcak ve ilgi çekici hale getiren harika çizimler oluşturduğu için. Daha fazla çizimi onun [galerisinde](https://www.google.com/url?q=https://github.com/allisonhorst/stats-illustrations&sa=D&source=editors&ust=1626380772530000&usg=AOvVaw3zcfyCizFQZpkSLzxiiQEM) bulabilirsiniz.\n",
"\n",
"[Cassie Breviu](https://www.twitter.com/cassieview) ve [Jen Looper](https://www.twitter.com/jenlooper) bu modülün orijinal Python versiyonunu oluşturdukları için ♥️\n",
"\n",
"<p >\n",
" <img src=\"../../images/r_learners_sm.jpeg\"\n",
" width=\"600\"/>\n",
" <figcaption>@allison_horst tarafından yapılmış sanat eseri</figcaption>\n"
],
"metadata": {
"id": "WQs5621pMGwf"
}
},
{
"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"
]
}
]
}