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

648 lines
26 KiB

{
"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:44:10+00:00",
"source_file": "4-Classification/3-Classifiers-2/solution/R/lesson_12-R.ipynb",
"language_code": "sk"
}
},
"cells": [
{
"cell_type": "markdown",
"metadata": {
"id": "jsFutf_ygqSx"
},
"source": []
},
{
"cell_type": "markdown",
"metadata": {
"id": "HD54bEefgtNO"
},
"source": [
"## Klasifikátory kuchýň 2\n",
"\n",
"V tejto druhej lekcii o klasifikácii sa pozrieme na `ďalšie spôsoby`, ako klasifikovať kategóriálne údaje. Tiež sa oboznámime s dôsledkami výberu jedného klasifikátora oproti inému.\n",
"\n",
"### [**Kvíz pred prednáškou**](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/23/)\n",
"\n",
"### **Predpoklady**\n",
"\n",
"Predpokladáme, že ste dokončili predchádzajúce lekcie, pretože budeme nadväzovať na niektoré koncepty, ktoré sme sa už naučili.\n",
"\n",
"Na túto lekciu budeme potrebovať nasledujúce balíky:\n",
"\n",
"- `tidyverse`: [tidyverse](https://www.tidyverse.org/) je [kolekcia balíkov pre R](https://www.tidyverse.org/packages), ktorá robí dátovú vedu rýchlejšou, jednoduchšou a zábavnejšou!\n",
"\n",
"- `tidymodels`: [tidymodels](https://www.tidymodels.org/) je [rámec balíkov](https://www.tidymodels.org/packages/) určený na modelovanie a strojové učenie.\n",
"\n",
"- `themis`: [balík themis](https://themis.tidymodels.org/) poskytuje dodatočné kroky pre recepty na riešenie nevyvážených údajov.\n",
"\n",
"Môžete ich nainštalovať pomocou:\n",
"\n",
"`install.packages(c(\"tidyverse\", \"tidymodels\", \"kernlab\", \"themis\", \"ranger\", \"xgboost\", \"kknn\"))`\n",
"\n",
"Prípadne, nasledujúci skript skontroluje, či máte nainštalované potrebné balíky na dokončenie tohto modulu, a v prípade, že chýbajú, ich nainštaluje za vás.\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. Mapa klasifikácie**\n",
"\n",
"V našej [predchádzajúcej lekcii](https://github.com/microsoft/ML-For-Beginners/tree/main/4-Classification/2-Classifiers-1) sme sa snažili odpovedať na otázku: ako si vybrať medzi viacerými modelmi? Do veľkej miery to závisí od charakteristík údajov a typu problému, ktorý chceme vyriešiť (napríklad klasifikácia alebo regresia?).\n",
"\n",
"Predtým sme sa naučili o rôznych možnostiach, ktoré máte pri klasifikácii údajov, pomocou prehľadovej tabuľky od Microsoftu. Pythonovský rámec pre strojové učenie, Scikit-learn, ponúka podobnú, ale podrobnejšiu prehľadovú tabuľku, ktorá vám môže ďalej pomôcť zúžiť výber vašich odhadovačov (iný výraz pre klasifikátory):\n",
"\n",
"<p >\n",
" <img src=\"../../images/map.png\"\n",
" width=\"700\"/>\n",
" <figcaption></figcaption>\n"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "u1i3xRIVg7vG"
},
"source": [
"> Tip: [navštívte túto mapu online](https://scikit-learn.org/stable/tutorial/machine_learning_map/) a kliknite na cestu, aby ste si prečítali dokumentáciu.\n",
">\n",
"> [Referenčná stránka Tidymodels](https://www.tidymodels.org/find/parsnip/#models) tiež poskytuje vynikajúcu dokumentáciu o rôznych typoch modelov.\n",
"\n",
"### **Plán** 🗺️\n",
"\n",
"Táto mapa je veľmi užitočná, ak máte jasné pochopenie svojich údajov, pretože sa môžete „prejsť“ po jej cestách k rozhodnutiu:\n",
"\n",
"- Máme viac ako 50 vzoriek\n",
"\n",
"- Chceme predpovedať kategóriu\n",
"\n",
"- Máme označené údaje\n",
"\n",
"- Máme menej ako 100K vzoriek\n",
"\n",
"- ✨ Môžeme si vybrať Linear SVC\n",
"\n",
"- Ak to nefunguje, keďže máme numerické údaje\n",
"\n",
" - Môžeme skúsiť ✨ KNeighbors Classifier\n",
"\n",
" - Ak to nefunguje, skúste ✨ SVC a ✨ Ensemble Classifiers\n",
"\n",
"Toto je veľmi užitočná cesta, ktorú sa oplatí nasledovať. Teraz sa do toho pustíme pomocou [tidymodels](https://www.tidymodels.org/) frameworku na modelovanie: konzistentnej a flexibilnej kolekcie balíkov v R, vyvinutej na podporu správnej štatistickej praxe 😊.\n",
"\n",
"## 2. Rozdelenie údajov a riešenie nevyváženého dátového súboru.\n",
"\n",
"Z našich predchádzajúcich lekcií sme sa naučili, že existuje súbor spoločných ingrediencií naprieč našimi kuchyňami. Tiež sme si všimli, že rozdelenie počtu kuchýň bolo dosť nerovnomerné.\n",
"\n",
"S týmto sa vysporiadame takto:\n",
"\n",
"- Odstránime najbežnejšie ingrediencie, ktoré spôsobujú zmätok medzi odlišnými kuchyňami, pomocou `dplyr::select()`.\n",
"\n",
"- Použijeme `recipe`, ktorý predspracuje údaje, aby boli pripravené na modelovanie, aplikovaním algoritmu `over-sampling`.\n",
"\n",
"Toto sme už prešli v predchádzajúcej lekcii, takže to bude hračka 🥳!\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": [
"### Riešenie nevyvážených údajov\n",
"\n",
"Nevyvážené údaje často negatívne ovplyvňujú výkon modelu. Mnohé modely dosahujú najlepšie výsledky, keď je počet pozorovaní rovnaký, a preto majú tendenciu zápasiť s nevyváženými údajmi.\n",
"\n",
"Existujú dva hlavné spôsoby, ako riešiť nevyvážené dátové súbory:\n",
"\n",
"- pridanie pozorovaní do minoritnej triedy: `Over-sampling`, napríklad pomocou algoritmu SMOTE, ktorý synteticky generuje nové príklady minoritnej triedy na základe najbližších susedov týchto prípadov.\n",
"\n",
"- odstránenie pozorovaní z majoritnej triedy: `Under-sampling`\n",
"\n",
"V našej predchádzajúcej lekcii sme ukázali, ako riešiť nevyvážené dátové súbory pomocou `recipe`. Recipe si môžete predstaviť ako plán, ktorý popisuje, aké kroky by sa mali aplikovať na dátový súbor, aby bol pripravený na analýzu údajov. V našom prípade chceme dosiahnuť rovnomerné rozdelenie počtu našich kuchýň pre náš `training set`. Poďme na to.\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": [
"Teraz sme pripravení trénovať modely 👩‍💻👨‍💻!\n",
"\n",
"## 3. Nad rámec multinomických regresných modelov\n",
"\n",
"V našej predchádzajúcej lekcii sme sa zaoberali multinomickými regresnými modelmi. Poďme preskúmať niektoré flexibilnejšie modely pre klasifikáciu.\n",
"\n",
"### Support Vector Machines.\n",
"\n",
"V kontexte klasifikácie je `Support Vector Machines` technika strojového učenia, ktorá sa snaží nájsť *hyperrovinu*, ktorá \"najlepšie\" oddeľuje triedy. Pozrime sa na jednoduchý príklad:\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~ neoddeľuje triedy. H2~ ich oddeľuje, ale iba s malým okrajom. H3~ ich oddeľuje s maximálnym okrajom.\n",
"\n",
"#### Lineárny Support Vector Classifier\n",
"\n",
"Support-Vector clustering (SVC) je súčasťou rodiny techník strojového učenia Support-Vector machines. V SVC je hyperplocha vybraná tak, aby správne oddelila `väčšinu` tréningových pozorovaní, ale `môže nesprávne klasifikovať` niektoré pozorovania. Tým, že umožníme niektorým bodom byť na nesprávnej strane, SVM sa stáva odolnejším voči odľahlým hodnotám, a tým lepšie generalizuje na nové dáta. Parameter, ktorý reguluje toto porušenie, sa nazýva `cost` a má predvolenú hodnotu 1 (pozri `help(\"svm_poly\")`).\n",
"\n",
"Vytvorme lineárny SVC nastavením `degree = 1` v polynomiálnom SVM modeli.\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": [
"Teraz, keď sme zachytili kroky predspracovania a špecifikáciu modelu do *workflow*, môžeme pokračovať a natrénovať lineárny SVC a zároveň vyhodnotiť výsledky. Pre metriky výkonu vytvorme súbor metrík, ktorý bude hodnotiť: `presnosť`, `citlivosť`, `pozitívnu prediktívnu hodnotu` a `F mieru`.\n",
"\n",
"> `augment()` pridá stĺpec/stĺpce s predikciami k daným údajom.\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": [
"#### Support Vector Machine\n",
"\n",
"Support vector machine (SVM) je rozšírením klasifikátora podporných vektorov, ktoré umožňuje zohľadniť nelineárnu hranicu medzi triedami. V podstate SVM využívajú *kernel trick* na rozšírenie priestoru vlastností, aby sa prispôsobili nelineárnym vzťahom medzi triedami. Jednou z populárnych a mimoriadne flexibilných funkcií jadra, ktorú SVM využívajú, je *Radial basis function.* Pozrime sa, ako bude fungovať na našich údajoch.\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": [
"Oveľa lepšie 🤩!\n",
"\n",
"> ✅ Pozrite si:\n",
">\n",
"> - [*Support Vector Machines*](https://bradleyboehmke.github.io/HOML/svm.html), Hands-on Machine Learning with R\n",
">\n",
"> - [*Support Vector Machines*](https://www.statlearning.com/), An Introduction to Statistical Learning with Applications in R\n",
">\n",
"> pre ďalšie čítanie.\n",
"\n",
"### Klasifikátory najbližšieho suseda\n",
"\n",
"Algoritmus *K*-najbližšieho suseda (KNN) predpovedá každé pozorovanie na základe jeho *podobnosti* s ostatnými pozorovaniami.\n",
"\n",
"Poďme ho aplikovať na naše dáta.\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": [
"Zdá sa, že tento model nefunguje až tak dobre. Pravdepodobne zmena argumentov modelu (pozrite si `help(\"nearest_neighbor\")`) zlepší jeho výkon. Určite to vyskúšajte.\n",
"\n",
"> ✅ Pozrite si:\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",
"> aby ste sa dozvedeli viac o klasifikátoroch *K*-Najbližších Susedov.\n",
"\n",
"### Ensemble klasifikátory\n",
"\n",
"Ensemble algoritmy fungujú tak, že kombinujú viacero základných odhadov, aby vytvorili optimálny model, buď:\n",
"\n",
"`bagging`: aplikáciou *priemerovacej funkcie* na kolekciu základných modelov\n",
"\n",
"`boosting`: vytváraním sekvencie modelov, ktoré na seba nadväzujú, aby zlepšili prediktívny výkon.\n",
"\n",
"Začnime tým, že vyskúšame model Random Forest, ktorý vytvára veľkú kolekciu rozhodovacích stromov a potom aplikuje priemerovaciu funkciu na vytvorenie lepšieho celkového modelu.\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": [
"Dobrá práca 👏!\n",
"\n",
"Poďme tiež experimentovať s modelom Boosted Tree.\n",
"\n",
"Boosted Tree definuje ensemble metódu, ktorá vytvára sériu sekvenčných rozhodovacích stromov, kde každý strom závisí od výsledkov predchádzajúcich stromov v snahe postupne znižovať chybu. Zameriava sa na váhy nesprávne klasifikovaných položiek a upravuje prispôsobenie pre ďalší klasifikátor, aby ich opravil.\n",
"\n",
"Existujú rôzne spôsoby, ako tento model prispôsobiť (pozri `help(\"boost_tree\")`). V tomto príklade prispôsobíme Boosted stromy pomocou enginu `xgboost`.\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": [
"> ✅ Pozrite si:\n",
">\n",
"> - [Machine Learning for Social Scientists](https://cimentadaj.github.io/ml_socsci/tree-based-methods.html#random-forests)\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",
"> - <https://algotech.netlify.app/blog/xgboost/> - Skúma model AdaBoost, ktorý je dobrou alternatívou k xgboost.\n",
">\n",
"> pre viac informácií o Ensemble klasifikátoroch.\n",
"\n",
"## 4. Extra - porovnanie viacerých modelov\n",
"\n",
"V tomto cvičení sme vytvorili pomerne veľké množstvo modelov 🙌. Môže byť únavné alebo náročné vytvárať množstvo workflowov z rôznych sád predspracovania a/alebo špecifikácií modelov a potom jeden po druhom vypočítavať metriky výkonnosti.\n",
"\n",
"Pozrime sa, či to môžeme vyriešiť vytvorením funkcie, ktorá aplikuje zoznam workflowov na tréningovú množinu a následne vráti metriky výkonnosti na základe testovacej množiny. Použijeme `map()` a `map_dfr()` z balíka [purrr](https://purrr.tidyverse.org/) na aplikáciu funkcií na každý prvok zoznamu.\n",
"\n",
"> Funkcie [`map()`](https://purrr.tidyverse.org/reference/map.html) vám umožňujú nahradiť mnoho for-cyklov kódom, ktorý je stručnejší a ľahšie čitateľný. Najlepším miestom na učenie sa o funkciách [`map()`](https://purrr.tidyverse.org/reference/map.html) je [kapitola o iterácii](http://r4ds.had.co.nz/iteration.html) v knihe R for Data Science.\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/) balík umožňuje používateľom vytvárať a jednoducho prispôsobovať veľké množstvo modelov, ale je primárne navrhnutý na prácu s technikami resamplingu, ako je `krížová validácia`, ktorú si ešte len preberieme.\n",
"\n",
"## **🚀Výzva**\n",
"\n",
"Každá z týchto techník má veľké množstvo parametrov, ktoré môžete upravovať, napríklad `cost` v SVM, `neighbors` v KNN, `mtry` (náhodne vybrané prediktory) v Random Forest.\n",
"\n",
"Preskúmajte predvolené parametre každého z nich a zamyslite sa nad tým, čo by úprava týchto parametrov znamenala pre kvalitu modelu.\n",
"\n",
"Ak chcete zistiť viac o konkrétnom modeli a jeho parametroch, použite: `help(\"model\")`, napr. `help(\"rand_forest\")`.\n",
"\n",
"> V praxi zvyčajne *odhadujeme* *najlepšie hodnoty* týchto parametrov trénovaním mnohých modelov na `simulovanom dátovom súbore` a meraním, ako dobre tieto modely fungujú. Tento proces sa nazýva **ladenie**.\n",
"\n",
"### [**Kvíz po prednáške**](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/24/)\n",
"\n",
"### **Prehľad a samostatné štúdium**\n",
"\n",
"V týchto lekciách je veľa odborných výrazov, preto si nájdite chvíľu na preštudovanie [tohto zoznamu](https://docs.microsoft.com/dotnet/machine-learning/resources/glossary?WT.mc_id=academic-77952-leestott) užitočnej terminológie!\n",
"\n",
"#### POĎAKOVANIE:\n",
"\n",
"[`Allison Horst`](https://twitter.com/allison_horst/) za vytvorenie úžasných ilustrácií, ktoré robia R prístupnejším a pútavejším. Viac ilustrácií nájdete v jej [galérii](https://www.google.com/url?q=https://github.com/allisonhorst/stats-illustrations&sa=D&source=editors&ust=1626380772530000&usg=AOvVaw3zcfyCizFQZpkSLzxiiQEM).\n",
"\n",
"[Cassie Breviu](https://www.twitter.com/cassieview) a [Jen Looper](https://www.twitter.com/jenlooper) za vytvorenie pôvodnej verzie tohto modulu v Pythone ♥️\n",
"\n",
"Šťastné učenie,\n",
"\n",
"[Eric](https://twitter.com/ericntay), Zlatý študentský ambasádor Microsoft Learn.\n",
"\n",
"<p >\n",
" <img src=\"../../images/r_learners_sm.jpeg\"\n",
" width=\"569\"/>\n",
" <figcaption>Ilustrácia od @allison_horst</figcaption>\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"\n---\n\n**Upozornenie**: \nTento dokument bol preložený pomocou služby na automatický preklad [Co-op Translator](https://github.com/Azure/co-op-translator). Aj keď sa snažíme o presnosť, upozorňujeme, že automatické preklady môžu obsahovať chyby alebo nepresnosti. Pôvodný dokument v jeho pôvodnom jazyku by mal byť považovaný za autoritatívny zdroj. Pre dôležité informácie sa odporúča profesionálny ľudský preklad. Nezodpovedáme za akékoľvek nedorozumenia alebo nesprávne interpretácie vyplývajúce z použitia tohto prekladu.\n"
]
}
]
}