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/3-Classifiers-2/solution/R/lesson_12-R.ipynb

650 lines
26 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": 0,
"metadata": {
"colab": {
"name": "lesson_12-R.ipynb",
"provenance": [],
"collapsed_sections": []
},
"kernelspec": {
"name": "ir",
"display_name": "R"
},
"language_info": {
"name": "R"
},
"coopTranslator": {
"original_hash": "fab50046ca413a38939d579f8432274f",
"translation_date": "2025-09-06T14:49:42+00:00",
"source_file": "4-Classification/3-Classifiers-2/solution/R/lesson_12-R.ipynb",
"language_code": "tr"
}
},
"cells": [
{
"cell_type": "markdown",
"metadata": {
"id": "jsFutf_ygqSx"
},
"source": [
"# Lezzetli Asya ve Hint Mutfağı: Bir sınıflandırma modeli oluşturun\n"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "HD54bEefgtNO"
},
"source": [
"## Mutfak Sınıflandırıcıları 2\n",
"\n",
"Bu ikinci sınıflandırma dersinde, kategorik verileri sınıflandırmanın `daha fazla yolunu` keşfedeceğiz. Ayrıca bir sınıflandırıcıyı diğerine tercih etmenin sonuçlarını öğreneceğiz.\n",
"\n",
"### [**Ders Öncesi Testi**](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/23/)\n",
"\n",
"### **Ön Koşul**\n",
"\n",
"Önceki dersleri tamamladığınızı varsayıyoruz, çünkü daha önce öğrendiğimiz bazı kavramları burada devam ettireceğiz.\n",
"\n",
"Bu ders 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",
"- `themis`: [themis paketi](https://themis.tidymodels.org/), Dengesiz Verilerle Çalışmak için Ek Tarif Adımları sağlar.\n",
"\n",
"Bu paketleri şu şekilde yükleyebilirsiniz:\n",
"\n",
"`install.packages(c(\"tidyverse\", \"tidymodels\", \"kernlab\", \"themis\", \"ranger\", \"xgboost\", \"kknn\"))`\n",
"\n",
"Alternatif olarak, 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"
]
},
{
"cell_type": "code",
"metadata": {
"id": "vZ57IuUxgyQt"
},
"source": [
"suppressWarnings(if (!require(\"pacman\"))install.packages(\"pacman\"))\n",
"\n",
"pacman::p_load(tidyverse, tidymodels, themis, kernlab, ranger, xgboost, kknn)"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "markdown",
"metadata": {
"id": "z22M-pj4g07x"
},
"source": [
"## **1. Bir sınıflandırma haritası**\n",
"\n",
"[Önceki dersimizde](https://github.com/microsoft/ML-For-Beginners/tree/main/4-Classification/2-Classifiers-1), şu soruyu ele almaya çalıştık: birden fazla model arasında nasıl seçim yaparız? Büyük ölçüde, bu seçim veri özelliklerine ve çözmek istediğimiz problemin türüne (örneğin sınıflandırma veya regresyon) bağlıdır.\n",
"\n",
"Daha önce, Microsoft'un cheat sheet'ini kullanarak verileri sınıflandırırken sahip olduğunuz çeşitli seçenekleri öğrenmiştik. Python'un Makine Öğrenimi çerçevesi olan Scikit-learn, benzer ancak daha ayrıntılı bir cheat sheet sunar ve bu, tahmincilerinizi (sınıflandırıcılar için başka bir terim) daha da daraltmanıza yardımcı olabilir:\n",
"\n",
"<p >\n",
" <img src=\"../../images/map.png\"\n",
" width=\"700\"/>\n",
" <figcaption></figcaption>\n"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "u1i3xRIVg7vG"
},
"source": [
"> İpucu: [bu haritayı çevrimiçi ziyaret edin](https://scikit-learn.org/stable/tutorial/machine_learning_map/) ve belgeleri okumak için yol boyunca tıklayın.\n",
">\n",
"> [Tidymodels referans sitesi](https://www.tidymodels.org/find/parsnip/#models) ayrıca farklı model türleri hakkında mükemmel bir dokümantasyon sunar.\n",
"\n",
"### **Plan** 🗺️\n",
"\n",
"Bu harita, verilerinizi net bir şekilde anladığınızda çok faydalıdır, çünkü yolları boyunca 'yürüyerek' bir karara varabilirsiniz:\n",
"\n",
"- \\>50 örneğimiz var\n",
"\n",
"- Bir kategori tahmin etmek istiyoruz\n",
"\n",
"- Etiketlenmiş verilerimiz var\n",
"\n",
"- 100K'dan az örneğimiz var\n",
"\n",
"- ✨ Linear SVC seçebiliriz\n",
"\n",
"- Eğer bu işe yaramazsa, çünkü sayısal verilerimiz var\n",
"\n",
" - ✨ KNeighbors Classifier deneyebiliriz\n",
"\n",
" - Eğer bu da işe yaramazsa, ✨ SVC ve ✨ Ensemble Classifiers deneyin\n",
"\n",
"Bu takip edilmesi çok faydalı bir yol. Şimdi, [tidymodels](https://www.tidymodels.org/) modelleme çerçevesini kullanarak işe koyulalım: iyi istatistiksel uygulamaları teşvik etmek için geliştirilmiş, tutarlı ve esnek bir R paketleri koleksiyonu 😊.\n",
"\n",
"## 2. Veriyi böl ve dengesiz veri setiyle başa çık.\n",
"\n",
"Önceki derslerimizden, mutfaklarımız arasında ortak olan bir dizi bileşen olduğunu öğrendik. Ayrıca, mutfakların sayısında oldukça eşitsiz bir dağılım vardı.\n",
"\n",
"Bunlarla şu şekilde başa çıkacağız:\n",
"\n",
"- Farklı mutfaklar arasında kafa karışıklığı yaratan en yaygın bileşenleri `dplyr::select()` kullanarak çıkaracağız.\n",
"\n",
"- Veriyi modellemeye hazırlamak için bir `recipe` kullanarak bir `over-sampling` algoritması uygulayacağız.\n",
"\n",
"Yukarıdakilere önceki derste zaten baktık, bu yüzden bu iş kolay olacak 🥳!\n"
]
},
{
"cell_type": "code",
"metadata": {
"id": "6tj_rN00hClA"
},
"source": [
"# Load the core Tidyverse and Tidymodels packages\n",
"library(tidyverse)\n",
"library(tidymodels)\n",
"\n",
"# Load the original cuisines data\n",
"df <- read_csv(file = \"https://raw.githubusercontent.com/microsoft/ML-For-Beginners/main/4-Classification/data/cuisines.csv\")\n",
"\n",
"# Drop id column, rice, garlic and ginger from our original data set\n",
"df_select <- df %>% \n",
" select(-c(1, rice, garlic, ginger)) %>%\n",
" # Encode cuisine column as categorical\n",
" mutate(cuisine = factor(cuisine))\n",
"\n",
"\n",
"# Create data split specification\n",
"set.seed(2056)\n",
"cuisines_split <- initial_split(data = df_select,\n",
" strata = cuisine,\n",
" prop = 0.7)\n",
"\n",
"# Extract the data in each split\n",
"cuisines_train <- training(cuisines_split)\n",
"cuisines_test <- testing(cuisines_split)\n",
"\n",
"# Display distribution of cuisines in the training set\n",
"cuisines_train %>% \n",
" count(cuisine) %>% \n",
" arrange(desc(n))"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "markdown",
"metadata": {
"id": "zFin5yw3hHb1"
},
"source": [
"### Dengesiz Verilerle Başa Çıkma\n",
"\n",
"Dengesiz veriler genellikle model performansı üzerinde olumsuz etkilere sahiptir. Birçok model, gözlem sayısının eşit olduğu durumlarda en iyi performansı gösterir ve bu nedenle dengesiz verilerle başa çıkmakta 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` (Aşırı örnekleme), örneğin, bir SMOTE algoritması kullanarak. Bu algoritma, azınlık sınıfının yeni örneklerini, bu vakaların en yakın komşularını kullanarak sentetik olarak üretir.\n",
"\n",
"- çoğunluk sınıfından gözlem çıkarmak: `Under-sampling` (Azaltılmış örnekleme)\n",
"\n",
"Önceki dersimizde, dengesiz veri setleriyle bir `recipe` (tarif) kullanarak nasıl başa çıkılacağını göstermiştik. Bir tarif, bir veri setine hangi adımların uygulanması gerektiğini tanımlayan bir plan olarak düşünülebilir. Bizim durumumuzda, `training set` (eğitim seti) için mutfak türlerimizin sayısında eşit bir dağılım elde etmek istiyoruz. Hadi başlayalım.\n"
]
},
{
"cell_type": "code",
"metadata": {
"id": "cRzTnHolhLWd"
},
"source": [
"# Load themis package for dealing with imbalanced data\n",
"library(themis)\n",
"\n",
"# Create a recipe for preprocessing training data\n",
"cuisines_recipe <- recipe(cuisine ~ ., data = cuisines_train) %>%\n",
" step_smote(cuisine) \n",
"\n",
"# Print recipe\n",
"cuisines_recipe"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "markdown",
"metadata": {
"id": "KxOQ2ORhhO81"
},
"source": [
"Artık modelleri eğitmeye hazırız 👩‍💻👨‍💻!\n",
"\n",
"## 3. Multinom regresyon modellerinin ötesinde\n",
"\n",
"Önceki dersimizde multinom regresyon modellerine baktık. Şimdi sınıflandırma için daha esnek modelleri keşfedelim.\n",
"\n",
"### Destek Vektör Makineleri\n",
"\n",
"Sınıflandırma bağlamında, `Destek Vektör Makineleri` sınıfları \"en iyi\" şekilde ayıran bir *hiper düzlem* bulmaya çalışan bir makine öğrenimi tekniğidir. Basit bir örneğe bakalım:\n",
"\n",
"<p >\n",
" <img src=\"../../images/svm.png\"\n",
" width=\"300\"/>\n",
" <figcaption>https://commons.wikimedia.org/w/index.php?curid=22877598</figcaption>\n"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "C4Wsd0vZhXYu"
},
"source": [
"H1~ sınıfları ayırmaz. H2~ ayırır, ancak yalnızca küçük bir boşlukla. H3~ ise sınıfları maksimum boşlukla ayırır.\n",
"\n",
"#### Doğrusal Destek Vektör Sınıflandırıcı\n",
"\n",
"Destek-Vektör kümeleme (SVC), ML teknikleri ailesinden Destek-Vektör makinelerinin bir alt dalıdır. SVC'de, hiper düzlem, eğitim gözlemlerinin `çoğunu` doğru bir şekilde ayıracak şekilde seçilir, ancak bazı gözlemleri `yanlış sınıflandırabilir`. Bazı noktaların yanlış tarafta olmasına izin vererek, SVM aykırı değerlere karşı daha dayanıklı hale gelir ve dolayısıyla yeni verilere daha iyi genelleme yapar. Bu ihlali düzenleyen parametre `maliyet` olarak adlandırılır ve varsayılan değeri 1'dir (bkz. `help(\"svm_poly\")`).\n",
"\n",
"Bir polinom SVM modelinde `degree = 1` ayarlayarak doğrusal bir SVC oluşturalım.\n"
]
},
{
"cell_type": "code",
"metadata": {
"id": "vJpp6nuChlBz"
},
"source": [
"# Make a linear SVC specification\n",
"svc_linear_spec <- svm_poly(degree = 1) %>% \n",
" set_engine(\"kernlab\") %>% \n",
" set_mode(\"classification\")\n",
"\n",
"# Bundle specification and recipe into a worklow\n",
"svc_linear_wf <- workflow() %>% \n",
" add_recipe(cuisines_recipe) %>% \n",
" add_model(svc_linear_spec)\n",
"\n",
"# Print out workflow\n",
"svc_linear_wf"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "markdown",
"metadata": {
"id": "rDs8cWNkhoqu"
},
"source": [
"Artık ön işleme adımlarını ve model spesifikasyonunu bir *iş akışına* dahil ettiğimize göre, linear SVC'yi eğitip sonuçları değerlendirerek devam edebiliriz. Performans metrikleri için, `accuracy`, `sensitivity`, `Positive Predicted Value` ve `F Measure` değerlendirecek bir metrik seti oluşturalım.\n",
"\n",
"> `augment()` verilen verilere tahminler için sütun(lar) ekleyecektir.\n"
]
},
{
"cell_type": "code",
"metadata": {
"id": "81wiqcwuhrnq"
},
"source": [
"# Train a linear SVC model\n",
"svc_linear_fit <- svc_linear_wf %>% \n",
" fit(data = cuisines_train)\n",
"\n",
"# Create a metric set\n",
"eval_metrics <- metric_set(ppv, sens, accuracy, f_meas)\n",
"\n",
"\n",
"# Make predictions and Evaluate model performance\n",
"svc_linear_fit %>% \n",
" augment(new_data = cuisines_test) %>% \n",
" eval_metrics(truth = cuisine, estimate = .pred_class)"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "markdown",
"metadata": {
"id": "0UFQvHf-huo3"
},
"source": [
"#### Destek Vektör Makinesi\n",
"\n",
"Destek vektör makinesi (SVM), sınıflar arasındaki doğrusal olmayan bir sınırı karşılamak için destek vektör sınıflandırıcısının bir uzantısıdır. Temelde, SVM'ler sınıflar arasındaki doğrusal olmayan ilişkileri uyarlamak için özellik uzayını genişletmek amacıyla *çekirdek hilesi*ni kullanır. SVM'ler tarafından kullanılan popüler ve son derece esnek bir çekirdek fonksiyonu *Radyal tabanlı fonksiyon*dur. Şimdi, verilerimiz üzerinde nasıl bir performans göstereceğini görelim.\n"
]
},
{
"cell_type": "code",
"metadata": {
"id": "-KX4S8mzhzmp"
},
"source": [
"set.seed(2056)\n",
"\n",
"# Make an RBF SVM specification\n",
"svm_rbf_spec <- svm_rbf() %>% \n",
" set_engine(\"kernlab\") %>% \n",
" set_mode(\"classification\")\n",
"\n",
"# Bundle specification and recipe into a worklow\n",
"svm_rbf_wf <- workflow() %>% \n",
" add_recipe(cuisines_recipe) %>% \n",
" add_model(svm_rbf_spec)\n",
"\n",
"\n",
"# Train an RBF model\n",
"svm_rbf_fit <- svm_rbf_wf %>% \n",
" fit(data = cuisines_train)\n",
"\n",
"\n",
"# Make predictions and Evaluate model performance\n",
"svm_rbf_fit %>% \n",
" augment(new_data = cuisines_test) %>% \n",
" eval_metrics(truth = cuisine, estimate = .pred_class)"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "markdown",
"metadata": {
"id": "QBFSa7WSh4HQ"
},
"source": [
"Çok daha iyi 🤩!\n",
"\n",
"> ✅ Lütfen bakınız:\n",
">\n",
"> - [*Destek Vektör Makineleri*](https://bradleyboehmke.github.io/HOML/svm.html), R ile Uygulamalı Makine Öğrenimi\n",
">\n",
"> - [*Destek Vektör Makineleri*](https://www.statlearning.com/), R ile İstatistiksel Öğrenime Giriş\n",
">\n",
"> daha fazla bilgi için.\n",
"\n",
"### En Yakın Komşu Sınıflandırıcılar\n",
"\n",
"*K*-en yakın komşu (KNN), her bir gözlemin diğer gözlemlere olan *benzerliğine* dayanarak tahmin edildiği bir algoritmadır.\n",
"\n",
"Haydi, verilerimize bir tane uygulayalım.\n"
]
},
{
"cell_type": "code",
"metadata": {
"id": "k4BxxBcdh9Ka"
},
"source": [
"# Make a KNN specification\n",
"knn_spec <- nearest_neighbor() %>% \n",
" set_engine(\"kknn\") %>% \n",
" set_mode(\"classification\")\n",
"\n",
"# Bundle recipe and model specification into a workflow\n",
"knn_wf <- workflow() %>% \n",
" add_recipe(cuisines_recipe) %>% \n",
" add_model(knn_spec)\n",
"\n",
"# Train a boosted tree model\n",
"knn_wf_fit <- knn_wf %>% \n",
" fit(data = cuisines_train)\n",
"\n",
"\n",
"# Make predictions and Evaluate model performance\n",
"knn_wf_fit %>% \n",
" augment(new_data = cuisines_test) %>% \n",
" eval_metrics(truth = cuisine, estimate = .pred_class)"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "markdown",
"metadata": {
"id": "HaegQseriAcj"
},
"source": [
"Bu modelin performansı pek iyi görünmüyor. Muhtemelen modelin argümanlarını değiştirmek (bkz. `help(\"nearest_neighbor\")`) model performansını artıracaktır. Mutlaka denemelisiniz.\n",
"\n",
"> ✅ Lütfen bakınız:\n",
">\n",
"> - [Hands-on Machine Learning with R](https://bradleyboehmke.github.io/HOML/)\n",
">\n",
"> - [An Introduction to Statistical Learning with Applications in R](https://www.statlearning.com/)\n",
">\n",
"> *K*-En Yakın Komşu sınıflandırıcıları hakkında daha fazla bilgi edinmek için.\n",
"\n",
"### Topluluk sınıflandırıcıları\n",
"\n",
"Topluluk algoritmaları, birden fazla temel tahmin ediciyi birleştirerek optimal bir model oluşturur. Bu, şu yöntemlerle yapılır:\n",
"\n",
"`bagging`: temel modellerin bir koleksiyonuna *ortalama alma fonksiyonu* uygulamak\n",
"\n",
"`boosting`: birbiri üzerine inşa edilen bir model dizisi oluşturarak tahmin performansını iyileştirmek.\n",
"\n",
"Hadi bir Random Forest modelini deneyerek başlayalım. Bu model, büyük bir karar ağacı koleksiyonu oluşturur ve ardından daha iyi bir genel model için bir ortalama alma fonksiyonu uygular.\n"
]
},
{
"cell_type": "code",
"metadata": {
"id": "49DPoVs6iK1M"
},
"source": [
"# Make a random forest specification\n",
"rf_spec <- rand_forest() %>% \n",
" set_engine(\"ranger\") %>% \n",
" set_mode(\"classification\")\n",
"\n",
"# Bundle recipe and model specification into a workflow\n",
"rf_wf <- workflow() %>% \n",
" add_recipe(cuisines_recipe) %>% \n",
" add_model(rf_spec)\n",
"\n",
"# Train a random forest model\n",
"rf_wf_fit <- rf_wf %>% \n",
" fit(data = cuisines_train)\n",
"\n",
"\n",
"# Make predictions and Evaluate model performance\n",
"rf_wf_fit %>% \n",
" augment(new_data = cuisines_test) %>% \n",
" eval_metrics(truth = cuisine, estimate = .pred_class)"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "markdown",
"metadata": {
"id": "RGVYwC_aiUWc"
},
"source": [
"Tebrikler 👏!\n",
"\n",
"Hadi bir de Boosted Tree modeliyle deney yapalım.\n",
"\n",
"Boosted Tree, bir dizi ardışık karar ağacı oluşturan ve her ağacın önceki ağaçların sonuçlarına bağlı olduğu bir topluluk yöntemini tanımlar. Amaç, hatayı kademeli olarak azaltmaktır. Bu yöntem, yanlış sınıflandırılmış öğelerin ağırlıklarına odaklanır ve bir sonraki sınıflandırıcıyı düzeltmek için uyumu ayarlar.\n",
"\n",
"Bu modeli oluşturmanın farklı yolları vardır (bkz. `help(\"boost_tree\")`). Bu örnekte, Boosted Tree'leri `xgboost` motoru aracılığıyla oluşturacağız.\n"
]
},
{
"cell_type": "code",
"metadata": {
"id": "Py1YWo-micWs"
},
"source": [
"# Make a boosted tree specification\n",
"boost_spec <- boost_tree(trees = 200) %>% \n",
" set_engine(\"xgboost\") %>% \n",
" set_mode(\"classification\")\n",
"\n",
"# Bundle recipe and model specification into a workflow\n",
"boost_wf <- workflow() %>% \n",
" add_recipe(cuisines_recipe) %>% \n",
" add_model(boost_spec)\n",
"\n",
"# Train a boosted tree model\n",
"boost_wf_fit <- boost_wf %>% \n",
" fit(data = cuisines_train)\n",
"\n",
"\n",
"# Make predictions and Evaluate model performance\n",
"boost_wf_fit %>% \n",
" augment(new_data = cuisines_test) %>% \n",
" eval_metrics(truth = cuisine, estimate = .pred_class)"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "markdown",
"metadata": {
"id": "zNQnbuejigZM"
},
"source": [
"> ✅ Lütfen bakınız:\n",
">\n",
"> - [Sosyal Bilimciler için Makine Öğrenimi](https://cimentadaj.github.io/ml_socsci/tree-based-methods.html#random-forests)\n",
">\n",
"> - [R ile Uygulamalı Makine Öğrenimi](https://bradleyboehmke.github.io/HOML/)\n",
">\n",
"> - [R Uygulamalarıyla İstatistiksel Öğrenime Giriş](https://www.statlearning.com/)\n",
">\n",
"> - <https://algotech.netlify.app/blog/xgboost/> - xgboost'a iyi bir alternatif olan AdaBoost modelini inceler.\n",
">\n",
"> Ensemble sınıflandırıcılar hakkında daha fazla bilgi edinmek için.\n",
"\n",
"## 4. Ekstra - birden fazla modeli karşılaştırma\n",
"\n",
"Bu laboratuvarda oldukça fazla model oluşturduk 🙌. Farklı ön işleme setlerinden ve/veya model tanımlarından birçok iş akışı oluşturmak ve ardından performans metriklerini tek tek hesaplamak yorucu veya zahmetli olabilir.\n",
"\n",
"Bunu, eğitim seti üzerinde bir iş akışı listesini eğiten ve ardından test setine dayalı performans metriklerini döndüren bir fonksiyon oluşturarak çözebilir miyiz, bir bakalım. Liste içindeki her bir elemana fonksiyon uygulamak için [purrr](https://purrr.tidyverse.org/) paketinden `map()` ve `map_dfr()` fonksiyonlarını kullanacağız.\n",
"\n",
"> [`map()`](https://purrr.tidyverse.org/reference/map.html) fonksiyonları, birçok for döngüsünü daha özlü ve okunması daha kolay bir kodla değiştirmenize olanak tanır. [`map()`](https://purrr.tidyverse.org/reference/map.html) fonksiyonları hakkında bilgi edinmek için en iyi yer, R for Data Science kitabındaki [iterasyon bölümü](http://r4ds.had.co.nz/iteration.html)dir.\n"
]
},
{
"cell_type": "code",
"metadata": {
"id": "Qzb7LyZnimd2"
},
"source": [
"set.seed(2056)\n",
"\n",
"# Create a metric set\n",
"eval_metrics <- metric_set(ppv, sens, accuracy, f_meas)\n",
"\n",
"# Define a function that returns performance metrics\n",
"compare_models <- function(workflow_list, train_set, test_set){\n",
" \n",
" suppressWarnings(\n",
" # Fit each model to the train_set\n",
" map(workflow_list, fit, data = train_set) %>% \n",
" # Make predictions on the test set\n",
" map_dfr(augment, new_data = test_set, .id = \"model\") %>%\n",
" # Select desired columns\n",
" select(model, cuisine, .pred_class) %>% \n",
" # Evaluate model performance\n",
" group_by(model) %>% \n",
" eval_metrics(truth = cuisine, estimate = .pred_class) %>% \n",
" ungroup()\n",
" )\n",
" \n",
"} # End of function"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "markdown",
"metadata": {
"id": "Fwa712sNisDA"
},
"source": []
},
{
"cell_type": "code",
"metadata": {
"id": "3i4VJOi2iu-a"
},
"source": [
"# Make a list of workflows\n",
"workflow_list <- list(\n",
" \"svc\" = svc_linear_wf,\n",
" \"svm\" = svm_rbf_wf,\n",
" \"knn\" = knn_wf,\n",
" \"random_forest\" = rf_wf,\n",
" \"xgboost\" = boost_wf)\n",
"\n",
"# Call the function\n",
"set.seed(2056)\n",
"perf_metrics <- compare_models(workflow_list = workflow_list, train_set = cuisines_train, test_set = cuisines_test)\n",
"\n",
"# Print out performance metrics\n",
"perf_metrics %>% \n",
" group_by(.metric) %>% \n",
" arrange(desc(.estimate)) %>% \n",
" slice_head(n=7)\n",
"\n",
"# Compare accuracy\n",
"perf_metrics %>% \n",
" filter(.metric == \"accuracy\") %>% \n",
" arrange(desc(.estimate))\n"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "markdown",
"metadata": {
"id": "KuWK_lEli4nW"
},
"source": [
"[**workflowset**](https://workflowsets.tidymodels.org/) paketi, kullanıcıların çok sayıda modeli oluşturmasını ve kolayca eğitmesini sağlar, ancak esas olarak `çapraz doğrulama` gibi yeniden örnekleme teknikleriyle çalışmak üzere tasarlanmıştır. Bu, henüz ele almadığımız bir yaklaşımdır.\n",
"\n",
"## **🚀Meydan Okuma**\n",
"\n",
"Bu tekniklerin her birinin, örneğin SVM'lerdeki `cost`, KNN'deki `neighbors`, Random Forest'taki `mtry` (Rastgele Seçilen Tahminciler) gibi ayarlayabileceğiniz çok sayıda parametresi vardır.\n",
"\n",
"Her birinin varsayılan parametrelerini araştırın ve bu parametreleri değiştirmenin modelin kalitesi açısından ne anlama gelebileceğini düşünün.\n",
"\n",
"Belirli bir model ve parametreleri hakkında daha fazla bilgi edinmek için şu komutu kullanabilirsiniz: `help(\"model\")` örneğin `help(\"rand_forest\")`.\n",
"\n",
"> Uygulamada, genellikle bu parametrelerin *en iyi değerlerini* tahmin etmek için bir `simüle edilmiş veri seti` üzerinde birçok model eğitir ve bu modellerin ne kadar iyi performans gösterdiğini ölçeriz. Bu sürece **tuning** (ince ayar) denir.\n",
"\n",
"### [**Ders Sonrası Testi**](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/24/)\n",
"\n",
"### **Gözden Geçirme ve Kendi Kendine Çalışma**\n",
"\n",
"Bu derslerde çok fazla teknik terim var, bu yüzden [bu listeyi](https://docs.microsoft.com/dotnet/machine-learning/resources/glossary?WT.mc_id=academic-77952-leestott) gözden geçirmek için bir dakikanızı ayırın. Faydalı terminolojiler içeriyor!\n",
"\n",
"#### TEŞEKKÜRLER:\n",
"\n",
"[`Allison Horst`](https://twitter.com/allison_horst/) R'ı daha sıcak ve ilgi çekici hale getiren harika illüstrasyonlar oluşturduğu için. Daha fazla illüstrasyonu [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",
"Keyifli Öğrenmeler,\n",
"\n",
"[Eric](https://twitter.com/ericntay), Gold Microsoft Learn Öğrenci Elçisi.\n",
"\n",
"<p >\n",
" <img src=\"../../images/r_learners_sm.jpeg\"\n",
" width=\"569\"/>\n",
" <figcaption>@allison_horst tarafından yapılmış bir çalışma</figcaption>\n"
]
},
{
"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ış anlamalar veya yanlış yorumlamalardan sorumlu değiliz.\n"
]
}
]
}