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

655 lines
41 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-12-19T17:10:44+00:00",
"source_file": "4-Classification/3-Classifiers-2/solution/R/lesson_12-R.ipynb",
"language_code": "te"
}
},
"cells": [
{
"cell_type": "markdown",
"metadata": {
"id": "jsFutf_ygqSx"
},
"source": [
"# వర్గీకరణ మోడల్ నిర్మించండి: రుచికరమైన ఆసియన్లు మరియు భారతీయ వంటకాలు\n"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "HD54bEefgtNO"
},
"source": [
"## వంటక వర్గీకరణలు 2\n",
"\n",
"ఈ రెండవ వర్గీకరణ పాఠంలో, వర్గీకరణాత్మక డేటాను వర్గీకరించడానికి `మరిన్ని మార్గాలు` గురించి పరిశీలిస్తాము. ఒక వర్గీకర్తను మరొకదానిపై ఎంచుకోవడంలో ఉన్న ప్రభావాల గురించి కూడా నేర్చుకుంటాము.\n",
"\n",
"### [**పూర్వ-ఉపన్యాస క్విజ్**](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/23/)\n",
"\n",
"### **ముందస్తు అవసరం**\n",
"\n",
"మేము మీరు గత పాఠాలు పూర్తి చేశారని అనుకుంటున్నాము ఎందుకంటే మేము ముందుగా నేర్చుకున్న కొన్ని భావనలను కొనసాగించబోతున్నాము.\n",
"\n",
"ఈ పాఠం కోసం, మేము క్రింది ప్యాకేజీలను అవసరం:\n",
"\n",
"- `tidyverse`: [tidyverse](https://www.tidyverse.org/) అనేది డేటా సైన్స్‌ను వేగవంతం, సులభం మరియు మరింత సరదాగా చేయడానికి రూపొందించిన [R ప్యాకేజీల సేకరణ](https://www.tidyverse.org/packages).\n",
"\n",
"- `tidymodels`: [tidymodels](https://www.tidymodels.org/) ఫ్రేమ్‌వర్క్ అనేది మోడలింగ్ మరియు మెషీన్ లెర్నింగ్ కోసం [ప్యాకేజీల సేకరణ](https://www.tidymodels.org/packages/).\n",
"\n",
"- `themis`: [themis ప్యాకేజీ](https://themis.tidymodels.org/) అసమతుల్య డేటాతో వ్యవహరించడానికి అదనపు రెసిపీలు అందిస్తుంది.\n",
"\n",
"మీరు వాటిని ఇన్‌స్టాల్ చేసుకోవచ్చు:\n",
"\n",
"`install.packages(c(\"tidyverse\", \"tidymodels\", \"kernlab\", \"themis\", \"ranger\", \"xgboost\", \"kknn\"))`\n",
"\n",
"వేరే విధంగా, క్రింది స్క్రిప్ట్ మీరు ఈ మాడ్యూల్ పూర్తి చేయడానికి అవసరమైన ప్యాకేజీలు ఉన్నాయా లేదా అని తనిఖీ చేసి, అవి లేనప్పుడు వాటిని ఇన్‌స్టాల్ చేస్తుంది.\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",
"\n",
"## **1. ఒక వర్గీకరణ మ్యాప్**\n",
"\n",
"మన [మునుపటి పాఠంలో](https://github.com/microsoft/ML-For-Beginners/tree/main/4-Classification/2-Classifiers-1), మేము ఈ ప్రశ్నను పరిష్కరించడానికి ప్రయత్నించాము: మనం అనేక మోడల్స్ మధ్య ఎలా ఎంచుకోవాలి? చాలా మేరకు, ఇది డేటా లక్షణాలు మరియు మనం పరిష్కరించదలచుకున్న సమస్య రకంపై ఆధారపడి ఉంటుంది (ఉదాహరణకు వర్గీకరణ లేదా రిగ్రెషన్?)\n",
"\n",
"మునుపటి పాఠంలో, మైక్రోసాఫ్ట్ యొక్క చీట్ షీట్ ఉపయోగించి డేటాను వర్గీకరించేటప్పుడు మీకు ఉన్న వివిధ ఎంపికల గురించి నేర్చుకున్నాము. పైథాన్ యొక్క మెషీన్ లెర్నింగ్ ఫ్రేమ్‌వర్క్, స్కైకిట్-లెర్న్, ఒక సమానమైన కానీ మరింత సూక్ష్మమైన చీట్ షీట్‌ను అందిస్తుంది, ఇది మీ అంచనాదారులను (మరొక పదం వర్గీకరణకర్తలకు) మరింత సన్నిహితంగా తగ్గించడంలో సహాయపడుతుంది:\n",
"\n",
"<p >\n",
" <img src=\"../../../../../../translated_images/te/map.e963a6a51349425a.webp\"\n",
" width=\"700\"/>\n",
" <figcaption></figcaption>\n"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "u1i3xRIVg7vG"
},
"source": [
"> సూచన: [ఈ మ్యాప్‌ను ఆన్‌లైన్‌లో సందర్శించండి](https://scikit-learn.org/stable/tutorial/machine_learning_map/) మరియు దారిలో క్లిక్ చేసి డాక్యుమెంటేషన్ చదవండి.\n",
">\n",
"> [Tidymodels సూచిక సైట్](https://www.tidymodels.org/find/parsnip/#models) కూడా వివిధ రకాల మోడళ్ల గురించి అద్భుతమైన డాక్యుమెంటేషన్ అందిస్తుంది.\n",
"\n",
"### **ప్రణాళిక** 🗺️\n",
"\n",
"మీ డేటాను స్పష్టంగా అర్థం చేసుకున్న తర్వాత ఈ మ్యాప్ చాలా సహాయకారి, ఎందుకంటే మీరు దాని మార్గాల ద్వారా 'నడవచ్చు' నిర్ణయం తీసుకోవడానికి:\n",
"\n",
"- మాకు \\>50 నమూనాలు ఉన్నాయి\n",
"\n",
"- మేము ఒక వర్గాన్ని అంచనా వేయాలనుకుంటున్నాము\n",
"\n",
"- మాకు లేబుల్ చేయబడిన డేటా ఉంది\n",
"\n",
"- మాకు 100K కన్నా తక్కువ నమూనాలు ఉన్నాయి\n",
"\n",
"- ✨ మేము లీనియర్ SVC ఎంచుకోవచ్చు\n",
"\n",
"- అది పనిచేయకపోతే, ఎందుకంటే మాకు సంఖ్యాత్మక డేటా ఉంది\n",
"\n",
" - మేము ✨ KNeighbors క్లాసిఫైయర్ ప్రయత్నించవచ్చు\n",
"\n",
" - అది పనిచేయకపోతే, ✨ SVC మరియు ✨ ఎంసెంబుల్ క్లాసిఫైయర్లను ప్రయత్నించండి\n",
"\n",
"ఇది అనుసరించడానికి చాలా సహాయకారి మార్గం. ఇప్పుడు, [tidymodels](https://www.tidymodels.org/) మోడలింగ్ ఫ్రేమ్‌వర్క్ ఉపయోగించి నేరుగా ప్రారంభిద్దాం: ఇది మంచి గణాంక పద్ధతిని ప్రోత్సహించడానికి అభివృద్ధి చేయబడిన R ప్యాకేజీల సుసंगత మరియు సౌలభ్యమైన సేకరణ 😊.\n",
"\n",
"## 2. డేటాను విభజించి అసమతుల్య డేటా సెట్‌ను నిర్వహించండి.\n",
"\n",
"మా గత పాఠాల నుండి, మనం తెలుసుకున్నాము మన వంటకాలలో సాధారణ పదార్థాల సమూహం ఉంది. అలాగే, వంటకాల సంఖ్యలో అసమాన పంపిణీ ఉంది.\n",
"\n",
"మేము ఈ సమస్యలను ఇలా పరిష్కరిస్తాము\n",
"\n",
"- `dplyr::select()` ఉపయోగించి వేర్వేరు వంటకాల మధ్య గందరగోళం సృష్టించే అత్యంత సాధారణ పదార్థాలను తొలగించడం.\n",
"\n",
"- `over-sampling` అల్గోరిథం వర్తింపజేసి డేటాను మోడలింగ్‌కు సిద్ధం చేసే `recipe` ఉపయోగించడం.\n",
"\n",
"మేము ఈ విషయాలను గత పాఠంలో ఇప్పటికే చూశాము కాబట్టి ఇది చాలా సులభం 🥳!\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": [
"### అసమతుల్య డేటాతో వ్యవహరించడం\n",
"\n",
"అసమతుల్య డేటా తరచుగా మోడల్ పనితీరుపై ప్రతికూల ప్రభావాలు చూపుతుంది. చాలా మోడల్స్ గమనికల సంఖ్య సమానంగా ఉన్నప్పుడు ఉత్తమంగా పనిచేస్తాయి, అందువల్ల అసమతుల్య డేటాతో సమస్యలు ఎదుర్కొంటాయి.\n",
"\n",
"అసమతుల్య డేటా సెట్‌లతో వ్యవహరించడానికి ప్రధానంగా రెండు మార్గాలు ఉన్నాయి:\n",
"\n",
"- మైనారిటీ క్లాస్‌కు గమనికలు జోడించడం: `ఓవర్-సాంప్లింగ్` ఉదాహరణకు SMOTE అల్గోరిథం ఉపయోగించడం, ఇది ఈ కేసుల సమీప పొరుగువారిని ఉపయోగించి మైనారిటీ క్లాస్ యొక్క కొత్త ఉదాహరణలను సృజనాత్మకంగా ఉత్పత్తి చేస్తుంది.\n",
"\n",
"- మెజారిటీ క్లాస్ నుండి గమనికలు తీసివేయడం: `అండర్-సాంప్లింగ్`\n",
"\n",
"మా గత పాఠంలో, మేము `recipe` ఉపయోగించి అసమతుల్య డేటా సెట్‌లతో ఎలా వ్యవహరించాలో చూపించాము. ఒక recipe అనేది డేటా విశ్లేషణకు సిద్ధం చేయడానికి డేటా సెట్‌పై ఏ దశలను వర్తించాలో వివరించే బ్లూప్రింట్‌గా భావించవచ్చు. మా సందర్భంలో, మా `training set` కోసం వంటకాల సంఖ్యలో సమాన పంపిణీ ఉండాలని మేము కోరుకుంటున్నాము. దీని కోసం నేరుగా ప్రారంభిద్దాం.\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",
"\n",
"## 3. మల్టినోమియల్ రిగ్రెషన్ మోడల్స్ కంటే మించి\n",
"\n",
"మా గత పాఠంలో, మేము మల్టినోమియల్ రిగ్రెషన్ మోడల్స్‌ను చూశాము. వర్గీకరణ కోసం మరింత సౌకర్యవంతమైన కొన్ని మోడల్స్‌ను పరిశీలిద్దాం.\n",
"\n",
"### సపోర్ట్ వెక్టర్ మెషీన్లు.\n",
"\n",
"వర్గీకరణ సందర్భంలో, `సపోర్ట్ వెక్టర్ మెషీన్లు` అనేది ఒక మెషీన్ లెర్నింగ్ సాంకేతికత, ఇది తరగతులను \"మంచిగా\" వేరు చేసే *హైపర్ప్లేన్* ను కనుగొనడానికి ప్రయత్నిస్తుంది. ఒక సులభమైన ఉదాహరణను చూద్దాం:\n",
"\n",
"<p >\n",
" <img src=\"../../../../../../translated_images/te/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~ తరగతులను వేరుచేయదు. H2~ వేరుచేస్తుంది, కానీ కేవలం చిన్న మార్జిన్‌తో మాత్రమే. H3~ వాటిని గరిష్ట మార్జిన్‌తో వేరుచేస్తుంది.\n",
"\n",
"#### లీనియర్ సపోర్ట్ వెక్టర్ క్లాసిఫైయర్\n",
"\n",
"సపోర్ట్-వెక్టర్ క్లస్టరింగ్ (SVC) అనేది ML సాంకేతికతల సపోర్ట్-వెక్టర్ యంత్రాల కుటుంబంలో ఒక పిల్లవాడు. SVCలో, హైపర్ప్లేన్‌ను శిక్షణ పరిశీలనలలో `అధిక భాగాన్ని` సరిగా వేరుచేయడానికి ఎంచుకుంటారు, కానీ కొన్ని పరిశీలనలను `తప్పుగా వర్గీకరించవచ్చు`. కొన్ని పాయింట్లను తప్పు వైపున ఉంచుకోవడానికి అనుమతించడం ద్వారా, SVM అవుట్లయర్లకు మరింత రాబస్ట్గా మారుతుంది కాబట్టి కొత్త డేటాకు మెరుగైన సాధారణీకరణ ఉంటుంది. ఈ ఉల్లంఘనను నియంత్రించే పారామీటర్‌ను `cost` అని పిలుస్తారు, దీని డిఫాల్ట్ విలువ 1 (చూడండి `help(\"svm_poly\")`).\n",
"\n",
"పోలినోమియల్ SVM మోడల్‌లో `degree = 1` సెట్ చేసి లీనియర్ SVCని సృష్టిద్దాం.\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": [
"ఇప్పుడు మనం ప్రీప్రాసెసింగ్ దశలు మరియు మోడల్ స్పెసిఫికేషన్‌ను *workflow* లో నమోదు చేసుకున్నాము, కాబట్టి మనం linear SVC ను శిక్షణ ఇవ్వగలము మరియు ఫలితాలను అంచనా వేయగలము. పనితీరు ప్రమాణాల కోసం, మనం క్రింది వాటిని అంచనా వేయగల metric set ను సృష్టిద్దాం: `accuracy`, `sensitivity`, `Positive Predicted Value` మరియు `F Measure`\n",
"\n",
"> `augment()` ఇచ్చిన డేటాకు అంచనాల కోసం కాలమ్(లు)ను జోడిస్తుంది.\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": [
"#### సపోర్ట్ వెక్టర్ మెషీన్\n",
"\n",
"సపోర్ట్ వెక్టర్ మెషీన్ (SVM) అనేది తరగతుల మధ్య రేఖీయమైన సరిహద్దును మించిపోయే సపోర్ట్ వెక్టర్ క్లాసిఫయర్ యొక్క విస్తరణ. సారాంశంగా, SVMలు తరగతుల మధ్య రేఖీయ కాని సంబంధాలకు అనుగుణంగా ఫీచర్ స్థలాన్ని విస్తరించడానికి *కర్నెల్ ట్రిక్* ను ఉపయోగిస్తాయి. SVMలు ఉపయోగించే ఒక ప్రముఖ మరియు అత్యంత అనుకూలమైన కర్నెల్ ఫంక్షన్ *రేడియల్ బేసిస్ ఫంక్షన్* (Radial basis function). మన డేటాపై ఇది ఎలా ప్రదర్శిస్తుందో చూద్దాం.\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": [
"మంచిది 🤩!\n",
"\n",
"> ✅ దయచేసి చూడండి:\n",
">\n",
"> - [*సపోర్ట్ వెక్టర్ మెషీన్లు*](https://bradleyboehmke.github.io/HOML/svm.html), R తో హ్యాండ్స్-ఆన్ మెషీన్ లెర్నింగ్\n",
">\n",
"> - [*సపోర్ట్ వెక్టర్ మెషీన్లు*](https://www.statlearning.com/), R లో అనువర్తనాలతో గణాంకీయ లెర్నింగ్ కు పరిచయం\n",
">\n",
"> మరింత చదవడానికి.\n",
"\n",
"### సమీప పొరుగుల వర్గీకరణ\n",
"\n",
"*K*-సమీప పొరుగుడు (KNN) అనేది ఒక అల్గోరిథం, ఇందులో ప్రతి పరిశీలన దాని *సమానత్వం* ఆధారంగా ఇతర పరిశీలనలకు అంచనా వేయబడుతుంది.\n",
"\n",
"మన డేటాకు ఒకటి సరిపెట్టుకుందాం.\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": [
"ఈ మోడల్ అంతగా బాగా పనిచేయడం లేదు అనిపిస్తోంది. మోడల్ యొక్క ఆర్గ్యుమెంట్లను మార్చడం (చూడండి `help(\"nearest_neighbor\")`) మోడల్ పనితీరును మెరుగుపరచవచ్చు. దయచేసి దీన్ని ప్రయత్నించండి.\n",
"\n",
"> ✅ దయచేసి చూడండి:\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*-Nearest Neighbors క్లాసిఫైయర్ల గురించి మరింత తెలుసుకోవడానికి.\n",
"\n",
"### ఎన్‌సెంబుల్ క్లాసిఫైయర్లు\n",
"\n",
"ఎన్‌సెంబుల్ అల్గోరిథమ్స్ అనేవి అనేక బేస్ ఎస్టిమేటర్లను కలిపి ఒక ఆప్టిమల్ మోడల్‌ను ఉత్పత్తి చేస్తాయి, ఇది క్రింది విధంగా ఉంటుంది:\n",
"\n",
"`bagging`: బేస్ మోడల్స్ సేకరణపై *సగటు ఫంక్షన్* ను వర్తింపజేయడం\n",
"\n",
"`boosting`: ఒకదానిపై మరొకటి నిర్మించి ప్రిడిక్టివ్ పనితీరును మెరుగుపరచే మోడల్స్ సీక్వెన్స్‌ను నిర్మించడం.\n",
"\n",
"మనం మొదట రాండమ్ ఫారెస్ట్ మోడల్‌ను ప్రయత్నిద్దాం, ఇది పెద్ద సంఖ్యలో డిసిషన్ ట్రీలను నిర్మించి, మెరుగైన మొత్తం మోడల్ కోసం సగటు ఫంక్షన్‌ను వర్తింపజేస్తుంది.\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": [
"బాగుంది 👏!\n",
"\n",
"మనం Boosted Tree మోడల్‌తో కూడా ప్రయోగం చేద్దాం.\n",
"\n",
"Boosted Tree అనేది ఒక ఎంసెంబుల్ పద్ధతి, ఇది ఒక వరుసగా నిర్ణయ వృక్షాలను సృష్టిస్తుంది, ప్రతి వృక్షం గత వృక్షాల ఫలితాలపై ఆధారపడి, దోషాన్ని క్రమంగా తగ్గించడానికి ప్రయత్నిస్తుంది. ఇది తప్పుగా వర్గీకరించబడిన అంశాల బరువులపై దృష్టి సారించి, తదుపరి వర్గీకర్తకు సరైన సరిపోయేలా సర్దుబాటు చేస్తుంది.\n",
"\n",
"ఈ మోడల్‌ను సరిపెట్టడానికి వివిధ మార్గాలు ఉన్నాయి (`help(\"boost_tree\")` చూడండి). ఈ ఉదాహరణలో, మనం `xgboost` ఇంజిన్ ద్వారా Boosted trees ను సరిపెట్టబోతున్నాం.\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": [
"> ✅ దయచేసి చూడండి:\n",
">\n",
"> - [సామాజిక శాస్త్రజ్ఞుల కోసం మెషీన్ లెర్నింగ్](https://cimentadaj.github.io/ml_socsci/tree-based-methods.html#random-forests)\n",
">\n",
"> - [R తో హ్యాండ్స్-ఆన్ మెషీన్ లెర్నింగ్](https://bradleyboehmke.github.io/HOML/)\n",
">\n",
"> - [R లో అనువర్తనాలతో గణాంకీయ లెర్నింగ్ కు పరిచయం](https://www.statlearning.com/)\n",
">\n",
"> - <https://algotech.netlify.app/blog/xgboost/> - xgboost కు మంచి ప్రత్యామ్నాయం అయిన AdaBoost మోడల్ ను పరిశీలిస్తుంది.\n",
">\n",
"> ఎంసెంబుల్ క్లాసిఫైయర్ల గురించి మరింత తెలుసుకోవడానికి.\n",
"\n",
"## 4. అదనపు - బహుళ మోడల్స్ ను పోల్చడం\n",
"\n",
"మేము ఈ ప్రయోగశాలలో చాలా మోడల్స్ ను ఫిట్ చేసాము 🙌. వేర్వేరు ప్రీప్రాసెసర్ల సెట్‌లు మరియు/లేదా మోడల్ స్పెసిఫికేషన్ల నుండి అనేక వర్క్‌ఫ్లోలను సృష్టించడం మరియు ఆపై పనితీరు మెట్రిక్స్ ను ఒక్కొక్కటిగా లెక్కించడం కష్టంగా లేదా భారంగా మారవచ్చు.\n",
"\n",
"ఇది పరిష్కరించగలమా అని చూద్దాం, ట్రైనింగ్ సెట్ పై వర్క్‌ఫ్లోల జాబితాను ఫిట్ చేసే ఒక ఫంక్షన్ సృష్టించి, ఆపై టెస్ట్ సెట్ ఆధారంగా పనితీరు మెట్రిక్స్ ను తిరిగి ఇస్తుంది. జాబితాలోని ప్రతి అంశానికి ఫంక్షన్లను వర్తింపజేయడానికి [purrr](https://purrr.tidyverse.org/) ప్యాకేజీ నుండి `map()` మరియు `map_dfr()` ను ఉపయోగిస్తాము.\n",
"\n",
"> [`map()`](https://purrr.tidyverse.org/reference/map.html) ఫంక్షన్లు అనేక for లూప్‌లను మరింత సంక్షిప్తంగా మరియు చదవడానికి సులభంగా ఉండే కోడ్‌తో మార్చడానికి అనుమతిస్తాయి. [`map()`](https://purrr.tidyverse.org/reference/map.html) ఫంక్షన్ల గురించి తెలుసుకోవడానికి ఉత్తమ స్థలం R ఫర్ డేటా సైన్స్ లోని [ఇటరేషన్ అధ్యాయం](http://r4ds.had.co.nz/iteration.html).\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": [
"మన ఫంక్షన్‌ను పిలిచి, మోడల్స్ మధ్య ఖచ్చితత్వాన్ని పోల్చుకుందాం.\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": [
"\n",
"[**workflowset**](https://workflowsets.tidymodels.org/) ప్యాకేజ్ వినియోగదారులకు పెద్ద సంఖ్యలో మోడల్స్ సృష్టించడానికి మరియు సులభంగా ఫిట్ చేయడానికి అనుమతిస్తుంది కానీ ఇది ఎక్కువగా `cross-validation` వంటి రీసాంప్లింగ్ సాంకేతికతలతో పనిచేయడానికి రూపొందించబడింది, ఇది మనం ఇంకా కవర్ చేయాల్సి ఉంది.\n",
"\n",
"## **🚀సవాలు**\n",
"\n",
"ఈ సాంకేతికతలలో ప్రతి ఒక్కదానికి మీరు సర్దుబాటు చేయగల పెద్ద సంఖ్యలో పారామితులు ఉంటాయి ఉదాహరణకు SVMs లో `cost`, KNN లో `neighbors`, Random Forest లో `mtry` (యాదృచ్ఛికంగా ఎంపిక చేసిన ప్రిడిక్టర్లు).\n",
"\n",
"ప్రతి ఒక్కటి యొక్క డిఫాల్ట్ పారామితులను పరిశోధించి, ఈ పారామితులను సర్దుబాటు చేయడం మోడల్ నాణ్యతకు ఏమి అర్థం అవుతుందో ఆలోచించండి.\n",
"\n",
"ఒక నిర్దిష్ట మోడల్ మరియు దాని పారామితుల గురించి మరింత తెలుసుకోవడానికి, ఉపయోగించండి: `help(\"model\")` ఉదా: `help(\"rand_forest\")`\n",
"\n",
"> ప్రాక్టికల్ లో, మనం సాధారణంగా ఈ విలువలలో *ఉత్తమ విలువలను* అంచనా వేస్తాము అనేక మోడల్స్ ను ఒక `సిమ్యులేటెడ్ డేటా సెట్` పై శిక్షణ ఇచ్చి, ఈ మోడల్స్ ఎంత బాగా ప్రదర్శిస్తాయో కొలిచి. ఈ ప్రక్రియను **ట్యూనింగ్** అంటారు.\n",
"\n",
"### [**పోస్ట్-లెక్చర్ క్విజ్**](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/24/)\n",
"\n",
"### **సమీక్ష & స్వీయ అధ్యయనం**\n",
"\n",
"ఈ పాఠాలలో చాలా జార్గన్ ఉంది, కాబట్టి [ఈ జాబితా](https://docs.microsoft.com/dotnet/machine-learning/resources/glossary?WT.mc_id=academic-77952-leestott) ఉపయోగకరమైన పదజాలాన్ని సమీక్షించడానికి ఒక నిమిషం తీసుకోండి!\n",
"\n",
"#### ధన్యవాదాలు:\n",
"\n",
"[`Allison Horst`](https://twitter.com/allison_horst/) కు R ను మరింత ఆహ్లాదకరంగా మరియు ఆకర్షణీయంగా మార్చే అద్భుతమైన చిత్రణలను సృష్టించినందుకు. ఆమె మరిన్ని చిత్రణలను ఆమె [గ్యాలరీ](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) మరియు [Jen Looper](https://www.twitter.com/jenlooper) కు ఈ మాడ్యూల్ యొక్క ఒరిజినల్ పైథాన్ వెర్షన్ సృష్టించినందుకు ♥️\n",
"\n",
"సంతోషంగా నేర్చుకోండి,\n",
"\n",
"[Eric](https://twitter.com/ericntay), గోల్డ్ మైక్రోసాఫ్ట్ లెర్న్ స్టూడెంట్ అంబాసిడర్.\n",
"\n",
"<p >\n",
" <img src=\"../../../../../../translated_images/te/r_learners_sm.f9199f76f1e2e493.webp\"\n",
" width=\"569\"/>\n",
" <figcaption>Artwork by @allison_horst</figcaption>\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"---\n\n<!-- CO-OP TRANSLATOR DISCLAIMER START -->\n**అస్పష్టత**: \nఈ పత్రాన్ని AI అనువాద సేవ [Co-op Translator](https://github.com/Azure/co-op-translator) ఉపయోగించి అనువదించబడింది. మేము ఖచ్చితత్వానికి ప్రయత్నించినప్పటికీ, ఆటోమేటెడ్ అనువాదాల్లో పొరపాట్లు లేదా తప్పిదాలు ఉండవచ్చు. మూల పత్రం దాని స్వదేశీ భాషలో అధికారిక మూలంగా పరిగణించాలి. ముఖ్యమైన సమాచారానికి, ప్రొఫెషనల్ మానవ అనువాదం సిఫార్సు చేయబడుతుంది. ఈ అనువాదం వాడకంలో ఏర్పడిన ఏవైనా అపార్థాలు లేదా తప్పుదారుల కోసం మేము బాధ్యత వహించము.\n<!-- CO-OP TRANSLATOR DISCLAIMER END -->\n"
]
}
]
}