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

650 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-09-06T14:46:56+00:00",
"source_file": "4-Classification/3-Classifiers-2/solution/R/lesson_12-R.ipynb",
"language_code": "sv"
}
},
"cells": [
{
"cell_type": "markdown",
"metadata": {
"id": "jsFutf_ygqSx"
},
"source": [
"# Bygg en klassificeringsmodell: Utsökta asiatiska och indiska rätter\n"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "HD54bEefgtNO"
},
"source": [
"## Klassificerare för kök 2\n",
"\n",
"I denna andra lektion om klassificering kommer vi att utforska `fler sätt` att klassificera kategoriska data. Vi kommer också att lära oss om konsekvenserna av att välja en klassificerare framför en annan.\n",
"\n",
"### [**Quiz före föreläsningen**](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/23/)\n",
"\n",
"### **Förkunskaper**\n",
"\n",
"Vi antar att du har slutfört de tidigare lektionerna eftersom vi kommer att bygga vidare på några koncept vi lärde oss tidigare.\n",
"\n",
"För denna lektion behöver vi följande paket:\n",
"\n",
"- `tidyverse`: [tidyverse](https://www.tidyverse.org/) är en [samling av R-paket](https://www.tidyverse.org/packages) som är utformade för att göra datavetenskap snabbare, enklare och roligare!\n",
"\n",
"- `tidymodels`: [tidymodels](https://www.tidymodels.org/) är ett [ramverk av paket](https://www.tidymodels.org/packages/) för modellering och maskininlärning.\n",
"\n",
"- `themis`: [themis-paketet](https://themis.tidymodels.org/) tillhandahåller extra receptsteg för att hantera obalanserad data.\n",
"\n",
"Du kan installera dem med:\n",
"\n",
"`install.packages(c(\"tidyverse\", \"tidymodels\", \"kernlab\", \"themis\", \"ranger\", \"xgboost\", \"kknn\"))`\n",
"\n",
"Alternativt kan skriptet nedan kontrollera om du har de paket som krävs för att slutföra denna modul och installera dem åt dig om de saknas.\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. En klassificeringskarta**\n",
"\n",
"I vår [föregående lektion](https://github.com/microsoft/ML-For-Beginners/tree/main/4-Classification/2-Classifiers-1) försökte vi besvara frågan: hur väljer vi mellan flera modeller? Till stor del beror det på egenskaperna hos datan och typen av problem vi vill lösa (till exempel klassificering eller regression).\n",
"\n",
"Tidigare lärde vi oss om de olika alternativen du har när du klassificerar data med hjälp av Microsofts fusklapp. Python's Machine Learning-ramverk, Scikit-learn, erbjuder en liknande men mer detaljerad fusklapp som kan hjälpa dig att ytterligare begränsa dina estimatorer (ett annat ord för klassificerare):\n",
"\n",
"<p >\n",
" <img src=\"../../images/map.png\"\n",
" width=\"700\"/>\n",
" <figcaption></figcaption>\n"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "u1i3xRIVg7vG"
},
"source": [
"> Tips: [besök den här kartan online](https://scikit-learn.org/stable/tutorial/machine_learning_map/) och klicka längs vägen för att läsa dokumentationen.\n",
">\n",
"> [Tidymodels referenssida](https://www.tidymodels.org/find/parsnip/#models) erbjuder också utmärkt dokumentation om olika typer av modeller.\n",
"\n",
"### **Planen** 🗺️\n",
"\n",
"Den här kartan är väldigt användbar när du har en tydlig förståelse för din data, eftersom du kan \"vandra\" längs dess vägar mot ett beslut:\n",
"\n",
"- Vi har \\>50 prover\n",
"\n",
"- Vi vill förutsäga en kategori\n",
"\n",
"- Vi har märkt data\n",
"\n",
"- Vi har färre än 100K prover\n",
"\n",
"- ✨ Vi kan välja en Linear SVC\n",
"\n",
"- Om det inte fungerar, eftersom vi har numerisk data\n",
"\n",
" - Kan vi prova en ✨ KNeighbors Classifier\n",
"\n",
" - Om det inte fungerar, prova ✨ SVC och ✨ Ensemble Classifiers\n",
"\n",
"Det här är en väldigt användbar väg att följa. Nu ska vi dyka rakt in i det med [tidymodels](https://www.tidymodels.org/) modelleringsramverket: en konsekvent och flexibel samling av R-paket utvecklade för att främja god statistisk praxis 😊.\n",
"\n",
"## 2. Dela upp data och hantera obalanserade dataset.\n",
"\n",
"Från våra tidigare lektioner lärde vi oss att det fanns en uppsättning vanliga ingredienser över våra kök. Dessutom fanns det en ganska ojämn fördelning i antalet kök.\n",
"\n",
"Vi kommer att hantera detta genom att\n",
"\n",
"- Ta bort de vanligaste ingredienserna som skapar förvirring mellan olika kök, med hjälp av `dplyr::select()`.\n",
"\n",
"- Använda ett `recipe` som förbehandlar data för att göra den redo för modellering genom att tillämpa en `over-sampling`-algoritm.\n",
"\n",
"Vi tittade redan på detta i den tidigare lektionen, så det här borde gå som en dans 🥳!\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": [
"### Hantera obalanserad data\n",
"\n",
"Obalanserad data påverkar ofta modellens prestanda negativt. Många modeller presterar bäst när antalet observationer är lika, och har därför en tendens att ha svårt med obalanserad data.\n",
"\n",
"Det finns huvudsakligen två sätt att hantera obalanserade datasätt:\n",
"\n",
"- lägga till observationer till minoritetsklassen: `Över-sampling`, t.ex. med hjälp av en SMOTE-algoritm som syntetiskt genererar nya exempel av minoritetsklassen genom att använda närmaste grannar till dessa fall.\n",
"\n",
"- ta bort observationer från majoritetsklassen: `Under-sampling`\n",
"\n",
"I vår tidigare lektion visade vi hur man hanterar obalanserade datasätt med hjälp av ett `recept`. Ett recept kan ses som en ritning som beskriver vilka steg som ska tillämpas på ett datasätt för att göra det redo för dataanalys. I vårt fall vill vi ha en jämn fördelning av antalet kök i vår `träningsuppsättning`. Låt oss sätta igång!\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": [
"Nu är vi redo att träna modeller 👩‍💻👨‍💻!\n",
"\n",
"## 3. Utöver multinomiala regressionsmodeller\n",
"\n",
"I vår tidigare lektion tittade vi på multinomiala regressionsmodeller. Låt oss utforska några mer flexibla modeller för klassificering.\n",
"\n",
"### Support Vector Machines\n",
"\n",
"I klassificeringssammanhang är `Support Vector Machines` en maskininlärningsteknik som försöker hitta ett *hyperplan* som \"bäst\" separerar klasserna. Låt oss titta på ett enkelt exempel:\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~ separerar inte klasserna. H2~ gör det, men endast med en liten marginal. H3~ separerar dem med maximal marginal.\n",
"\n",
"#### Linjär Support Vector Classifier\n",
"\n",
"Support-Vector clustering (SVC) är en del av Support-Vector-maskinerna inom ML-tekniker. I SVC väljs hyperplanet för att korrekt separera `de flesta` av träningsobservationerna, men `kan felklassificera` några observationer. Genom att tillåta vissa punkter att vara på fel sida blir SVM mer robust mot avvikelser och därmed bättre på att generalisera till ny data. Parametern som reglerar denna överträdelse kallas `cost` och har ett standardvärde på 1 (se `help(\"svm_poly\")`).\n",
"\n",
"Låt oss skapa en linjär SVC genom att sätta `degree = 1` i en polynomisk SVM-modell.\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": [
"Nu när vi har sammanställt förbehandlingsstegen och modellspecifikationen i ett *arbetsflöde*, kan vi gå vidare och träna den linjära SVC och samtidigt utvärdera resultaten. För prestandamått, låt oss skapa en uppsättning mått som kommer att utvärdera: `accuracy`, `sensitivity`, `Positive Predicted Value` och `F Measure`.\n",
"\n",
"> `augment()` kommer att lägga till kolumn(er) för förutsägelser till den angivna datan.\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) är en vidareutveckling av support vector classifier för att hantera en icke-linjär gräns mellan klasserna. I grund och botten använder SVMs *kernel-tricket* för att utöka funktionsutrymmet och anpassa sig till icke-linjära relationer mellan klasser. En populär och mycket flexibel kernel-funktion som används av SVMs är *Radial basis function.* Låt oss se hur den presterar på vår data.\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": [
"Mycket bättre 🤩!\n",
"\n",
"> ✅ Vänligen 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",
"> för vidare läsning.\n",
"\n",
"### Närmaste granne-klassificerare\n",
"\n",
"*K*-närmsta granne (KNN) är en algoritm där varje observation förutsägs baserat på dess *likhet* med andra observationer.\n",
"\n",
"Låt oss anpassa en till vår 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": [
"Det verkar som att den här modellen inte presterar särskilt bra. Förmodligen kan modellens prestanda förbättras genom att ändra argumenten (se `help(\"nearest_neighbor\")`). Se till att testa detta.\n",
"\n",
"> ✅ Vänligen 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",
"> för att lära dig mer om *K*-Närmaste Grannar-klassificerare.\n",
"\n",
"### Ensembleklassificerare\n",
"\n",
"Ensemblealgoritmer fungerar genom att kombinera flera basmodeller för att skapa en optimal modell antingen genom:\n",
"\n",
"`bagging`: att använda en *medelvärdesfunktion* på en samling av basmodeller\n",
"\n",
"`boosting`: att bygga en sekvens av modeller som bygger på varandra för att förbättra den prediktiva prestandan.\n",
"\n",
"Låt oss börja med att testa en Random Forest-modell, som bygger en stor samling beslutsträd och sedan använder en medelvärdesfunktion för att skapa en bättre övergripande modell.\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": [
"Bra jobbat 👏!\n",
"\n",
"Låt oss också experimentera med en Boosted Tree-modell.\n",
"\n",
"Boosted Tree definierar en ensemblemetod som skapar en serie sekventiella beslutsträd där varje träd beror på resultaten från tidigare träd i ett försök att gradvis minska felet. Den fokuserar på vikterna för felklassificerade objekt och justerar passformen för nästa klassificerare för att korrigera.\n",
"\n",
"Det finns olika sätt att passa denna modell (se `help(\"boost_tree\")`). I detta exempel kommer vi att passa Boosted trees via `xgboost`-motorn.\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": [
"> ✅ Vänligen se:\n",
">\n",
"> - [Machine Learning för samhällsvetare](https://cimentadaj.github.io/ml_socsci/tree-based-methods.html#random-forests)\n",
">\n",
"> - [Hands-on Machine Learning med R](https://bradleyboehmke.github.io/HOML/)\n",
">\n",
"> - [En introduktion till statistisk inlärning med applikationer i R](https://www.statlearning.com/)\n",
">\n",
"> - <https://algotech.netlify.app/blog/xgboost/> - Utforskar AdaBoost-modellen som är ett bra alternativ till xgboost.\n",
">\n",
"> för att lära dig mer om ensembleklassificerare.\n",
"\n",
"## 4. Extra - jämföra flera modeller\n",
"\n",
"Vi har anpassat ganska många modeller i denna labb 🙌. Det kan bli tröttsamt eller jobbigt att skapa många arbetsflöden från olika uppsättningar av förbehandlingsmetoder och/eller modellspecifikationer och sedan beräkna prestandamåtten en efter en.\n",
"\n",
"Låt oss se om vi kan lösa detta genom att skapa en funktion som anpassar en lista med arbetsflöden på träningsuppsättningen och sedan returnerar prestandamåtten baserat på testuppsättningen. Vi kommer att använda `map()` och `map_dfr()` från paketet [purrr](https://purrr.tidyverse.org/) för att tillämpa funktioner på varje element i en lista.\n",
"\n",
"> [`map()`](https://purrr.tidyverse.org/reference/map.html)-funktioner låter dig ersätta många for-loopar med kod som både är mer kortfattad och lättare att läsa. Det bästa stället att lära sig om [`map()`](https://purrr.tidyverse.org/reference/map.html)-funktionerna är [kapitlet om iteration](http://r4ds.had.co.nz/iteration.html) i R för 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/) paketet gör det möjligt för användare att skapa och enkelt anpassa ett stort antal modeller, men är främst utformat för att fungera med omprovningstekniker som `cross-validation`, en metod vi ännu inte har täckt.\n",
"\n",
"## **🚀Utmaning**\n",
"\n",
"Var och en av dessa tekniker har ett stort antal parametrar som du kan justera, till exempel `cost` i SVMs, `neighbors` i KNN, `mtry` (Slumpmässigt Valda Prediktorer) i Random Forest.\n",
"\n",
"Undersök standardparametrarna för var och en och fundera på vad justering av dessa parametrar skulle innebära för modellens kvalitet.\n",
"\n",
"För att ta reda på mer om en specifik modell och dess parametrar, använd: `help(\"model\")` t.ex. `help(\"rand_forest\")`\n",
"\n",
"> I praktiken brukar vi *estimera* de *bästa värdena* för dessa genom att träna många modeller på en `simulerad datamängd` och mäta hur bra alla dessa modeller presterar. Denna process kallas **tuning**.\n",
"\n",
"### [**Quiz efter föreläsningen**](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/24/)\n",
"\n",
"### **Granskning & Självstudier**\n",
"\n",
"Det finns mycket facktermer i dessa lektioner, så ta en stund att gå igenom [denna lista](https://docs.microsoft.com/dotnet/machine-learning/resources/glossary?WT.mc_id=academic-77952-leestott) med användbar terminologi!\n",
"\n",
"#### TACK TILL:\n",
"\n",
"[`Allison Horst`](https://twitter.com/allison_horst/) för att ha skapat de fantastiska illustrationerna som gör R mer välkomnande och engagerande. Hitta fler illustrationer i hennes [galleri](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) och [Jen Looper](https://www.twitter.com/jenlooper) för att ha skapat den ursprungliga Python-versionen av denna modul ♥️\n",
"\n",
"Lycka till med lärandet,\n",
"\n",
"[Eric](https://twitter.com/ericntay), Gold Microsoft Learn Student Ambassador.\n",
"\n",
"<p >\n",
" <img src=\"../../images/r_learners_sm.jpeg\"\n",
" width=\"569\"/>\n",
" <figcaption>Konstverk av @allison_horst</figcaption>\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"\n---\n\n**Ansvarsfriskrivning**: \nDetta dokument har översatts med hjälp av AI-översättningstjänsten [Co-op Translator](https://github.com/Azure/co-op-translator). Även om vi strävar efter noggrannhet, bör det noteras att automatiserade översättningar kan innehålla fel eller brister. Det ursprungliga dokumentet på dess originalspråk bör betraktas som den auktoritativa källan. För kritisk information rekommenderas professionell mänsklig översättning. Vi ansvarar inte för eventuella missförstånd eller feltolkningar som kan uppstå vid användning av denna översättning.\n"
]
}
]
}