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

654 lines
43 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:33:49+00:00",
"source_file": "4-Classification/3-Classifiers-2/solution/R/lesson_12-R.ipynb",
"language_code": "ta"
}
},
"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",
"முந்தையதாக, தரவுகளை வகைப்படுத்த Microsoft-இன் சிட் ஷீட்டை பயன்படுத்துவதற்கான பல்வேறு விருப்பங்களைப் பற்றி நாம் கற்றுக்கொண்டோம். Python-இன் இயந்திரக் கற்றல் கட்டமைப்பு, Scikit-learn, இதே போன்ற ஆனால் மேலும் விரிவான சிட் ஷீட்டை வழங்குகிறது, இது உங்கள் எஸ்டிமேட்டர்களை (வகைப்பாட்டாளர்களுக்கான மற்றொரு சொல்) மேலும் குறைக்க உதவுகிறது:\n",
"\n",
"<p >\n",
" <img src=\"../../../../../../translated_images/ta/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 reference site](https://www.tidymodels.org/find/parsnip/#models) மாடல்களின் பல்வேறு வகைகள் பற்றிய சிறந்த ஆவணங்களை வழங்குகிறது.\n",
"\n",
"### **திட்டம்** 🗺️\n",
"\n",
"இந்த வரைபடம் உங்கள் தரவின் தெளிவான புரிதலைப் பெற்ற பிறகு மிகவும் உதவியாக இருக்கும், ஏனெனில் நீங்கள் அதன் பாதைகளில் 'நடந்து' முடிவுக்கு வரலாம்:\n",
"\n",
"- எங்களிடம் \\>50 மாதிரிகள் உள்ளன\n",
"\n",
"- ஒரு வகையை முன்னறிவிக்க விரும்புகிறோம்\n",
"\n",
"- எங்களிடம் லேபிள் செய்யப்பட்ட தரவுகள் உள்ளன\n",
"\n",
"- எங்களிடம் 100K மாதிரிகளுக்கு குறைவாக உள்ளன\n",
"\n",
"- ✨ நாங்கள் Linear SVC ஐ தேர்வு செய்யலாம்\n",
"\n",
"- அது வேலை செய்யவில்லை என்றால், எங்களிடம் எண் தரவுகள் உள்ளதால்\n",
"\n",
" - ✨ KNeighbors Classifier ஐ முயற்சிக்கலாம்\n",
"\n",
" - அது வேலை செய்யவில்லை என்றால், ✨ SVC மற்றும் ✨ Ensemble Classifiers ஐ முயற்சிக்கவும்\n",
"\n",
"இது பின்பற்ற மிகவும் உதவியாக இருக்கும் பாதை. இப்போது, [tidymodels](https://www.tidymodels.org/) மாடலிங் கட்டமைப்பைப் பயன்படுத்தி நேரடியாக தொடங்குவோம்: நல்ல புள்ளியியல் நடைமுறையை ஊக்குவிக்க R தொகுப்புகளின் ஒரே மாதிரியான மற்றும் நெகிழ்வான தொகுப்புகள் 😊.\n",
"\n",
"## 2. தரவுகளை பிரித்து சமநிலையற்ற தரவுத்தொகுப்பை கையாளுங்கள்.\n",
"\n",
"முந்தைய பாடங்களில், எங்கள் சமையல்களில் பொதுவான சில பொருட்கள் இருந்தன என்பதை நாங்கள் கற்றுக்கொண்டோம். மேலும், சமையல்களின் எண்ணிக்கையில் மிகவும் சமமற்ற விநியோகம் இருந்தது.\n",
"\n",
"இதைக் கையாள நாங்கள் செய்யப்போகிறோம்:\n",
"\n",
"- தனித்த சமையல்களுக்கு இடையே குழப்பத்தை உருவாக்கும் மிகவும் பொதுவான பொருட்களை `dplyr::select()` பயன்படுத்தி நீக்குதல்.\n",
"\n",
"- தரவுகளை மாடலிங் செய்ய தயாராக்க `recipe` ஐ பயன்படுத்துதல், இது `over-sampling` الگوریதத்தைப் பயன்படுத்தி தரவுகளை முன் செயலாக்குகிறது.\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",
"- குறைந்த அளவிலான வகுப்பில் கண்காணிப்புகளை சேர்த்தல்: `Over-sampling`, உதாரணமாக SMOTE அல்காரிதத்தைப் பயன்படுத்தி, குறைந்த அளவிலான வகுப்பின் புதிய எடுத்துக்காட்டுகளை இவை தொடர்புடைய அருகிலுள்ள கண்காணிப்புகளை அடிப்படையாகக் கொண்டு செயற்கையாக உருவாக்குகிறது.\n",
"\n",
"- அதிக அளவிலான வகுப்பில் இருந்து கண்காணிப்புகளை நீக்குதல்: `Under-sampling`\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/ta/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) என்பது எம்.எல். தொழில்நுட்பங்களின் ஆதரவு-வெக்டார் இயந்திரங்கள் குடும்பத்தின் ஒரு கிளையாகும். 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-ஐ பயிற்சி செய்து, அதற்கான முடிவுகளை மதிப்பீடு செய்யலாம். செயல்திறன் அளவுகோள்களுக்காக, `accuracy`, `sensitivity`, `Positive Predicted Value` மற்றும் `F Measure` ஆகியவற்றை மதிப்பீடு செய்யும் ஒரு metric set உருவாக்கலாம்.\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",
"> - [*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",
"> மேலும் படிக்க.\n",
"\n",
"### நெருக்கமான அயலவர்கள் வகைப்பாடு\n",
"\n",
"*K*-nearest neighbor (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": [
"இந்த மாடல் சரியாக செயல்படவில்லை என்று தோன்றுகிறது. மாடலின் arguments-ஐ மாற்றுவது (பாருங்கள் `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 classifiers பற்றி மேலும் அறிய.\n",
"\n",
"### Ensemble classifiers\n",
"\n",
"Ensemble algorithm-கள் பல base estimators-ஐ இணைத்து ஒரு சிறந்த மாடலை உருவாக்க உதவுகின்றன. இது இரண்டு வழிகளில் செய்யப்படுகிறது:\n",
"\n",
"`bagging`: base models-இன் தொகுப்பில் *சராசரி செயல்பாடு* பயன்படுத்துதல்\n",
"\n",
"`boosting`: predictive செயல்திறனை மேம்படுத்த ஒரு தொடர்ச்சியான மாடல்களை உருவாக்குதல்.\n",
"\n",
"முதலில், Random Forest மாடலை முயற்சித்து பார்ப்போம். இது decision trees-இன் ஒரு பெரிய தொகுப்பை உருவாக்கி, அதன் மீது ஒரு சராசரி செயல்பாட்டை பயன்படுத்தி ஒரு சிறந்த மொத்த மாடலை உருவாக்குகிறது.\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\")`). இந்த எடுத்துக்காட்டில், Boosted trees-ஐ `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": [
"> ✅ தயவுசெய்து பார்க்கவும்:\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/> - AdaBoost மாடலை ஆராய்கிறது, இது xgboost க்கு ஒரு நல்ல மாற்றாகும்.\n",
">\n",
"> மேலும் Ensemble classifiers பற்றி அறிய.\n",
"\n",
"## 4. கூடுதல் - பல மாடல்களை ஒப்பிடுதல்\n",
"\n",
"இந்த ஆய்வகத்தில் நாங்கள் பல மாடல்களை பொருத்தியுள்ளோம் 🙌. பல்வேறு preprocessors மற்றும்/அல்லது மாடல் விவரக்குறிப்புகளிலிருந்து workflows உருவாக்கி, பின்னர் ஒவ்வொன்றாக செயல்திறன் அளவுகோள்களை கணக்கிடுவது சிரமமாக அல்லது கடினமாக இருக்கலாம்.\n",
"\n",
"இதைத் தீர்க்க ஒரு பயிற்சி செய்யலாம். ஒரு பயிற்சி தொகுப்பில் workflows பட்டியலை பொருத்தி, பின்னர் சோதனை தொகுப்பின் அடிப்படையில் செயல்திறன் அளவுகோள்களை திருப்பி அனுப்பும் ஒரு செயல்பாட்டை உருவாக்கலாம். [purrr](https://purrr.tidyverse.org/) தொகுப்பிலிருந்து `map()` மற்றும் `map_dfr()` ஐ பயன்படுத்தி பட்டியலில் உள்ள ஒவ்வொரு உருப்படிக்கும் செயல்பாடுகளைப் பயன்படுத்துவோம்.\n",
"\n",
"> [`map()`](https://purrr.tidyverse.org/reference/map.html) செயல்பாடுகள் பல for loops ஐ மாற்றி, குறுகிய மற்றும் படிக்க எளிதான குறியீடுகளை உருவாக்க உதவுகின்றன. [`map()`](https://purrr.tidyverse.org/reference/map.html) செயல்பாடுகள் பற்றி அறிய சிறந்த இடம் R for data science இல் உள்ள [iteration chapter](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": [
"[**workflowset**](https://workflowsets.tidymodels.org/) பாக்கேஜ் பயனர்களுக்கு பல மாடல்களை உருவாக்கவும் எளிதாக பொருத்தவும் உதவுகிறது, ஆனால் இது பெரும்பாலும் `cross-validation` போன்ற மீள்மாதிரி தொழில்நுட்பங்களுடன் வேலை செய்ய வடிவமைக்கப்பட்டுள்ளது, இது நாம் இன்னும் கற்றுக்கொள்ள வேண்டிய ஒரு அணுகுமுறை.\n",
"\n",
"## **🚀சவால்**\n",
"\n",
"இந்த தொழில்நுட்பங்களில் ஒவ்வொன்றுக்கும் நீங்கள் மாற்றக்கூடிய பல அளவுருக்கள் உள்ளன, உதாரணமாக SVM-களில் `cost`, KNN-இல் `neighbors`, Random Forest-இல் `mtry` (தற்செயலாக தேர்ந்தெடுக்கப்பட்ட முன்னோடிகள்).\n",
"\n",
"ஒவ்வொன்றின் இயல்புநிலை அளவுருக்களை ஆராய்ந்து, இந்த அளவுருக்களை மாற்றுவது மாடலின் தரத்துக்கு என்ன பொருள் என்று சிந்தியுங்கள்.\n",
"\n",
"ஒரு குறிப்பிட்ட மாடல் மற்றும் அதன் அளவுருக்களைப் பற்றி மேலும் அறிய, இதைப் பயன்படுத்தவும்: `help(\"model\")` உதாரணமாக `help(\"rand_forest\")`\n",
"\n",
"> நடைமுறையில், நாம் *சிறந்த மதிப்புகளை* *மதிப்பீடு* செய்வதற்கு `simulated data set`-இல் பல மாடல்களை பயிற்சி செய்து, இந்த மாடல்கள் எவ்வளவு நன்றாக செயல்படுகின்றன என்பதை அளவிடுகிறோம். இந்த செயல்முறை **tuning** என்று அழைக்கப்படுகிறது.\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) இந்த தொகுதியின் அசல் Python பதிப்பை உருவாக்கியதற்காக ♥️\n",
"\n",
"சந்தோஷமாக கற்றுக்கொள்ளுங்கள்,\n",
"\n",
"[Eric](https://twitter.com/ericntay), Gold Microsoft Learn Student Ambassador.\n",
"\n",
"<p >\n",
" <img src=\"../../../../../../translated_images/ta/r_learners_sm.f9199f76f1e2e493.webp\"\n",
" width=\"569\"/>\n",
" <figcaption>@allison_horst அவர்களின் கலைப்பணி</figcaption>\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"\n---\n\n**அறிவிப்பு**: \nஇந்த ஆவணம் [Co-op Translator](https://github.com/Azure/co-op-translator) என்ற AI மொழிபெயர்ப்பு சேவையை பயன்படுத்தி மொழிபெயர்க்கப்பட்டுள்ளது. நாங்கள் துல்லியத்திற்காக முயற்சிக்கிறோம், ஆனால் தானியங்கி மொழிபெயர்ப்புகளில் பிழைகள் அல்லது தவறுகள் இருக்கக்கூடும் என்பதை கவனத்தில் கொள்ளவும். அதன் சொந்த மொழியில் உள்ள மூல ஆவணம் அதிகாரப்பூர்வ ஆதாரமாக கருதப்பட வேண்டும். முக்கியமான தகவல்களுக்கு, தொழில்முறை மனித மொழிபெயர்ப்பு பரிந்துரைக்கப்படுகிறது. இந்த மொழிபெயர்ப்பைப் பயன்படுத்துவதால் ஏற்படும் எந்த தவறான புரிதல்களுக்கும் அல்லது தவறான விளக்கங்களுக்கும் நாங்கள் பொறுப்பல்ல.\n"
]
}
]
}