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

654 lines
25 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-10-11T12:34:44+00:00",
"source_file": "4-Classification/3-Classifiers-2/solution/R/lesson_12-R.ipynb",
"language_code": "et"
}
},
"cells": [
{
"cell_type": "markdown",
"metadata": {
"id": "jsFutf_ygqSx"
},
"source": [
"# Koosta klassifikatsioonimudel: Maitsvad Aasia ja India köögid\n"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "HD54bEefgtNO"
},
"source": [
"## Köögi klassifikaatorid 2\n",
"\n",
"Selles teises klassifikatsiooniõppetunnis uurime `rohkem viise`, kuidas kategoriseerida andmeid. Samuti õpime, millised on tagajärjed ühe klassifikaatori valimisel teise asemel.\n",
"\n",
"### [**Eelloengu viktoriin**](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/23/)\n",
"\n",
"### **Eeltingimus**\n",
"\n",
"Eeldame, et olete läbinud eelnevad õppetunnid, kuna jätkame mõningate varem õpitud kontseptsioonidega.\n",
"\n",
"Selleks õppetunniks vajame järgmisi pakette:\n",
"\n",
"- `tidyverse`: [tidyverse](https://www.tidyverse.org/) on [R-pakettide kogum](https://www.tidyverse.org/packages), mis on loodud selleks, et muuta andmeteadus kiiremaks, lihtsamaks ja lõbusamaks!\n",
"\n",
"- `tidymodels`: [tidymodels](https://www.tidymodels.org/) raamistik on [pakettide kogum](https://www.tidymodels.org/packages/), mis on mõeldud modelleerimiseks ja masinõppeks.\n",
"\n",
"- `themis`: [themis pakett](https://themis.tidymodels.org/) pakub lisaretsepte tasakaalustamata andmetega tegelemiseks.\n",
"\n",
"Saate need paigaldada järgmiselt:\n",
"\n",
"`install.packages(c(\"tidyverse\", \"tidymodels\", \"kernlab\", \"themis\", \"ranger\", \"xgboost\", \"kknn\"))`\n",
"\n",
"Alternatiivselt kontrollib allolev skript, kas teil on selle mooduli läbimiseks vajalikud paketid olemas, ja paigaldab need vajadusel.\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": [
"Nüüd alustame hoogsalt!\n",
"\n",
"## **1. Klassifikatsioonikaart**\n",
"\n",
"Meie [eelmises tunnis](https://github.com/microsoft/ML-For-Beginners/tree/main/4-Classification/2-Classifiers-1) püüdsime vastata küsimusele: kuidas valida mitme mudeli vahel? Suures osas sõltub see andmete omadustest ja probleemist, mida soovime lahendada (näiteks klassifikatsioon või regressioon?).\n",
"\n",
"Varem õppisime erinevate võimaluste kohta, mis on olemas andmete klassifitseerimiseks, kasutades Microsofti spikrit. Pythoni masinõppe raamistik Scikit-learn pakub sarnast, kuid detailsemat spikrit, mis aitab veelgi täpsemalt valida sobivaid hindajaid (teine termin klassifikaatorite kohta):\n",
"\n",
"<p >\n",
" <img src=\"../../../../../../translated_images/et/map.e963a6a51349425a.webp\"\n",
" width=\"700\"/>\n",
" <figcaption></figcaption>\n"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "u1i3xRIVg7vG"
},
"source": [
"> Näpunäide: [vaata seda kaarti veebis](https://scikit-learn.org/stable/tutorial/machine_learning_map/) ja klõpsa teekonnal, et lugeda dokumentatsiooni.\n",
">\n",
"> [Tidymodels'i viitesait](https://www.tidymodels.org/find/parsnip/#models) pakub samuti suurepärast dokumentatsiooni erinevate mudelitüüpide kohta.\n",
"\n",
"### **Plaani ülevaade** 🗺️\n",
"\n",
"See kaart on väga kasulik, kui sul on oma andmetest selge arusaam, kuna saad selle teekondadel \"kõndida\" ja teha otsuseid:\n",
"\n",
"- Meil on \\>50 näidist\n",
"\n",
"- Me tahame ennustada kategooriat\n",
"\n",
"- Meil on märgistatud andmed\n",
"\n",
"- Meil on vähem kui 100K näidist\n",
"\n",
"- ✨ Saame valida Linear SVC\n",
"\n",
"- Kui see ei tööta, kuna meil on numbrilised andmed\n",
"\n",
" - Võime proovida ✨ KNeighbors Classifier'it\n",
"\n",
" - Kui see ei tööta, proovime ✨ SVC ja ✨ Ensemble Classifiers'it\n",
"\n",
"See on väga kasulik teekond, mida järgida. Nüüd, asume asja kallale, kasutades [tidymodels](https://www.tidymodels.org/) modelleerimisraamistikku: järjepidevat ja paindlikku R-pakettide kogumit, mis on loodud hea statistilise praktika edendamiseks 😊.\n",
"\n",
"## 2. Andmete jagamine ja tasakaalustamata andmekogumiga tegelemine.\n",
"\n",
"Eelmistest tundidest õppisime, et meie köökide vahel oli ühiseid koostisosi. Samuti oli köökide arv jaotunud üsna ebaühtlaselt.\n",
"\n",
"Sellega tegeleme järgmiselt:\n",
"\n",
"- Kõige tavalisemate koostisosade eemaldamine, mis tekitavad segadust erinevate köökide vahel, kasutades `dplyr::select()`.\n",
"\n",
"- Kasutame `recipe`'i, mis eeltöötleb andmeid, et need modelleerimiseks valmis seada, rakendades `üle-sampling` algoritmi.\n",
"\n",
"Oleme eelnevalt neid samme juba käsitlenud, seega peaks see olema lihtne 🥳!\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": [
"### Kuidas toime tulla tasakaalustamata andmetega\n",
"\n",
"Tasakaalustamata andmed mõjutavad sageli mudeli jõudlust negatiivselt. Paljud mudelid töötavad kõige paremini, kui vaatluste arv on võrdne, ja seetõttu kipuvad nad tasakaalustamata andmetega hätta jääma.\n",
"\n",
"Tasakaalustamata andmekogumitega toimetulemiseks on peamiselt kaks viisi:\n",
"\n",
"- vähemuses oleva klassi vaatlustele lisamine: `Üle-sampling`, näiteks SMOTE algoritmi kasutamine, mis sünteetiliselt genereerib vähemuses oleva klassi uusi näiteid, kasutades nende juhtumite lähimaid naabreid.\n",
"\n",
"- enamuses oleva klassi vaatlustest eemaldamine: `Alam-sampling`\n",
"\n",
"Eelmises tunnis näitasime, kuidas tasakaalustamata andmekogumitega toime tulla, kasutades `retsepti`. Retsepti võib mõelda kui plaani, mis kirjeldab, milliseid samme tuleks andmekogumile rakendada, et see oleks valmis andmeanalüüsiks. Meie puhul soovime, et meie `treeningkogumis` oleks köökide arv ühtlaselt jaotatud. Asume asja kallale.\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": [
"Nüüd oleme valmis mudeleid treenima 👩‍💻👨‍💻!\n",
"\n",
"## 3. Multinomiaalse regressiooni mudelitest kaugemale\n",
"\n",
"Eelmises tunnis vaatasime multinomiaalse regressiooni mudeleid. Uurime nüüd mõningaid paindlikumaid klassifitseerimismudeleid.\n",
"\n",
"### Toetavate vektorite masinad\n",
"\n",
"Klassifitseerimise kontekstis on `Toetavate vektorite masinad` masinõppe meetod, mis püüab leida *hüpertasandi*, mis \"kõige paremini\" eraldab klassid. Vaatame lihtsat näidet:\n",
"\n",
"<p >\n",
" <img src=\"../../../../../../translated_images/et/svm.621ae7b516d678e0.webp\"\n",
" width=\"300\"/>\n",
" <figcaption>https://commons.wikimedia.org/w/index.php?curid=22877598</figcaption>\n"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "C4Wsd0vZhXYu"
},
"source": [
"H1~ ei eralda klasse. H2~ eraldab, kuid ainult väikese vahega. H3~ eraldab maksimaalse vahega.\n",
"\n",
"#### Lineaarne toetusvektori klassifikaator\n",
"\n",
"Toetusvektori klasterdamine (SVC) kuulub masinõppe tehnikate toetusvektori masinate perekonda. SVC-s valitakse hüpertasand, mis eraldab `enamiku` treeningandmetest korrektselt, kuid `võib valesti klassifitseerida` mõned andmepunktid. Lubades mõnel punktil olla valel poolel, muutub SVM vastupidavamaks kõrvalekallete suhtes ja seega paremaks uute andmete üldistamisel. Parameetrit, mis reguleerib seda rikkumist, nimetatakse `kuluks`, mille vaikeväärtus on 1 (vt `help(\"svm_poly\")`).\n",
"\n",
"Loome lineaarse SVC, määrates polünoomse SVM-i mudelis `degree = 1`.\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": [
"Nüüd, kui oleme salvestanud eeltöötluse sammud ja mudeli spetsifikatsiooni *töövoogu*, saame jätkata lineaarse SVC treenimist ja samal ajal tulemusi hinnata. Jõudlusmõõdikute jaoks loome mõõdikute komplekti, mis hindab: `täpsust`, `tundlikkust`, `positiivset prognoositud väärtust` ja `F-mõõdet`.\n",
"\n",
"> `augment()` lisab antud andmetele veeru(d) ennustuste jaoks.\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": [
"#### Toetuste vektormasin\n",
"\n",
"Toetuste vektormasin (SVM) on toetuste vektorklassifikaatori laiendus, mis võimaldab klasside vahel mittelineaarset piiri. Sisuliselt kasutavad SVM-id *tuuma trikki*, et suurendada tunnuste ruumi ja kohanduda klasside vaheliste mittelineaarsete seostega. Üks populaarne ja äärmiselt paindlik tuumafunktsioon, mida SVM-id kasutavad, on *radiaalne baasfunktsioon.* Vaatame, kuidas see meie andmetel toimib.\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": [
"Palju parem 🤩!\n",
"\n",
"> ✅ Palun vaata:\n",
">\n",
"> - [*Toetavate vektorite masinad*](https://bradleyboehmke.github.io/HOML/svm.html), Hands-on Machine Learning with R\n",
">\n",
"> - [*Toetavate vektorite masinad*](https://www.statlearning.com/), An Introduction to Statistical Learning with Applications in R\n",
">\n",
"> lisalugemiseks.\n",
"\n",
"### Lähima naabri klassifikaatorid\n",
"\n",
"*K*-lähima naabri (KNN) algoritm ennustab iga vaatluse põhjal selle *sarnasuse* teiste vaatluste suhtes.\n",
"\n",
"Sobitame ühe meie andmetele.\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": [
"Tundub, et see mudel ei tööta eriti hästi. Tõenäoliselt mudeli argumentide muutmine (vaata `help(\"nearest_neighbor\")`) parandab mudeli jõudlust. Kindlasti proovi seda.\n",
"\n",
"> ✅ Vaata:\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",
"> et rohkem teada saada *K*-lähimate naabrite klassifikaatorite kohta.\n",
"\n",
"### Ansambli klassifikaatorid\n",
"\n",
"Ansambli algoritmid töötavad mitme baasmudeli kombineerimise teel, et luua optimaalne mudel, kas:\n",
"\n",
"`bagging`: rakendades *keskmistamisfunktsiooni* baasmudelite kogumile\n",
"\n",
"`boosting`: luues järjestikuseid mudeleid, mis üksteist täiendavad, et parandada ennustusvõimet.\n",
"\n",
"Alustame Random Foresti mudeli proovimisega, mis loob suure kogumi otsustuspuud ja rakendab keskmistamisfunktsiooni, et saada parem üldine mudel.\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": [
"Tubli töö 👏!\n",
"\n",
"Proovime nüüd ka Boosted Tree mudelit.\n",
"\n",
"Boosted Tree on ansamblimeetod, mis loob järjestikuste otsustuspuude seeria, kus iga puu sõltub eelnevate puude tulemustest, püüdes järk-järgult vähendada viga. See keskendub valesti klassifitseeritud elementide kaaludele ja kohandab järgmise klassifikaatori sobivust, et viga parandada.\n",
"\n",
"Selle mudeli sobitamiseks on erinevaid viise (vaata `help(\"boost_tree\")`). Selles näites sobitame Boosted Tree mudeli `xgboost` mootoriga.\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": [
"> ✅ Palun vaata:\n",
">\n",
"> - [Masinõpe sotsiaalteadlastele](https://cimentadaj.github.io/ml_socsci/tree-based-methods.html#random-forests)\n",
">\n",
"> - [Praktiline masinõpe R-iga](https://bradleyboehmke.github.io/HOML/)\n",
">\n",
"> - [Statistilise õppimise sissejuhatus rakendustega R-is](https://www.statlearning.com/)\n",
">\n",
"> - <https://algotech.netlify.app/blog/xgboost/> - Uurib AdaBoost mudelit, mis on hea alternatiiv xgboostile.\n",
">\n",
"> et rohkem teada saada ansambelklassifikaatorite kohta.\n",
"\n",
"## 4. Lisa - mitme mudeli võrdlemine\n",
"\n",
"Oleme selles laboris sobitanud üsna palju mudeleid 🙌. Erinevate eeltöötluskomplektide ja/või mudelispetsifikatsioonidega paljude töövoogude loomine ning seejärel jõudlusmõõdikute ükshaaval arvutamine võib muutuda tüütuks või koormavaks.\n",
"\n",
"Vaatame, kas saame seda lahendada, luues funktsiooni, mis sobitab koolitusandmetele töövoogude loendi ja tagastab testandmete põhjal jõudlusmõõdikud. Kasutame selleks [purrr](https://purrr.tidyverse.org/) paketist funktsioone `map()` ja `map_dfr()`, et rakendada funktsioone iga loendi elemendi suhtes.\n",
"\n",
"> [`map()`](https://purrr.tidyverse.org/reference/map.html) funktsioonid võimaldavad asendada paljud for-tsüklid koodiga, mis on nii lühem kui ka lihtsam lugeda. Parim koht [`map()`](https://purrr.tidyverse.org/reference/map.html) funktsioonide kohta õppimiseks on [iteratsiooni peatükk](http://r4ds.had.co.nz/iteration.html) raamatus \"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": [
"Kutsume oma funktsiooni ja võrdleme mudelite täpsust.\n"
]
},
{
"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/) pakett võimaldab kasutajatel luua ja hõlpsasti sobitada suurt hulka mudeleid, kuid on peamiselt mõeldud töötamiseks resampleerimistehnikatega, nagu `ristvalideerimine`, meetod, mida me pole veel käsitlenud.\n",
"\n",
"## **🚀Väljakutse**\n",
"\n",
"Igal neist tehnikatest on palju parameetreid, mida saab kohandada, näiteks `cost` SVM-ides, `neighbors` KNN-is, `mtry` (juhuslikult valitud ennustajad) Random Forestis.\n",
"\n",
"Uuri iga mudeli vaikimisi parameetreid ja mõtle, mida nende parameetrite kohandamine võiks tähendada mudeli kvaliteedi jaoks.\n",
"\n",
"Et saada rohkem teavet konkreetse mudeli ja selle parameetrite kohta, kasuta: `help(\"model\")` näiteks `help(\"rand_forest\")`.\n",
"\n",
"> Praktikas *hinnatakse* tavaliselt *parimaid väärtusi* treenides palju mudeleid `simuleeritud andmekogumil` ja mõõtes, kui hästi kõik need mudelid toimivad. Seda protsessi nimetatakse **häälestamiseks**.\n",
"\n",
"### [**Loengu järgne viktoriin**](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/24/)\n",
"\n",
"### **Ülevaade ja iseseisev õppimine**\n",
"\n",
"Nendes tundides on palju erialatermineid, seega võta hetk, et vaadata üle [see nimekiri](https://docs.microsoft.com/dotnet/machine-learning/resources/glossary?WT.mc_id=academic-77952-leestott) kasulikest mõistetest!\n",
"\n",
"#### TÄNUD:\n",
"\n",
"[`Allison Horst`](https://twitter.com/allison_horst/) suurepäraste illustratsioonide loomise eest, mis muudavad R-i kasutamise sõbralikumaks ja kaasahaaravamaks. Leia rohkem illustratsioone tema [galeriist](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) ja [Jen Looper](https://www.twitter.com/jenlooper) selle mooduli algse Python-versiooni loomise eest ♥️\n",
"\n",
"Head õppimist,\n",
"\n",
"[Eric](https://twitter.com/ericntay), Gold Microsoft Learn Student Ambassador.\n",
"\n",
"<p >\n",
" <img src=\"../../../../../../translated_images/et/r_learners_sm.f9199f76f1e2e493.webp\"\n",
" width=\"569\"/>\n",
" <figcaption>Illustratsioon: @allison_horst</figcaption>\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"\n---\n\n**Lahtiütlus**: \nSee dokument on tõlgitud AI tõlketeenuse [Co-op Translator](https://github.com/Azure/co-op-translator) abil. Kuigi püüame tagada täpsust, palume arvestada, et automaatsed tõlked võivad sisaldada vigu või ebatäpsusi. Algne dokument selle algses keeles tuleks pidada autoriteetseks allikaks. Olulise teabe puhul soovitame kasutada professionaalset inimtõlget. Me ei vastuta selle tõlke kasutamisest tulenevate arusaamatuste või valesti tõlgenduste eest.\n"
]
}
]
}