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/2-Regression/4-Logistic/solution/R/lesson_4-R.ipynb

685 lines
59 KiB

{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## லாஜிஸ்டிக் ரிக்ரஷன் மாடல் உருவாக்குதல் - பாடம் 4\n",
"\n",
"![லாஜிஸ்டிக் மற்றும் லினியர் ரிக்ரஷன் தகவல் வரைபடம்](../../../../../../translated_images/ta/linear-vs-logistic.ba180bf95e7ee667.webp)\n",
"\n",
"#### **[பாடத்திற்கு முன் வினாடி வினா](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/15/)**\n",
"\n",
"#### அறிமுகம்\n",
"\n",
"ரிக்ரஷன் பற்றிய இந்த இறுதி பாடத்தில், இது ஒரு அடிப்படை *கிளாசிக்* எம்.எல். தொழில்நுட்பமாகும், லாஜிஸ்டிக் ரிக்ரஷனைப் பார்ப்போம். நீங்கள் இந்த தொழில்நுட்பத்தைப் பயன்படுத்தி இரட்டை வகைகளை முன்னறிவிக்க முறைமைகளை கண்டறியலாம். இந்த கந்தம் சாக்லேட் ஆக இருக்கிறதா இல்லையா? இந்த நோய் தொற்றுநோயா இல்லையா? இந்த வாடிக்கையாளர் இந்த பொருளை தேர்வு செய்வாரா இல்லையா?\n",
"\n",
"இந்த பாடத்தில், நீங்கள் கற்றுக்கொள்வீர்கள்:\n",
"\n",
"- லாஜிஸ்டிக் ரிக்ரஷன் முறைமைகள்\n",
"\n",
"✅ இந்த [கற்றல் தொகுதியில்](https://learn.microsoft.com/training/modules/introduction-classification-models/?WT.mc_id=academic-77952-leestott) இந்த வகை ரிக்ரஷனுடன் வேலை செய்வதில் உங்கள் புரிதலை ஆழமாக்குங்கள்.\n",
"\n",
"## முன் தேவைகள்\n",
"\n",
"பம்ப்கின் தரவுடன் வேலை செய்ததால், `Color` எனும் ஒரு இரட்டை வகையை நாம் வேலை செய்ய முடியும் என்பதை நன்கு புரிந்துகொண்டுள்ளோம்.\n",
"\n",
"சில மாறிகள் கொடுக்கப்பட்டால், *ஒரு குறிப்பிட்ட பம்ப்கின் எந்த நிறத்தில் இருக்க வாய்ப்பு உள்ளது* (ஆரஞ்சு 🎃 அல்லது வெள்ளை 👻) என்பதை முன்னறிவிக்க ஒரு லாஜிஸ்டிக் ரிக்ரஷன் மாடலை உருவாக்குவோம்.\n",
"\n",
"> ஏன் ரிக்ரஷன் பற்றிய பாடத்தில் இரட்டை வகைப்பாட்டைப் பற்றி பேசுகிறோம்? மொழி வசதிக்காக மட்டுமே, ஏனெனில் லாஜிஸ்டிக் ரிக்ரஷன் [உண்மையில் ஒரு வகைப்பாட்டு முறை](https://scikit-learn.org/stable/modules/linear_model.html#logistic-regression), ஆனால் இது ஒரு லினியர் அடிப்படையிலானது. தரவுகளை வகைப்படுத்துவதற்கான பிற வழிகளை அடுத்த பாடத் தொகுதியில் கற்றுக்கொள்ளுங்கள்.\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",
"- `janitor`: [janitor தொகுப்பு](https://github.com/sfirke/janitor) மாசு தரவுகளை ஆய்வு செய்து சுத்தம் செய்ய சிறிய எளிய கருவிகளை வழங்குகிறது.\n",
"\n",
"- `ggbeeswarm`: [ggbeeswarm தொகுப்பு](https://github.com/eclarke/ggbeeswarm) ggplot2 பயன்படுத்தி beeswarm-பாணி வரைபடங்களை உருவாக்கும் முறைகளை வழங்குகிறது.\n",
"\n",
"நீங்கள் அவற்றை கீழே உள்ள கட்டளையை பயன்படுத்தி நிறுவலாம்:\n",
"\n",
"`install.packages(c(\"tidyverse\", \"tidymodels\", \"janitor\", \"ggbeeswarm\"))`\n",
"\n",
"மாற்றாக, கீழே உள்ள ஸ்கிரிப்ட் இந்த தொகுதியை முடிக்க தேவையான தொகுதிகள் உங்களிடம் உள்ளதா என்பதை சரிபார்க்கிறது, அவற்றை நிறுவவில்லை என்றால் அவற்றை உங்களுக்காக நிறுவுகிறது.\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"vscode": {
"languageId": "r"
}
},
"outputs": [],
"source": [
"suppressWarnings(if (!require(\"pacman\"))install.packages(\"pacman\"))\n",
"\n",
"pacman::p_load(tidyverse, tidymodels, janitor, ggbeeswarm)\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## **கேள்வியை வரையறுக்கவும்**\n",
"\n",
"எங்கள் நோக்கங்களுக்காக, இதை 'வெள்ளை' அல்லது 'வெள்ளை அல்ல' என்ற இருமையாக வெளிப்படுத்துவோம். எங்கள் தரவுத்தொகுப்பில் 'கோடுகளுடன்' என்ற ஒரு வகை உள்ளது, ஆனால் அதில் சிலவே நிகழ்வுகள் உள்ளன, எனவே அதை பயன்படுத்த மாட்டோம். எப்படியோ, நுல் மதிப்புகளை தரவுத்தொகுப்பில் இருந்து நீக்கும்போது அது மறைந்து விடுகிறது.\n",
"\n",
"> 🎃 ஒரு சுவாரஸ்யமான தகவல், வெள்ளை பூசணிக்காய்களை சில நேரங்களில் 'பேய்கள்' பூசணிக்காய்கள் என்று அழைக்கிறோம். அவற்றை செதுக்குவது மிகவும் எளிதானது அல்ல, எனவே அவை ஆரஞ்சு பூசணிக்காய்களைப் போல பிரபலமில்லை, ஆனால் அவை குளிர்ச்சியான தோற்றம் கொண்டவை! எனவே, நாங்கள் எங்கள் கேள்வியை 'பேய்கள்' அல்லது 'பேய்கள் அல்ல' என்று மறுவடிவமைக்கலாம். 👻\n",
"\n",
"## **லாஜிஸ்டிக் ரிக்ரஷன் பற்றி**\n",
"\n",
"லாஜிஸ்டிக் ரிக்ரஷன், நீங்கள் முன்பு கற்றுக்கொண்ட லினியர் ரிக்ரஷனுடன் சில முக்கியமான விதங்களில் மாறுபடுகிறது.\n",
"\n",
"#### **இரும வகைப்பாடு**\n",
"\n",
"லாஜிஸ்டிக் ரிக்ரஷன், லினியர் ரிக்ரஷனின் போன்று அதே அம்சங்களை வழங்காது. முன்னதாக, `இரும வகை` (\"ஆரஞ்சு அல்லது ஆரஞ்சு அல்ல\") பற்றிய ஒரு கணிப்பை வழங்குகிறது, ஆனால் பின்னதாக, `தொடர்ச்சியான மதிப்புகளை` கணிக்க முடியும், உதாரணமாக பூசணிக்காயின் மூலமும் அறுவடை நேரமும் கொடுக்கப்பட்டால், *அதன் விலை எவ்வளவு உயரும்*.\n",
"\n",
"![தசானி மடிபல்லி உருவாக்கிய தகவல் வரைபடம்](../../../../../../translated_images/ta/pumpkin-classifier.562771f104ad5436.webp)\n",
"\n",
"### பிற வகைப்பாடுகள்\n",
"\n",
"லாஜிஸ்டிக் ரிக்ரஷனின் மற்ற வகைகள் உள்ளன, அவற்றில் மல்டினோமியல் மற்றும் ஆர்டினல் அடங்கும்:\n",
"\n",
"- **மல்டினோமியல்**, இது ஒன்றுக்கு மேற்பட்ட வகைகளை உள்ளடக்கியது - \"ஆரஞ்சு, வெள்ளை, மற்றும் கோடுகளுடன்\".\n",
"\n",
"- **ஆர்டினல்**, இது வரிசைப்படுத்தப்பட்ட வகைகளை உள்ளடக்கியது, இது எங்கள் முடிவுகளை தரவுத்தொகுப்பில் தரவுகளின் அளவுகளின் அடிப்படையில் (mini, sm, med, lg, xl, xxl) வரிசைப்படுத்த உதவியாக இருக்கும்.\n",
"\n",
"![மல்டினோமியல் vs ஆர்டினல் ரிக்ரஷன்](../../../../../../translated_images/ta/multinomial-vs-ordinal.36701b4850e37d86.webp)\n",
"\n",
"#### **மாறிகள் தொடர்புடையதாக இருக்க வேண்டிய அவசியமில்லை**\n",
"\n",
"லினியர் ரிக்ரஷன் அதிக தொடர்புடைய மாறிகளுடன் சிறப்பாக செயல்படுவதை நினைவில் கொள்ளுங்கள். லாஜிஸ்டிக் ரிக்ரஷன் அதற்கு எதிராக செயல்படுகிறது - மாறிகள் தொடர்புடையதாக இருக்க வேண்டிய அவசியமில்லை. இது இந்த தரவுக்கு பொருந்துகிறது, ஏனெனில் இதில் தொடர்புகள் பலவீனமாக உள்ளன.\n",
"\n",
"#### **நீங்கள் அதிக அளவிலான சுத்தமான தரவுகளை தேவைப்படும்**\n",
"\n",
"லாஜிஸ்டிக் ரிக்ரஷன் அதிக அளவிலான தரவுகளைப் பயன்படுத்தினால் மேலும் துல்லியமான முடிவுகளை வழங்கும்; எங்கள் சிறிய தரவுத்தொகுப்பு இந்த பணிக்குப் பொருத்தமானது அல்ல, எனவே அதை மனதில் கொள்ளுங்கள்.\n",
"\n",
"✅ லாஜிஸ்டிக் ரிக்ரஷனுக்கு ஏற்ற தரவுகளின் வகைகளைப் பற்றி சிந்திக்கவும்\n",
"\n",
"## பயிற்சி - தரவுகளை சுத்தமாக்கவும்\n",
"\n",
"முதலில், தரவுகளை சுத்தமாக்கி, நுல் மதிப்புகளை நீக்கி, சில களங்களை மட்டும் தேர்ந்தெடுக்கவும்:\n",
"\n",
"1. பின்வரும் குறியீட்டை சேர்க்கவும்:\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"vscode": {
"languageId": "r"
}
},
"outputs": [],
"source": [
"# Load the core tidyverse packages\n",
"library(tidyverse)\n",
"\n",
"# Import the data and clean column names\n",
"pumpkins <- read_csv(file = \"https://raw.githubusercontent.com/microsoft/ML-For-Beginners/main/2-Regression/data/US-pumpkins.csv\") %>% \n",
" clean_names()\n",
"\n",
"# Select desired columns\n",
"pumpkins_select <- pumpkins %>% \n",
" select(c(city_name, package, variety, origin, item_size, color)) \n",
"\n",
"# Drop rows containing missing values and encode color as factor (category)\n",
"pumpkins_select <- pumpkins_select %>% \n",
" drop_na() %>% \n",
" mutate(color = factor(color))\n",
"\n",
"# View the first few rows\n",
"pumpkins_select %>% \n",
" slice_head(n = 5)\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"நீங்கள் எப்போதும் உங்கள் புதிய டேட்டாபிரேமை ஒரு பார்வை பார்க்கலாம், கீழே உள்ளபடி [*glimpse()*](https://pillar.r-lib.org/reference/glimpse.html) செயல்பாட்டைப் பயன்படுத்தி:\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"vscode": {
"languageId": "r"
}
},
"outputs": [],
"source": [
"pumpkins_select %>% \n",
" glimpse()\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"நாம் உண்மையில் ஒரு இருமை வகைப்பாடு பிரச்சினையைச் செய்யப் போவதாக உறுதிப்படுத்திக் கொள்ளலாம்:\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"vscode": {
"languageId": "r"
}
},
"outputs": [],
"source": [
"# Subset distinct observations in outcome column\n",
"pumpkins_select %>% \n",
" distinct(color)\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### காட்சிப்படுத்தல் - வகை விளக்கப்படம் \n",
"இப்போது நீங்கள் மத்தங்காய் தரவுகளை மீண்டும் ஏற்றியுள்ளீர்கள் மற்றும் சில மாறிலிகளை (உதாரணமாக, நிறம்) கொண்ட தரவுத்தொகுப்பை பராமரிக்க சுத்தம் செய்துள்ளீர்கள். இப்போது ggplot நூலகத்தைப் பயன்படுத்தி நோட்புக்கில் தரவுத்தொகுப்பை காட்சிப்படுத்துவோம்.\n",
"\n",
"ggplot நூலகம் உங்கள் தரவுகளை காட்சிப்படுத்த சில அழகான வழிகளை வழங்குகிறது. உதாரணமாக, ஒவ்வொரு வகையும் நிறத்திற்கும் தரவின் விநியோகங்களை ஒரு வகை விளக்கப்படத்தில் ஒப்பிடலாம்.\n",
"\n",
"1. geombar செயல்பாட்டைப் பயன்படுத்தி, மத்தங்காய் தரவுகளை கொண்டு, ஒவ்வொரு மத்தங்காய் வகைக்கும் (ஆரஞ்சு அல்லது வெள்ளை) நிற வரைபடத்தை குறிப்பிடுவதன் மூலம், ஒரு இவ்வகை விளக்கப்படத்தை உருவாக்குங்கள்:\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"vscode": {
"languageId": "python"
}
},
"outputs": [],
"source": [
"# Specify colors for each value of the hue variable\n",
"palette <- c(ORANGE = \"orange\", WHITE = \"wheat\")\n",
"\n",
"# Create the bar plot\n",
"ggplot(pumpkins_select, aes(y = variety, fill = color)) +\n",
" geom_bar(position = \"dodge\") +\n",
" scale_fill_manual(values = palette) +\n",
" labs(y = \"Variety\", fill = \"Color\") +\n",
" theme_minimal()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"தரவை கவனித்தால், நிறம் தரவுகள் வகைகளுடன் எப்படி தொடர்புடையது என்பதை நீங்கள் காணலாம்.\n",
"\n",
"✅ இந்த வகைபடுத்தப்பட்ட வரைபடத்தைப் பார்த்து, நீங்கள் என்னவெல்லாம் சுவாரஸ்யமான ஆராய்ச்சிகளை கற்பனை செய்ய முடியும்?\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### தரவுகளை முன் செயலாக்கம்: அம்ச குறியாக்கம்\n",
"\n",
"எங்கள் pumpkins தரவுத்தொகுப்பில் அதன் அனைத்து நெடுவரிசைகளுக்கும் string மதிப்புகள் உள்ளன. வகைப்பாட்டு தரவுகளுடன் மனிதர்களுக்கு வேலை செய்வது எளிது, ஆனால் இயந்திரங்களுக்கு இல்லை. இயந்திரக் கற்றல் الگورிதம்கள் எண்களுடன் நன்றாக வேலை செய்கின்றன. அதனால், குறியாக்கம் என்பது தரவுகளை முன் செயலாக்கத்தின் ஒரு முக்கியமான படியாகும், ஏனெனில் இது வகைப்பாட்டு தரவுகளை எண் தரவுகளாக மாற்ற உதவுகிறது, எந்த தகவலையும் இழக்காமல். நல்ல குறியாக்கம் ஒரு நல்ல மாதிரியை உருவாக்க உதவுகிறது.\n",
"\n",
"அம்ச குறியாக்கத்திற்கான இரண்டு முக்கிய வகையான குறியாக்கிகள் உள்ளன:\n",
"\n",
"1. **Ordinal encoder**: இது ஒழுங்கு மாறிலிகளுக்கு பொருத்தமாக உள்ளது, இது வகைப்பாட்டு மாறிலிகள், அவற்றின் தரவுகள் ஒரு தருக்கமான வரிசையை பின்பற்றுகின்றன, எங்கள் தரவுத்தொகுப்பில் `item_size` நெடுவரிசை போன்றவை. இது ஒரு வரைபடத்தை உருவாக்குகிறது, அதில் ஒவ்வொரு வகையும் ஒரு எண்ணால் பிரதிநிதித்துவம் செய்யப்படுகிறது, இது அந்த நெடுவரிசையில் உள்ள வகையின் வரிசை ஆகும்.\n",
"\n",
"2. **Categorical encoder**: இது பெயரிடப்பட்ட மாறிலிகளுக்கு பொருத்தமாக உள்ளது, இது வகைப்பாட்டு மாறிலிகள், அவற்றின் தரவுகள் ஒரு தருக்கமான வரிசையை பின்பற்றவில்லை, எங்கள் தரவுத்தொகுப்பில் `item_size` தவிர்ந்த அனைத்து அம்சங்களும் போன்றவை. இது ஒரு one-hot குறியாக்கம் ஆகும், அதாவது ஒவ்வொரு வகையும் ஒரு பைனரி நெடுவரிசையாக பிரதிநிதித்துவம் செய்யப்படுகிறது: குறியாக்கப்பட்ட மாறி 1 ஆக இருக்கும், பம்ப்கின் அந்த Varietyயைச் சேர்ந்தது என்றால், இல்லையெனில் 0 ஆக இருக்கும்.\n",
"\n",
"Tidymodels இன்னொரு சுத்தமான தொகுப்பை வழங்குகிறது: [recipes](https://recipes.tidymodels.org/) - தரவுகளை முன் செயலாக்கத்திற்கான ஒரு தொகுப்பு. நாம் ஒரு `recipe`யை வரையறுப்போம், இது அனைத்து முன்னோக்கி நெடுவரிசைகளும் ஒரு எண்களின் தொகுப்பாக குறியாக்கப்பட வேண்டும் என்று குறிப்பிடுகிறது, `prep` செய்து தேவையான அளவுகள் மற்றும் புள்ளிவிவரங்களை மதிப்பீடு செய்கிறது, மற்றும் இறுதியாக `bake` செய்து புதிய தரவுகளுக்கு கணக்குகளைப் பயன்படுத்துகிறது.\n",
"\n",
"> சாதாரணமாக, recipes பொதுவாக மாதிரிகள் உருவாக்கத்திற்கான முன் செயலாக்கியாக பயன்படுத்தப்படுகிறது, அங்கு ஒரு தரவுத்தொகுப்பை மாதிரிகள் உருவாக்கத்திற்குத் தயாராக்குவதற்கான படிகள் என்னவென்று வரையறுக்கிறது. அந்தச் சூழலில், `workflow()`யை பயன்படுத்துவது **மிகவும் பரிந்துரைக்கப்படுகிறது**, recipeயை prep மற்றும் bake மூலம் கையேடு முறையில் மதிப்பீடு செய்வதற்குப் பதிலாக. இதை நாங்கள் விரைவில் பார்க்கப் போகிறோம்.\n",
">\n",
"> ஆனால் தற்போது, நாம் recipes + prep + bake ஐ தரவுகளை தரவுப் பகுப்பாய்வுக்குத் தயாராக்குவதற்கான படிகள் என்னவென்று குறிப்பிடுவதற்கும், பின்னர் அந்த படிகள் பயன்படுத்தப்பட்ட முன் செயலாக்கப்பட்ட தரவுகளை எடுக்கவும் பயன்படுத்துகிறோம்.\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"vscode": {
"languageId": "r"
}
},
"outputs": [],
"source": [
"# Preprocess and extract data to allow some data analysis\n",
"baked_pumpkins <- recipe(color ~ ., data = pumpkins_select) %>%\n",
" # Define ordering for item_size column\n",
" step_mutate(item_size = ordered(item_size, levels = c('sml', 'med', 'med-lge', 'lge', 'xlge', 'jbo', 'exjbo'))) %>%\n",
" # Convert factors to numbers using the order defined above (Ordinal encoding)\n",
" step_integer(item_size, zero_based = F) %>%\n",
" # Encode all other predictors using one hot encoding\n",
" step_dummy(all_nominal(), -all_outcomes(), one_hot = TRUE) %>%\n",
" prep(data = pumpkin_select) %>%\n",
" bake(new_data = NULL)\n",
"\n",
"# Display the first few rows of preprocessed data\n",
"baked_pumpkins %>% \n",
" slice_head(n = 5)\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"✅ பொருள் அளவு களுக்கான வரிசை குறியாக்கியைப் பயன்படுத்துவதன் நன்மைகள் என்ன?\n",
"\n",
"### மாறிகளுக்கிடையேயான தொடர்புகளை பகுப்பாய்வு செய்யவும்\n",
"\n",
"நாம் எங்கள் தரவுகளை முன் செயலாக்கிய பிறகு, அம்சங்கள் மற்றும் லேபிளுக்கிடையேயான தொடர்புகளை பகுப்பாய்வு செய்து, அம்சங்களை வழங்கிய நிலையில் மாடல் லேபிளை எவ்வளவு நன்றாக கணிக்க முடியும் என்பதைப் புரிந்துகொள்ளலாம். இந்த வகையான பகுப்பாய்வைச் செய்ய சிறந்த வழி தரவுகளை வரைபடமாக்குவது. \n",
"நாம் மீண்டும் ggplot geom_boxplot_ செயல்பாட்டைப் பயன்படுத்தப் போகிறோம், பொருள் அளவு, வகை மற்றும் நிறம் ஆகியவற்றுக்கிடையேயான தொடர்புகளை ஒரு வகை வரைபடத்தில் காண்பிக்க. தரவுகளை சிறப்பாக வரைபடமாக்க, குறியாக்கம் செய்யப்பட்ட பொருள் அளவு களையும் குறியாக்கம் செய்யப்படாத வகை களையும் பயன்படுத்தப் போகிறோம்.\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"vscode": {
"languageId": "r"
}
},
"outputs": [],
"source": [
"# Define the color palette\n",
"palette <- c(ORANGE = \"orange\", WHITE = \"wheat\")\n",
"\n",
"# We need the encoded Item Size column to use it as the x-axis values in the plot\n",
"pumpkins_select_plot<-pumpkins_select\n",
"pumpkins_select_plot$item_size <- baked_pumpkins$item_size\n",
"\n",
"# Create the grouped box plot\n",
"ggplot(pumpkins_select_plot, aes(x = `item_size`, y = color, fill = color)) +\n",
" geom_boxplot() +\n",
" facet_grid(variety ~ ., scales = \"free_x\") +\n",
" scale_fill_manual(values = palette) +\n",
" labs(x = \"Item Size\", y = \"\") +\n",
" theme_minimal() +\n",
" theme(strip.text = element_text(size = 12)) +\n",
" theme(axis.text.x = element_text(size = 10)) +\n",
" theme(axis.title.x = element_text(size = 12)) +\n",
" theme(axis.title.y = element_blank()) +\n",
" theme(legend.position = \"bottom\") +\n",
" guides(fill = guide_legend(title = \"Color\")) +\n",
" theme(panel.spacing = unit(0.5, \"lines\"))+\n",
" theme(strip.text.y = element_text(size = 4, hjust = 0)) \n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### ஒரு swarm plot பயன்படுத்தவும்\n",
"\n",
"Color ஒரு இரும வகை (White அல்லது Not) என்பதால், இதற்கு காட்சிப்படுத்த 'ஒரு [சிறப்பு அணுகுமுறை](https://github.com/rstudio/cheatsheets/blob/main/data-visualization.pdf)' தேவை.\n",
"\n",
"Item_size-ஐப் பொருத்து நிறத்தின் விநியோகத்தை காட்ட `swarm plot`-ஐ முயற்சிக்கவும்.\n",
"\n",
"நாம் [ggbeeswarm package](https://github.com/eclarke/ggbeeswarm)-ஐ பயன்படுத்துவோம், இது ggplot2-ஐப் பயன்படுத்தி beeswarm-பாணி வரைபடங்களை உருவாக்கும் முறைகளை வழங்குகிறது. Beeswarm வரைபடங்கள், பொதுவாக ஒரே இடத்தில்重மிக்க புள்ளிகளை அடுத்தடுத்து வரிசைப்படுத்தும் ஒரு வழியாகும்.\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"vscode": {
"languageId": "r"
}
},
"outputs": [],
"source": [
"# Create beeswarm plots of color and item_size\n",
"baked_pumpkins %>% \n",
" mutate(color = factor(color)) %>% \n",
" ggplot(mapping = aes(x = color, y = item_size, color = color)) +\n",
" geom_quasirandom() +\n",
" scale_color_brewer(palette = \"Dark2\", direction = -1) +\n",
" theme(legend.position = \"none\")\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"இப்போது நிறத்தின் இரும வகைகள் மற்றும் அளவுகளின் பெரிய குழுவுக்கிடையிலான தொடர்பை நன்கு புரிந்துகொண்டுள்ளதால், ஒரு கொழுந்து பம்ப்கினின் சாத்தியமான நிறத்தை தீர்மானிக்க லாஜிஸ்டிக் ரிக்ரஷனை ஆராய்வோம்.\n",
"\n",
"## உங்கள் மாடலை உருவாக்குங்கள்\n",
"\n",
"உங்கள் வகைப்படுத்தல் மாடலில் பயன்படுத்த விரும்பும் மாறிகளை தேர்ந்தெடுத்து, தரவுகளை பயிற்சி மற்றும் சோதனை தொகுதிகளாக பிரிக்கவும். [rsample](https://rsample.tidymodels.org/), Tidymodels இல் உள்ள ஒரு தொகுப்பு, தரவுகளை திறமையாகப் பிரிக்கவும் மறுஅமர்த்தவும் உகந்த அடித்தளத்தை வழங்குகிறது:\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"vscode": {
"languageId": "r"
}
},
"outputs": [],
"source": [
"# Split data into 80% for training and 20% for testing\n",
"set.seed(2056)\n",
"pumpkins_split <- pumpkins_select %>% \n",
" initial_split(prop = 0.8)\n",
"\n",
"# Extract the data in each split\n",
"pumpkins_train <- training(pumpkins_split)\n",
"pumpkins_test <- testing(pumpkins_split)\n",
"\n",
"# Print out the first 5 rows of the training set\n",
"pumpkins_train %>% \n",
" slice_head(n = 5)\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"🙌 இப்போது பயிற்சிப் பண்புகளை பயிற்சி லேபிள் (நிறம்) உடன் பொருத்தி ஒரு மாதிரியை பயிற்சி செய்ய தயாராக இருக்கிறோம்.\n",
"\n",
"முதலில், எங்கள் தரவுகளை மாதிரி உருவாக்கத்துக்கு தயாராக்க, அதாவது: வகைப்பாட்டு மாறிகளை முழுமையான எண்களாக மாற்றுவது போன்ற முன்னேற்பாடுகளை குறிப்பிடும் ஒரு செய்முறையை உருவாக்குவோம். `baked_pumpkins` போலவே, ஒரு `pumpkins_recipe` உருவாக்குவோம், ஆனால் அதை `prep` மற்றும் `bake` செய்யமாட்டோம், ஏனெனில் இது ஒரு வேலைப்பாட்டில் (workflow) இணைக்கப்படும், இதை நீங்கள் சில படிகளில் காண்பீர்கள்.\n",
"\n",
"Tidymodels-ல் ஒரு லாஜிஸ்டிக் ரிக்ரெஷன் மாதிரியை குறிப்பிட பல வழிகள் உள்ளன. `?logistic_reg()` ஐப் பார்க்கவும். தற்போது, `stats::glm()` என்ஜினின் இயல்புநிலையான அமைப்பின் மூலம் ஒரு லாஜிஸ்டிக் ரிக்ரெஷன் மாதிரியை குறிப்பிடுவோம்.\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"vscode": {
"languageId": "r"
}
},
"outputs": [],
"source": [
"# Create a recipe that specifies preprocessing steps for modelling\n",
"pumpkins_recipe <- recipe(color ~ ., data = pumpkins_train) %>% \n",
" step_mutate(item_size = ordered(item_size, levels = c('sml', 'med', 'med-lge', 'lge', 'xlge', 'jbo', 'exjbo'))) %>%\n",
" step_integer(item_size, zero_based = F) %>% \n",
" step_dummy(all_nominal(), -all_outcomes(), one_hot = TRUE)\n",
"\n",
"# Create a logistic model specification\n",
"log_reg <- logistic_reg() %>% \n",
" set_engine(\"glm\") %>% \n",
" set_mode(\"classification\")\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"இப்போது நமக்கு ஒரு சமையல் முறையும் ஒரு மாடல் விவரமும் உள்ளன, அவற்றை ஒன்றாக இணைத்து ஒரு பொருளாக உருவாக்கும் வழியை கண்டுபிடிக்க வேண்டும். இந்த பொருள் முதலில் தரவுகளை முன் செயலாக்கம் செய்ய வேண்டும் (பின்னணி செயல்பாடுகளில் prep+bake), முன் செயலாக்கப்பட்ட தரவுகளில் மாடலை பொருத்த வேண்டும், மேலும் பின்னர் செயலாக்க நடவடிக்கைகளுக்கு அனுமதி அளிக்க வேண்டும்.\n",
"\n",
"Tidymodels-இல், இந்த வசதியான பொருள் [`workflow`](https://workflows.tidymodels.org/) என்று அழைக்கப்படுகிறது, இது உங்கள் மாடலிங் கூறுகளை வசதியாக வைத்திருக்கிறது.\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"vscode": {
"languageId": "r"
}
},
"outputs": [],
"source": [
"# Bundle modelling components in a workflow\n",
"log_reg_wf <- workflow() %>% \n",
" add_recipe(pumpkins_recipe) %>% \n",
" add_model(log_reg)\n",
"\n",
"# Print out the workflow\n",
"log_reg_wf\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"ஒரு வேலைப்பாடை *குறிப்பிடப்பட்ட* பிறகு, [`fit()`](https://tidymodels.github.io/parsnip/reference/fit.html) செயல்பாட்டைப் பயன்படுத்தி ஒரு மாதிரியை `பயிற்சி` செய்யலாம். வேலைப்பாடுகள் ஒரு செய்முறையை மதிப்பீடு செய்து, பயிற்சி செய்வதற்கு முன் தரவுகளை முன்கூட்டியே செயலாக்கும், எனவே prep மற்றும் bake பயன்படுத்தி அதை கையால் செய்ய வேண்டிய அவசியம் இல்லை.\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"vscode": {
"languageId": "r"
}
},
"outputs": [],
"source": [
"# Train the model\n",
"wf_fit <- log_reg_wf %>% \n",
" fit(data = pumpkins_train)\n",
"\n",
"# Print the trained workflow\n",
"wf_fit\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"மாதிரி அச்சீடு பயிற்சியின் போது கற்றுக்கொண்ட குணகாரங்களை காட்டுகிறது.\n",
"\n",
"இப்போது, பயிற்சி தரவுகளைப் பயன்படுத்தி மாதிரியைப் பயிற்சி செய்துள்ளோம், [parsnip::predict()](https://parsnip.tidymodels.org/reference/predict.model_fit.html) மூலம் சோதனை தரவுகளில் கணிப்புகளை செய்யலாம். முதலில், சோதனை தொகுப்புக்கான லேபிள்களை மற்றும் ஒவ்வொரு லேபிளுக்கான சாத்தியக்கூறுகளை கணிக்க மாதிரியைப் பயன்படுத்துவோம். சாத்தியக்கூறு 0.5-ஐ விட அதிகமாக இருந்தால், கணிக்கப்பட்ட வகுப்பு `WHITE`, இல்லையெனில் `ORANGE`.\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"vscode": {
"languageId": "r"
}
},
"outputs": [],
"source": [
"# Make predictions for color and corresponding probabilities\n",
"results <- pumpkins_test %>% select(color) %>% \n",
" bind_cols(wf_fit %>% \n",
" predict(new_data = pumpkins_test)) %>%\n",
" bind_cols(wf_fit %>%\n",
" predict(new_data = pumpkins_test, type = \"prob\"))\n",
"\n",
"# Compare predictions\n",
"results %>% \n",
" slice_head(n = 10)\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"மிக அருமை! இது லாஜிஸ்டிக் ரிக்ரெஷன் எப்படி செயல்படுகிறது என்பதைப் பற்றிய மேலும் சில பார்வைகளை வழங்குகிறது.\n",
"\n",
"### குழப்ப அட்டவணை மூலம் சிறந்த புரிதல்\n",
"\n",
"ஒவ்வொரு கணிப்பையும் அதற்கேற்ப பொருந்தும் \"நிஜமான உண்மை\" மதிப்புடன் ஒப்பிடுவது, மாதிரியின் கணிப்புகள் எவ்வளவு நன்றாக உள்ளன என்பதை தீர்மானிக்க மிகவும் திறமையான வழி அல்ல. அதிர்ஷ்டவசமாக, Tidymodels-க்கு இன்னும் சில திறமைகள் உள்ளன: [`yardstick`](https://yardstick.tidymodels.org/) - செயல்திறன் அளவுகோல்களைப் பயன்படுத்தி மாதிரிகளின் செயல்திறனை அளவிட பயன்படுத்தப்படும் ஒரு தொகுப்பு.\n",
"\n",
"வகைப்பாடு பிரச்சினைகளுடன் தொடர்புடைய ஒரு செயல்திறன் அளவுகோல் [`confusion matrix`](https://wikipedia.org/wiki/Confusion_matrix) ஆகும். குழப்ப அட்டவணை ஒரு வகைப்பாட்டு மாதிரி எவ்வளவு நன்றாக செயல்படுகிறது என்பதை விவரிக்கிறது. குழப்ப அட்டவணை ஒவ்வொரு வகையிலும் மாதிரி சரியாக வகைப்படுத்திய எத்தனை எடுத்துக்காட்டுகள் உள்ளன என்பதை கணக்கிடுகிறது. எங்கள் நிலைமையில், இது எத்தனை ஆரஞ்சு பூசணிக்காய்கள் ஆரஞ்சு எனவும், எத்தனை வெள்ளை பூசணிக்காய்கள் வெள்ளை எனவும் வகைப்படுத்தப்பட்டன என்பதை உங்களுக்கு காட்டும்; குழப்ப அட்டவணை மேலும் எத்தனை **தவறான** வகைகளில் வகைப்படுத்தப்பட்டன என்பதையும் காட்டும்.\n",
"\n",
"[**`conf_mat()`**](https://tidymodels.github.io/yardstick/reference/conf_mat.html) என்ற yardstick இல் உள்ள செயல்பாடு, கணிக்கப்பட்ட மற்றும் கண்காணிக்கப்பட்ட வகைகளின் இந்த குறுக்கு அட்டவணையை கணக்கிடுகிறது.\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"vscode": {
"languageId": "r"
}
},
"outputs": [],
"source": [
"# Confusion matrix for prediction results\n",
"conf_mat(data = results, truth = color, estimate = .pred_class)\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"நாம் இப்போது குழப்ப அட்டவணையை (confusion matrix) விளக்கிப் பார்க்கலாம். எங்கள் மாதிரி பம்ப்கின்களை இரண்டு பைனரி வகைகளாக வகைப்படுத்த வேண்டும்: `வெள்ளை` மற்றும் `வெள்ளை அல்லாதது`.\n",
"\n",
"- உங்கள் மாதிரி ஒரு பம்ப்கினை வெள்ளையாக கணிக்கிறது, மேலும் அது உண்மையில் 'வெள்ளை' வகையைச் சேர்ந்தது என்றால், அதை `உண்மையான நேர்மறை` (true positive) என்று அழைக்கிறோம், இது மேல் இடது மூலையில் காணப்படும் எண்ணிக்கையால் குறிக்கப்படுகிறது.\n",
"\n",
"- உங்கள் மாதிரி ஒரு பம்ப்கினை வெள்ளை அல்லாததாக கணிக்கிறது, ஆனால் அது உண்மையில் 'வெள்ளை' வகையைச் சேர்ந்தது என்றால், அதை `தவறான எதிர்மறை` (false negative) என்று அழைக்கிறோம், இது கீழ் இடது மூலையில் காணப்படும் எண்ணிக்கையால் குறிக்கப்படுகிறது.\n",
"\n",
"- உங்கள் மாதிரி ஒரு பம்ப்கினை வெள்ளையாக கணிக்கிறது, ஆனால் அது உண்மையில் 'வெள்ளை அல்லாதது' வகையைச் சேர்ந்தது என்றால், அதை `தவறான நேர்மறை` (false positive) என்று அழைக்கிறோம், இது மேல் வலது மூலையில் காணப்படும் எண்ணிக்கையால் குறிக்கப்படுகிறது.\n",
"\n",
"- உங்கள் மாதிரி ஒரு பம்ப்கினை வெள்ளை அல்லாததாக கணிக்கிறது, மேலும் அது உண்மையில் 'வெள்ளை அல்லாதது' வகையைச் சேர்ந்தது என்றால், அதை `உண்மையான எதிர்மறை` (true negative) என்று அழைக்கிறோம், இது கீழ் வலது மூலையில் காணப்படும் எண்ணிக்கையால் குறிக்கப்படுகிறது.\n",
"\n",
"| உண்மை |\n",
"|:-----:|\n",
"\n",
"| | | |\n",
"|---------------|--------|-------|\n",
"| **கணிக்கப்பட்டது** | வெள்ளை | ஆரஞ்சு |\n",
"| வெள்ளை | TP | FP |\n",
"| ஆரஞ்சு | FN | TN |\n",
"\n",
"நீங்கள் ஊகித்திருப்பது போல, அதிகமான உண்மையான நேர்மறைகள் (true positives) மற்றும் உண்மையான எதிர்மறைகள் (true negatives) மற்றும் குறைந்த தவறான நேர்மறைகள் (false positives) மற்றும் தவறான எதிர்மறைகள் (false negatives) இருப்பது விருப்பமானது, இது மாதிரி சிறப்பாக செயல்படுகிறது என்பதை குறிக்கிறது.\n",
"\n",
"குழப்ப அட்டவணை மிகவும் பயனுள்ளதாக இருக்கிறது, ஏனெனில் இது மற்ற அளவுகோல்களை உருவாக்க உதவுகிறது, அவை ஒரு வகைப்பாட்டு மாதிரியின் செயல்திறனை மேலும் மதிப்பீடு செய்ய உதவும். அவற்றைப் பார்ப்போம்:\n",
"\n",
"🎓 துல்லியம் (Precision): `TP/(TP + FP)` இது உண்மையில் நேர்மறையாக உள்ளவற்றில் கணிக்கப்பட்ட நேர்மறைகளின் விகிதமாக வரையறுக்கப்படுகிறது. இதை [நேர்மறை கணிப்பு மதிப்பு](https://en.wikipedia.org/wiki/Positive_predictive_value \"Positive predictive value\") என்றும் அழைக்கப்படுகிறது.\n",
"\n",
"🎓 மீட்டல் (Recall): `TP/(TP + FN)` இது உண்மையில் நேர்மறையாக உள்ள மாதிரிகளில் இருந்து நேர்மறை முடிவுகளின் விகிதமாக வரையறுக்கப்படுகிறது. இதை `உணர்திறன்` (sensitivity) என்றும் அழைக்கப்படுகிறது.\n",
"\n",
"🎓 குறிப்பிட்ட தன்மை (Specificity): `TN/(TN + FP)` இது உண்மையில் எதிர்மறையாக உள்ள மாதிரிகளில் இருந்து எதிர்மறை முடிவுகளின் விகிதமாக வரையறுக்கப்படுகிறது.\n",
"\n",
"🎓 துல்லியமான மதிப்பு (Accuracy): `TP + TN/(TP + TN + FP + FN)` இது மாதிரிக்கான சரியான கணிப்புகளின் சதவீதமாக வரையறுக்கப்படுகிறது.\n",
"\n",
"🎓 F அளவுகோல் (F Measure): துல்லியம் மற்றும் மீட்டலின் எடைசார்ந்த சராசரி, சிறந்த மதிப்பு 1 ஆகவும், மோசமான மதிப்பு 0 ஆகவும் இருக்கும்.\n",
"\n",
"இப்போது இந்த அளவுகோல்களை கணக்கிடுவோம்!\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"vscode": {
"languageId": "r"
}
},
"outputs": [],
"source": [
"# Combine metric functions and calculate them all at once\n",
"eval_metrics <- metric_set(ppv, recall, spec, f_meas, accuracy)\n",
"eval_metrics(data = results, truth = color, estimate = .pred_class)\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## இந்த மாடலின் ROC வளைவை காட்சிப்படுத்துங்கள்\n",
"\n",
"சொல்லப்பட்ட [`ROC வளைவு`](https://en.wikipedia.org/wiki/Receiver_operating_characteristic) பார்க்க ஒரு மேலும் காட்சிப்படுத்தல் செய்யலாம்:\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"vscode": {
"languageId": "r"
}
},
"outputs": [],
"source": [
"# Make a roc_curve\n",
"results %>% \n",
" roc_curve(color, .pred_ORANGE) %>% \n",
" autoplot()\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"ROC வளைவுகள் ஒரு வகைப்பாட்டாளரின் வெளியீட்டை அதன் உண்மையான மற்றும் தவறான நேர்மறை மதிப்புகளின் அடிப்படையில் பார்வையிட பயன்படுத்தப்படுகின்றன. ROC வளைவுகளில் பொதுவாக `True Positive Rate`/Sensitivity Y அச்சில், மற்றும் `False Positive Rate`/1-Specificity X அச்சில் காணப்படும். எனவே, வளைவின் சாய்வு மற்றும் நடுப்புள்ளி கோடு மற்றும் வளைவின் இடைவெளி முக்கியமானவை: வளைவு விரைவாக மேலே சென்று கோட்டை கடக்க வேண்டும். எங்கள் நிலைமையில், ஆரம்பத்தில் தவறான நேர்மறை மதிப்புகள் உள்ளன, பின்னர் கோடு சரியாக மேலே சென்று கடக்கிறது.\n",
"\n",
"இறுதியாக, `yardstick::roc_auc()` ஐ பயன்படுத்தி வளைவின் கீழ் உள்ள பகுதியை (Area Under the Curve) கணக்கிடுவோம். AUC ஐ解釈する ஒரு வழி, மாடல் ஒரு சீரற்ற நேர்மறை எடுத்துக்காட்டை ஒரு சீரற்ற எதிர்மறை எடுத்துக்காட்டை விட அதிகமாக தரவரிசைப்படுத்தும் சாத்தியக்கூறாகும்.\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"vscode": {
"languageId": "r"
}
},
"outputs": [],
"source": [
"# Calculate area under curve\n",
"results %>% \n",
" roc_auc(color, .pred_ORANGE)\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"결과는 약 `0.975`입니다. AUC는 0에서 1 사이의 값을 가지며, 점수가 클수록 좋습니다. 예측이 100% 정확한 모델은 AUC가 1이 됩니다. இந்த நிலைமையில், இந்த மாடல் *மிகவும் நல்லது*.\n",
"\n",
"வருங்கால வகுப்புகளில், வகைப்பாடுகள் பற்றிய பாடங்களில், உங்கள் மாடலின் மதிப்பெண்களை மேம்படுத்துவது எப்படி என்பதை நீங்கள் கற்றுக்கொள்வீர்கள் (இந்த நிலைமையில் சமநிலை இல்லாத தரவுகளை கையாளுதல் போன்றவை).\n",
"\n",
"## 🚀சவால்\n",
"\n",
"லாஜிஸ்டிக் ரிக்ரஷன் பற்றி மேலும் பல விஷயங்களை ஆராய வேண்டும்! ஆனால் கற்றுக்கொள்ள சிறந்த வழி முயற்சிக்க வேண்டும். இந்த வகையான பகுப்பாய்வுக்கு ஏற்ற தரவுத்தொகுப்பை கண்டறிந்து அதில் ஒரு மாடலை உருவாக்குங்கள். நீங்கள் என்ன கற்றுக்கொள்கிறீர்கள்? குறிப்புகள்: [Kaggle](https://www.kaggle.com/search?q=logistic+regression+datasets) இல் 흥미로운 தரவுத்தொகுப்புகளை முயற்சிக்கவும்.\n",
"\n",
"## மதிப்பீடு & சுயபயிற்சி\n",
"\n",
"லாஜிஸ்டிக் ரிக்ரஷனின் சில நடைமுறை பயன்பாடுகள் பற்றிய [Stanford இன் இந்த ஆவணத்தின்](https://web.stanford.edu/~jurafsky/slp3/5.pdf) முதல் சில பக்கங்களை படிக்கவும். இதுவரை நாம் கற்றிருக்கும் ரிக்ரஷன் பணிகளின் வகைகளில் எது சிறந்தது என்பதைப் பற்றி சிந்திக்கவும். எந்த பணிகள் சிறந்ததாக செயல்படும்?\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"\n---\n\n**குறிப்பு**: \nஇந்த ஆவணம் [Co-op Translator](https://github.com/Azure/co-op-translator) என்ற AI மொழிபெயர்ப்பு சேவையைப் பயன்படுத்தி மொழிபெயர்க்கப்பட்டுள்ளது. எங்கள் தரச்செயல்முறைகளுக்கு முக்கியத்துவம் அளிக்கின்ற போதிலும், தானியக்க மொழிபெயர்ப்புகளில் பிழைகள் அல்லது தவறான தகவல்கள் இருக்கக்கூடும் என்பதை தயவுசெய்து கவனத்தில் கொள்ளவும். அதன் இயல்பான மொழியில் உள்ள மூல ஆவணம் அதிகாரப்பூர்வ ஆதாரமாக கருதப்பட வேண்டும். முக்கியமான தகவல்களுக்கு, தொழில்முறை மனித மொழிபெயர்ப்பு பரிந்துரைக்கப்படுகிறது. இந்த மொழிபெயர்ப்பைப் பயன்படுத்துவதால் ஏற்படும் எந்தவொரு தவறான புரிதல்கள் அல்லது தவறான விளக்கங்களுக்கு நாங்கள் பொறுப்பல்ல.\n"
]
}
],
"metadata": {
"anaconda-cloud": "",
"kernelspec": {
"display_name": "R",
"langauge": "R",
"name": "ir"
},
"language_info": {
"codemirror_mode": "r",
"file_extension": ".r",
"mimetype": "text/x-r-source",
"name": "R",
"pygments_lexer": "r",
"version": "3.4.1"
},
"coopTranslator": {
"original_hash": "feaf125f481a89c468fa115bf2aed580",
"translation_date": "2025-10-11T12:16:53+00:00",
"source_file": "2-Regression/4-Logistic/solution/R/lesson_4-R.ipynb",
"language_code": "ta"
}
},
"nbformat": 4,
"nbformat_minor": 1
}