{ "nbformat": 4, "nbformat_minor": 2, "metadata": { "colab": { "name": "lesson_1-R.ipynb", "provenance": [], "collapsed_sections": [], "toc_visible": true }, "kernelspec": { "name": "ir", "display_name": "R" }, "language_info": { "name": "R" }, "coopTranslator": { "original_hash": "c18d3bd0bd8ae3878597e89dcd1fa5c1", "translation_date": "2025-10-11T12:19:17+00:00", "source_file": "2-Regression/1-Tools/solution/R/lesson_1-R.ipynb", "language_code": "ta" } }, "cells": [ { "cell_type": "markdown", "source": [ "# ஒரு பின்மாதிரி முறை உருவாக்குங்கள்: பின்மாதிரி முறைகளுக்கான R மற்றும் Tidymodels உடன் தொடங்குங்கள்\n" ], "metadata": { "id": "YJUHCXqK57yz" } }, { "cell_type": "markdown", "source": [ "## ரிக்ரஷன் அறிமுகம் - பாடம் 1\n", "\n", "#### இதை ஒரு பார்வையில் பார்க்க\n", "\n", "✅ ரிக்ரஷன் முறைகள் பலவகையானவை, மற்றும் நீங்கள் தேர்ந்தெடுப்பது நீங்கள் தேடும் பதிலின் அடிப்படையில் இருக்கும். ஒரு குறிப்பிட்ட வயதுடைய நபரின் சாத்தியமான உயரத்தை கணிக்க விரும்பினால், நீங்கள் `linear regression` பயன்படுத்துவீர்கள், ஏனெனில் நீங்கள் ஒரு **எண் மதிப்பு** தேடுகிறீர்கள். ஒரு உணவுப் வகை vegan ஆக கருதப்பட வேண்டுமா என்பதை கண்டறிய விரும்பினால், நீங்கள் ஒரு **வகை ஒதுக்கீடு** தேடுகிறீர்கள், எனவே நீங்கள் `logistic regression` பயன்படுத்துவீர்கள். logistic regression பற்றி நீங்கள் பின்னர் மேலும் அறிந்துகொள்வீர்கள். தரவின் மூலம் நீங்கள் கேட்கக்கூடிய சில கேள்விகளைப் பற்றி சிந்திக்கவும், மற்றும் இந்த முறைகளில் எது அதிக பொருத்தமானது என்பதைப் பாருங்கள்.\n", "\n", "இந்த பிரிவில், நீங்கள் [சிறிய சர்க்கரை நோய் தொடர்பான தரவுத்தொகுப்புடன்](https://www4.stat.ncsu.edu/~boos/var.select/diabetes.html) வேலை செய்யப் போகிறீர்கள். சர்க்கரை நோயாளிகளுக்கான ஒரு சிகிச்சையை சோதிக்க விரும்புகிறீர்கள் என்று கற்பனை செய்யுங்கள். மிஷின் லெர்னிங் மாடல்கள், மாறிகளின் சேர்க்கைகளின் அடிப்படையில் எந்த நோயாளிகள் சிகிச்சைக்கு சிறந்த பதிலளிப்பார்கள் என்பதை தீர்மானிக்க உங்களுக்கு உதவலாம். மிகவும் அடிப்படை ரிக்ரஷன் மாடல் கூட, காட்சிப்படுத்தும்போது, உங்கள் கோட்பாட்டுத் மருத்துவ பரிசோதனைகளை ஒழுங்குபடுத்த உதவும் மாறிகள் பற்றிய தகவலைக் காட்டலாம்.\n", "\n", "அதனால், இந்த பணியைத் தொடங்குவோம்!\n", "\n", "
\n",
"
\n",
"
\n",
"\n",
"> glimpse() மற்றும் slice() என்பது [`dplyr`](https://dplyr.tidyverse.org/) இல் உள்ள செயல்பாடுகள். Dplyr, Tidyverse இன் ஒரு பகுதியாக, தரவுகளை மாற்றுவதற்கான ஒரு இலக்கணமாகும், இது பொதுவான தரவுகள் மாற்ற சவால்களை தீர்க்க உதவும் ஒரே மாதிரியான செயல் வார்த்தைகளை வழங்குகிறது.\n",
"\n",
"
\n",
"\n",
"இப்போது நமக்கு தரவுகள் உள்ளன, இந்த பயிற்சிக்காக ஒரு அம்சத்தை (`bmi`) குறைக்க முயற்சிக்கலாம். இதற்காக தேவையான நெடுவரிசைகளை தேர்ந்தெடுக்க வேண்டும். இதை எப்படி செய்வது?\n",
"\n",
"[`dplyr::select()`](https://dplyr.tidyverse.org/reference/select.html) நமக்கு ஒரு தரவுப் பட்டியலில் உள்ள நெடுவரிசைகளை *தேர்ந்தெடுக்க* (மற்றும் விருப்பமாக மறுபெயரிட) அனுமதிக்கிறது.\n"
],
"metadata": {
"id": "UwjVT1Hz-c3Z"
}
},
{
"cell_type": "code",
"execution_count": null,
"source": [
"# Select predictor feature `bmi` and outcome `y`\r\n",
"diabetes_select <- diabetes %>% \r\n",
" select(c(bmi, y))\r\n",
"\r\n",
"# Print the first 5 rows\r\n",
"diabetes_select %>% \r\n",
" slice(1:10)"
],
"outputs": [],
"metadata": {
"id": "RDY1oAKI-m80"
}
},
{
"cell_type": "markdown",
"source": [
"## 3. பயிற்சி மற்றும் சோதனை தரவுகள்\n",
"\n",
"மேற்பார்வை கற்றலில், தரவுகளை இரண்டு துணுக்குகளாக *பிரிப்பது* பொதுவான நடைமுறையாகும்; மாடலை பயிற்சி செய்ய பயன்படுத்தப்படும் (பொதுவாக பெரியது) ஒரு தொகுதி மற்றும் மாடல் எப்படி செயல்பட்டது என்பதைப் பார்க்க சிறிய \"பின்பக்க\" தொகுதி.\n",
"\n",
"இப்போது தரவுகள் தயாராக உள்ளன, இந்த தரவுத்தொகுப்பில் உள்ள எண்களுக்கு இடையில் ஒரு தர்க்கபூர்வமான பிரிப்பு கண்டறிய ஒரு இயந்திரம் உதவுமா என்பதைப் பார்க்கலாம். [rsample](https://tidymodels.github.io/rsample/) தொகுப்பைப் பயன்படுத்தலாம், இது Tidymodels கட்டமைப்பின் ஒரு பகுதியாகும், தரவுகளை *எப்படி* பிரிக்க வேண்டும் என்பதற்கான தகவல்களை உள்ளடக்கிய ஒரு பொருளை உருவாக்க, பின்னர் உருவாக்கப்பட்ட பயிற்சி மற்றும் சோதனை தொகுதிகளை எடுக்க இரண்டு rsample செயல்பாடுகளைப் பயன்படுத்தலாம்:\n"
],
"metadata": {
"id": "SDk668xK-tc3"
}
},
{
"cell_type": "code",
"execution_count": null,
"source": [
"set.seed(2056)\r\n",
"# Split 67% of the data for training and the rest for tesing\r\n",
"diabetes_split <- diabetes_select %>% \r\n",
" initial_split(prop = 0.67)\r\n",
"\r\n",
"# Extract the resulting train and test sets\r\n",
"diabetes_train <- training(diabetes_split)\r\n",
"diabetes_test <- testing(diabetes_split)\r\n",
"\r\n",
"# Print the first 3 rows of the training set\r\n",
"diabetes_train %>% \r\n",
" slice(1:10)"
],
"outputs": [],
"metadata": {
"id": "EqtHx129-1h-"
}
},
{
"cell_type": "markdown",
"source": [
"## 4. Tidymodels மூலம் ஒரு நேரியல் ரெக்ரஷன் மாடலை பயிற்சி செய்யுங்கள்\n",
"\n",
"இப்போது நமது மாடலை பயிற்சி செய்ய தயாராக இருக்கிறோம்!\n",
"\n",
"Tidymodels-ல், நீங்கள் `parsnip()` பயன்படுத்தி மூன்று முக்கிய கருத்துகளை குறிப்பிடுவதன் மூலம் மாடல்களை வரையறுக்கிறீர்கள்:\n",
"\n",
"- மாடல் **வகை** என்பது நேரியல் ரெக்ரஷன், லாஜிஸ்டிக் ரெக்ரஷன், தீர்மான மர மாடல்கள் போன்ற மாடல்களை வேறுபடுத்துகிறது.\n",
"\n",
"- மாடல் **முறை** என்பது ரெக்ரஷன் மற்றும் வகைப்பாடு போன்ற பொதுவான விருப்பங்களை உள்ளடக்கியது; சில மாடல் வகைகள் இவற்றில் ஒன்றை மட்டுமே ஆதரிக்கின்றன, மற்றவை இரண்டையும் ஆதரிக்கின்றன.\n",
"\n",
"- மாடல் **எஞ்சின்** என்பது மாடலை பொருத்த பயன்படுத்தப்படும் கணினி கருவி. பெரும்பாலும் இவை R தொகுப்புகள், உதாரணமாக **`\"lm\"`** அல்லது **`\"ranger\"`**\n",
"\n",
"இந்த மாடல் தகவல் ஒரு மாடல் விவரக்குறிப்பில் பதிவு செய்யப்படுகிறது, எனவே இதை உருவாக்குவோம்!\n"
],
"metadata": {
"id": "sBOS-XhB-6v7"
}
},
{
"cell_type": "code",
"execution_count": null,
"source": [
"# Build a linear model specification\r\n",
"lm_spec <- \r\n",
" # Type\r\n",
" linear_reg() %>% \r\n",
" # Engine\r\n",
" set_engine(\"lm\") %>% \r\n",
" # Mode\r\n",
" set_mode(\"regression\")\r\n",
"\r\n",
"\r\n",
"# Print the model specification\r\n",
"lm_spec"
],
"outputs": [],
"metadata": {
"id": "20OwEw20--t3"
}
},
{
"cell_type": "markdown",
"source": [
"ஒரு மாதிரி *குறிப்பிடப்பட்ட* பிறகு, அந்த மாதிரியை [`fit()`](https://parsnip.tidymodels.org/reference/fit.html) செயல்பாட்டைப் பயன்படுத்தி `மதிப்பீடு செய்யலாம்` அல்லது `பயிற்சி அளிக்கலாம்`, பொதுவாக ஒரு சூத்திரம் மற்றும் சில தரவுகளைப் பயன்படுத்தி.\n",
"\n",
"`y ~ .` என்பது `y` ஐ முன்னறிவிக்கப்பட்ட அளவு/இலக்கு என பொருத்துவோம், அனைத்து முன்னறிவிப்புகள்/அம்சங்கள் மூலம் விளக்கப்படும், அதாவது `.` (இந்தக் கட்டத்தில், நமக்கு ஒரு முன்னறிவிப்பு மட்டுமே உள்ளது: `bmi`)\n"
],
"metadata": {
"id": "_oDHs89k_CJj"
}
},
{
"cell_type": "code",
"execution_count": null,
"source": [
"# Build a linear model specification\r\n",
"lm_spec <- linear_reg() %>% \r\n",
" set_engine(\"lm\") %>%\r\n",
" set_mode(\"regression\")\r\n",
"\r\n",
"\r\n",
"# Train a linear regression model\r\n",
"lm_mod <- lm_spec %>% \r\n",
" fit(y ~ ., data = diabetes_train)\r\n",
"\r\n",
"# Print the model\r\n",
"lm_mod"
],
"outputs": [],
"metadata": {
"id": "YlsHqd-q_GJQ"
}
},
{
"cell_type": "markdown",
"source": [
"மாதிரியின் வெளியீட்டிலிருந்து, பயிற்சியின் போது கற்றுக்கொண்ட குணகாரங்களை காணலாம். அவை நமக்கு குறைந்த மொத்த பிழையை வழங்கும் சிறந்த பொருத்தமான கோட்டின் குணகாரங்களை பிரதிநிதித்துவப்படுத்துகின்றன, இது உண்மையான மற்றும் கணிக்கப்பட்ட மாறிலிகளுக்கு இடையிலான பிழையை குறைக்கிறது.\n",
"
\n",
"\n",
"## 5. சோதனை தொகுப்பில் கணிப்புகளை செய்யுங்கள்\n",
"\n",
"இப்போது நாங்கள் ஒரு மாதிரியை பயிற்சி செய்துள்ளோம், சோதனை தரவுத்தொகுப்புக்கான நோயின் முன்னேற்றம் y ஐ [parsnip::predict()](https://parsnip.tidymodels.org/reference/predict.model_fit.html) பயன்படுத்தி கணிக்கலாம். இது தரவுக் குழுக்களுக்கு இடையில் கோட்டை வரைய பயன்படுத்தப்படும்.\n"
],
"metadata": {
"id": "kGZ22RQj_Olu"
}
},
{
"cell_type": "code",
"execution_count": null,
"source": [
"# Make predictions for the test set\r\n",
"predictions <- lm_mod %>% \r\n",
" predict(new_data = diabetes_test)\r\n",
"\r\n",
"# Print out some of the predictions\r\n",
"predictions %>% \r\n",
" slice(1:5)"
],
"outputs": [],
"metadata": {
"id": "nXHbY7M2_aao"
}
},
{
"cell_type": "markdown",
"source": [
"வாவ்! 💃🕺 நாங்கள் ஒரு மாதிரியை பயிற்சி செய்து, அதை பயன்படுத்தி கணிப்புகளை செய்தோம்!\n",
"\n",
"கணிப்புகளை செய்யும்போது, tidymodels மரபு எப்போதும் முடிவுகளின் ஒரு tibble/data frame-ஐ தருகிறது, அதில் நிலையான நெடுவரிசை பெயர்கள் உள்ளன. இது அசல் தரவையும் கணிப்புகளையும் ஒருங்கிணைத்து, பின்னர் செயல்பாடுகளுக்கு (உதாரணமாக வரைதல்) பயன்படுத்தக்கூடிய வடிவத்தில் எளிதாக மாற்ற உதவுகிறது.\n",
"\n",
"`dplyr::bind_cols()` பல தரவுத்தொகுப்புகளை நெடுவரிசையாக திறம்பட இணைக்கிறது.\n"
],
"metadata": {
"id": "R_JstwUY_bIs"
}
},
{
"cell_type": "code",
"execution_count": null,
"source": [
"# Combine the predictions and the original test set\r\n",
"results <- diabetes_test %>% \r\n",
" bind_cols(predictions)\r\n",
"\r\n",
"\r\n",
"results %>% \r\n",
" slice(1:5)"
],
"outputs": [],
"metadata": {
"id": "RybsMJR7_iI8"
}
},
{
"cell_type": "markdown",
"source": [
"## 6. மாதிரி முடிவுகளை வரைபடமாக்குதல்\n",
"\n",
"இப்போது, இதை காட்சிப்படுத்த நேரம் 📈. சோதனை தொகுப்பின் அனைத்து `y` மற்றும் `bmi` மதிப்புகளின் ஒரு சிதறல் வரைபடத்தை உருவாக்குவோம், பின்னர் மாதிரியின் தரவுக் குழுக்களுக்கிடையில் மிகச் சரியான இடத்தில் ஒரு கோட்டை வரைய予ிக்க予.\n",
"\n",
"R-ல் வரைபடங்களை உருவாக்க பல அமைப்புகள் உள்ளன, ஆனால் `ggplot2` மிகவும் அழகானதும் மிகவும் பல்துறை திறனுடையதுமான ஒன்றாகும். இது **சுயாதீன கூறுகளை இணைத்து** வரைபடங்களை உருவாக்க அனுமதிக்கிறது.\n"
],
"metadata": {
"id": "XJbYbMZW_n_s"
}
},
{
"cell_type": "code",
"execution_count": null,
"source": [
"# Set a theme for the plot\r\n",
"theme_set(theme_light())\r\n",
"# Create a scatter plot\r\n",
"results %>% \r\n",
" ggplot(aes(x = bmi)) +\r\n",
" # Add a scatter plot\r\n",
" geom_point(aes(y = y), size = 1.6) +\r\n",
" # Add a line plot\r\n",
" geom_line(aes(y = .pred), color = \"blue\", size = 1.5)"
],
"outputs": [],
"metadata": {
"id": "R9tYp3VW_sTn"
}
},
{
"cell_type": "markdown",
"source": [
"> ✅ இங்கே என்ன நடக்கிறது என்பதை சிறிது யோசிக்கவும். ஒரு நேர்கோடு பல சிறிய தரவுப் புள்ளிகளின் வழியாக ஓடுகிறது, ஆனால் அது உண்மையில் என்ன செய்கிறது? புதிய, பார்க்கப்படாத தரவுப் புள்ளி ஒரு வரைபடத்தின் y அச்சுடன் தொடர்புடைய இடத்தில் பொருந்த வேண்டும் என்பதை நீங்கள் எப்படி கணிக்க முடியும் என்பதை பார்க்கிறீர்களா? இந்த மாதிரியின் நடைமுறை பயன்பாட்டை வார்த்தைகளில் விளக்க முயற்சிக்கவும்.\n",
"\n",
"வாழ்த்துக்கள், நீங்கள் உங்கள் முதல் நேரியல் மடங்கல் மாதிரியை உருவாக்கி, அதைப் பயன்படுத்தி ஒரு கணிப்பு செய்து, அதை ஒரு வரைபடத்தில் காட்டியுள்ளீர்கள்!\n"
],
"metadata": {
"id": "zrPtHIxx_tNI"
}
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"\n---\n\n**குறிப்பு**: \nஇந்த ஆவணம் [Co-op Translator](https://github.com/Azure/co-op-translator) என்ற AI மொழிபெயர்ப்பு சேவையைப் பயன்படுத்தி மொழிபெயர்க்கப்பட்டுள்ளது. எங்கள் தரச்செயல்முறைகளுக்கு முழு முயற்சி எடுத்தாலும், தானியங்கி மொழிபெயர்ப்புகளில் பிழைகள் அல்லது தவறுகள் இருக்கக்கூடும் என்பதை தயவுசெய்து கவனத்தில் கொள்ளவும். அதன் இயல்பான மொழியில் உள்ள மூல ஆவணம் அதிகாரப்பூர்வ ஆதாரமாக கருதப்பட வேண்டும். முக்கியமான தகவல்களுக்கு, தொழில்முறை மனித மொழிபெயர்ப்பு பரிந்துரைக்கப்படுகிறது. இந்த மொழிபெயர்ப்பைப் பயன்படுத்துவதால் ஏற்படும் எந்த தவறான புரிதல்கள் அல்லது தவறான விளக்கங்களுக்கு நாங்கள் பொறுப்பல்ல.\n"
]
}
]
}