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

650 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-04T08:35:13+00:00",
"source_file": "4-Classification/3-Classifiers-2/solution/R/lesson_12-R.ipynb",
"language_code": "cs"
}
},
"cells": [
{
"cell_type": "markdown",
"metadata": {
"id": "jsFutf_ygqSx"
},
"source": [
"# Vytvořte klasifikační model: Lahodné asijské a indické kuchyně\n"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "HD54bEefgtNO"
},
"source": [
"## Klasifikátory kuchyní 2\n",
"\n",
"V této druhé lekci o klasifikaci se podíváme na `další způsoby`, jak klasifikovat kategorická data. Také se zaměříme na důsledky výběru jednoho klasifikátoru oproti jinému.\n",
"\n",
"### [**Kvíz před lekcí**](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/23/)\n",
"\n",
"### **Předpoklady**\n",
"\n",
"Předpokládáme, že jste dokončili předchozí lekce, protože budeme navazovat na některé koncepty, které jsme se již naučili.\n",
"\n",
"Pro tuto lekci budeme potřebovat následující balíčky:\n",
"\n",
"- `tidyverse`: [tidyverse](https://www.tidyverse.org/) je [kolekce balíčků pro R](https://www.tidyverse.org/packages), která usnadňuje, zrychluje a zpříjemňuje práci s datovou vědou!\n",
"\n",
"- `tidymodels`: [tidymodels](https://www.tidymodels.org/) je rámec [kolekce balíčků](https://www.tidymodels.org/packages/) pro modelování a strojové učení.\n",
"\n",
"- `themis`: [balíček themis](https://themis.tidymodels.org/) poskytuje další kroky pro recepty, které řeší problém nevyvážených dat.\n",
"\n",
"Můžete je nainstalovat pomocí:\n",
"\n",
"`install.packages(c(\"tidyverse\", \"tidymodels\", \"kernlab\", \"themis\", \"ranger\", \"xgboost\", \"kknn\"))`\n",
"\n",
"Alternativně níže uvedený skript zkontroluje, zda máte balíčky potřebné k dokončení tohoto modulu, a v případě, že chybí, je nainstaluje.\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 klasifikace**\n",
"\n",
"V naší [předchozí lekci](https://github.com/microsoft/ML-For-Beginners/tree/main/4-Classification/2-Classifiers-1) jsme se snažili odpovědět na otázku: jak si vybrat mezi více modely? Do značné míry to závisí na charakteristikách dat a typu problému, který chceme řešit (například klasifikace nebo regrese?).\n",
"\n",
"Dříve jsme se seznámili s různými možnostmi, které máte při klasifikaci dat, pomocí přehledové tabulky od Microsoftu. Pythonův framework pro strojové učení, Scikit-learn, nabízí podobnou, ale podrobnější přehledovou tabulku, která vám může dále pomoci zúžit výběr odhadovačů (jiný termín pro 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štivte tuto mapu online](https://scikit-learn.org/stable/tutorial/machine_learning_map/) a klikněte na cestu, abyste si přečetli dokumentaci.\n",
">\n",
"> [Referenční stránka Tidymodels](https://www.tidymodels.org/find/parsnip/#models) také poskytuje vynikající dokumentaci o různých typech modelů.\n",
"\n",
"### **Plán** 🗺️\n",
"\n",
"Tato mapa je velmi užitečná, jakmile máte jasnou představu o svých datech, protože se můžete „procházet“ po jejích cestách k rozhodnutí:\n",
"\n",
"- Máme více než 50 vzorků\n",
"\n",
"- Chceme předpovědět kategorii\n",
"\n",
"- Máme označená data\n",
"\n",
"- Máme méně než 100 tisíc vzorků\n",
"\n",
"- ✨ Můžeme zvolit Linear SVC\n",
"\n",
"- Pokud to nefunguje, protože máme číselná data\n",
"\n",
" - Můžeme zkusit ✨ KNeighbors Classifier\n",
"\n",
" - Pokud to nefunguje, zkusíme ✨ SVC a ✨ Ensemble Classifiers\n",
"\n",
"Toto je velmi užitečná cesta, kterou se můžeme řídit. Teď se do toho pustíme pomocí [tidymodels](https://www.tidymodels.org/) frameworku pro modelování: konzistentní a flexibilní kolekce balíčků v R, vyvinutá pro podporu dobré statistické praxe 😊.\n",
"\n",
"## 2. Rozdělení dat a práce s nevyváženým datovým souborem.\n",
"\n",
"Z našich předchozích lekcí jsme se naučili, že existuje sada společných ingrediencí napříč našimi kuchyněmi. Také jsme zjistili, že rozložení počtu kuchyní bylo dost nerovnoměrné.\n",
"\n",
"S tím se vypořádáme takto:\n",
"\n",
"- Odstraníme nejběžnější ingredience, které vytvářejí zmatek mezi odlišnými kuchyněmi, pomocí `dplyr::select()`.\n",
"\n",
"- Použijeme `recipe`, který předzpracuje data, aby byla připravena pro modelování, aplikací algoritmu `over-sampling`.\n",
"\n",
"Toto jsme již probírali v předchozí lekci, 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": [
"### Práce s nevyváženými daty\n",
"\n",
"Nevyvážená data často negativně ovlivňují výkon modelu. Mnoho modelů dosahuje nejlepších výsledků, když je počet pozorování vyrovnaný, a proto mají tendenci mít problémy s nevyváženými daty.\n",
"\n",
"Existují dvě hlavní metody, jak pracovat s nevyváženými datovými sadami:\n",
"\n",
"- přidání pozorování do menšinové třídy: `Over-sampling`, například použitím algoritmu SMOTE, který synteticky generuje nové příklady menšinové třídy na základě nejbližších sousedů těchto případů.\n",
"\n",
"- odstranění pozorování z většinové třídy: `Under-sampling`\n",
"\n",
"V naší předchozí lekci jsme ukázali, jak pracovat s nevyváženými datovými sadami pomocí `receptu`. Recept si můžeme představit jako plán, který popisuje, jaké kroky by měly být aplikovány na datovou sadu, aby byla připravena pro analýzu dat. V našem případě chceme dosáhnout rovnoměrného rozložení počtu našich kuchyní v `trénovací sadě`. Pojďme se do toho pustit.\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": [
"Teď jsme připraveni trénovat modely 👩‍💻👨‍💻!\n",
"\n",
"## 3. Nad rámec multinomiálních regresních modelů\n",
"\n",
"V naší předchozí lekci jsme se zabývali multinomiálními regresními modely. Pojďme prozkoumat některé flexibilnější modely pro klasifikaci.\n",
"\n",
"### Support Vector Machines\n",
"\n",
"V kontextu klasifikace je `Support Vector Machines` technika strojového učení, která se snaží najít *hyperrovinu*, která \"nejlépe\" odděluje třídy. Podívejme se na jednoduchý pří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~ nerozděluje třídy. H2~ je rozděluje, ale pouze s malým okrajem. H3~ je rozděluje s maximálním okrajem.\n",
"\n",
"#### Lineární klasifikátor podpůrných vektorů\n",
"\n",
"Shlukování pomocí podpůrných vektorů (SVC) je součástí rodiny technik strojového učení založených na podpůrných vektorech. V SVC je hyperrovina zvolena tak, aby správně oddělila `většinu` tréninkových pozorování, ale `může nesprávně klasifikovat` několik pozorování. Tím, že umožníme některým bodům být na nesprávné straně, se SVM stává odolnějším vůči odlehlým hodnotám, což vede k lepší generalizaci na nová data. Parametr, který reguluje toto porušení, se nazývá `cost` a má výchozí hodnotu 1 (viz `help(\"svm_poly\")`).\n",
"\n",
"Vytvořme lineární SVC nastavením `degree = 1` v polynomiálním modelu SVM.\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": [
"Nyní, když jsme zachytili kroky předzpracování a specifikaci modelu do *workflow*, můžeme pokračovat s trénováním lineárního SVC a zároveň vyhodnocovat výsledky. Pro metriky výkonu vytvořme sadu metrik, která bude hodnotit: `přesnost`, `citlivost`, `Pozitivní prediktivní hodnotu` a `F míru`.\n",
"\n",
"> `augment()` přidá sloupec/sloupce s predikcemi do daných dat.\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šířením support vector classifier, které umožňuje zohlednit nelineární hranici mezi třídami. V podstatě SVM využívají *kernel trick* k rozšíření prostoru příznaků, aby se přizpůsobily nelineárním vztahům mezi třídami. Jednou z populárních a velmi flexibilních kernel funkcí používaných v SVM je *Radial basis function.* Podívejme se, jak si povede na našich datech.\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": [
"Mnohem lepší 🤩!\n",
"\n",
"> ✅ Podívejte se:\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",
"> pro další čtení.\n",
"\n",
"### Klasifikátory nejbližšího souseda\n",
"\n",
"*K*-nejbližší soused (KNN) je algoritmus, ve kterém je každé pozorování předpovězeno na základě jeho *podobnosti* s ostatními pozorováními.\n",
"\n",
"Pojďme ho aplikovat na naše data.\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á se, že tento model nefunguje příliš dobře. Pravděpodobně změna parametrů modelu (viz `help(\"nearest_neighbor\")`) zlepší jeho výkon. Určitě to vyzkoušejte.\n",
"\n",
"> ✅ Podívejte se:\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",
"> pro více informací o klasifikátorech *K*-Nearest Neighbors.\n",
"\n",
"### Ensemble klasifikátory\n",
"\n",
"Ensemble algoritmy fungují tak, že kombinují více základních odhadů, aby vytvořily optimální model buď:\n",
"\n",
"`bagging`: použitím *průměrovací funkce* na kolekci základních modelů\n",
"\n",
"`boosting`: vytvořením sekvence modelů, které na sebe navazují a zlepšují prediktivní výkon.\n",
"\n",
"Začněme tím, že vyzkoušíme model Random Forest, který vytváří velkou kolekci rozhodovacích stromů a poté aplikuje průměrovací funkci pro vytvoření lepšího 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áce 👏!\n",
"\n",
"Pojďme také experimentovat s modelem Boosted Tree.\n",
"\n",
"Boosted Tree definuje ensemble metodu, která vytváří sérii sekvenčních rozhodovacích stromů, kde každý strom závisí na výsledcích předchozích stromů ve snaze postupně snižovat chybu. Zaměřuje se na váhy nesprávně klasifikovaných položek a upravuje přizpůsobení pro další klasifikátor, aby chybu napravil.\n",
"\n",
"Existují různé způsoby, jak tento model přizpůsobit (viz `help(\"boost_tree\")`). V tomto příkladu budeme přizpůsobovat Boosted trees pomocí 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": [
"> ✅ Podívejte se:\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/> - Zkoumá model AdaBoost, který je dobrou alternativou k xgboost.\n",
">\n",
"> pro více informací o Ensemble klasifikátorech.\n",
"\n",
"## 4. Extra - porovnání více modelů\n",
"\n",
"V tomto cvičení jsme vytvořili poměrně velké množství modelů 🙌. Může být únavné nebo zdlouhavé vytvářet mnoho workflowů z různých sad předzpracování a/nebo specifikací modelů a poté jeden po druhém počítat metriky výkonu.\n",
"\n",
"Podívejme se, zda to můžeme vyřešit vytvořením funkce, která aplikuje seznam workflowů na trénovací sadu a poté vrátí metriky výkonu na základě testovací sady. Použijeme `map()` a `map_dfr()` z balíčku [purrr](https://purrr.tidyverse.org/) k aplikaci funkcí na každý prvek seznamu.\n",
"\n",
"> Funkce [`map()`](https://purrr.tidyverse.org/reference/map.html) vám umožňují nahradit mnoho for smyček kódem, který je stručnější a snadněji čitelný. Nejlepší místo, kde se naučit o funkcích [`map()`](https://purrr.tidyverse.org/reference/map.html), je [kapitola o iteraci](http://r4ds.had.co.nz/iteration.html) v 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íček umožňuje uživatelům vytvářet a snadno aplikovat velké množství modelů, ale je primárně navržen pro práci s technikami resamplingu, jako je `cross-validation`, přístup, který teprve budeme probírat.\n",
"\n",
"## **🚀Výzva**\n",
"\n",
"Každá z těchto technik má velké množství parametrů, které můžete upravovat, například `cost` u SVM, `neighbors` u KNN, `mtry` (náhodně vybraní prediktory) u Random Forest.\n",
"\n",
"Prozkoumejte výchozí parametry každého z nich a zamyslete se nad tím, co by úprava těchto parametrů znamenala pro kvalitu modelu.\n",
"\n",
"Chcete-li zjistit více o konkrétním modelu a jeho parametrech, použijte: `help(\"model\")`, například `help(\"rand_forest\")`.\n",
"\n",
"> V praxi obvykle *odhadujeme* *nejlepší hodnoty* těchto parametrů tím, že trénujeme mnoho modelů na `simulovaném datovém souboru` a měříme, jak dobře všechny tyto modely fungují. Tento proces se nazývá **ladění**.\n",
"\n",
"### [**Kvíz po přednášce**](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/24/)\n",
"\n",
"### **Přehled & Samostudium**\n",
"\n",
"V těchto lekcích je hodně odborných termínů, takže si udělejte chvíli na přezkoumání [tohoto seznamu](https://docs.microsoft.com/dotnet/machine-learning/resources/glossary?WT.mc_id=academic-77952-leestott) užitečné terminologie!\n",
"\n",
"#### DĚKUJEME:\n",
"\n",
"[`Allison Horst`](https://twitter.com/allison_horst/) za vytvoření úžasných ilustrací, které činí R přívětivějším a poutavějším. Další ilustrace najdete v její [galerii](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 vytvoření původní verze tohoto modulu v Pythonu ♥️\n",
"\n",
"Šťastné učení,\n",
"\n",
"[Eric](https://twitter.com/ericntay), Zlatý ambasador Microsoft Learn Student.\n",
"\n",
"<p >\n",
" <img src=\"../../images/r_learners_sm.jpeg\"\n",
" width=\"569\"/>\n",
" <figcaption>Ilustrace od @allison_horst</figcaption>\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"\n---\n\n**Upozornění**: \nTento dokument byl přeložen pomocí služby pro automatický překlad [Co-op Translator](https://github.com/Azure/co-op-translator). I když se snažíme o co největší přesnost, mějte prosím na paměti, že automatické překlady mohou obsahovat chyby nebo nepřesnosti. Původní dokument v jeho původním jazyce by měl být považován za závazný zdroj. Pro důležité informace doporučujeme profesionální lidský překlad. Neodpovídáme za žádná nedorozumění nebo nesprávné výklady vyplývající z použití tohoto překladu.\n"
]
}
]
}