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/3-Linear/solution/R/lesson_3-R.ipynb

1088 lines
77 KiB

{
"nbformat": 4,
"nbformat_minor": 2,
"metadata": {
"colab": {
"name": "lesson_3-R.ipynb",
"provenance": [],
"collapsed_sections": [],
"toc_visible": true
},
"kernelspec": {
"name": "ir",
"display_name": "R"
},
"language_info": {
"name": "R"
},
"coopTranslator": {
"original_hash": "5015d65d61ba75a223bfc56c273aa174",
"translation_date": "2025-10-11T12:22:59+00:00",
"source_file": "2-Regression/3-Linear/solution/R/lesson_3-R.ipynb",
"language_code": "ta"
}
},
"cells": [
{
"cell_type": "markdown",
"source": [
"# ஒரு ரிக்ரஷன் மாடலை உருவாக்கவும்: நேரியல் மற்றும் பாலினோமியல் ரிக்ரஷன் மாடல்கள்\n"
],
"metadata": {
"id": "EgQw8osnsUV-"
}
},
{
"cell_type": "markdown",
"source": [
"## கதிரிக்காய் விலை நிர்ணயத்திற்கு நேரியல் மற்றும் பாலினோமியல் ரிக்ரஷன் - பாடம் 3\n",
"<p >\n",
" <img src=\"../../../../../../translated_images/ta/linear-polynomial.5523c7cb6576ccab.webp\"\n",
" width=\"800\"/>\n",
" <figcaption>தசானி மடிபல்லி உருவாக்கிய தகவல் வரைபடம்</figcaption>\n",
"\n",
"\n",
"<!--![தசானி மடிபல்லி உருவாக்கிய தகவல் வரைபடம்](../../../../../../translated_images/ta/linear-polynomial.5523c7cb6576ccab.webp){width=\"800\"}-->\n",
"\n",
"#### அறிமுகம்\n",
"\n",
"இ bisher நீங்கள் கதிரிக்காய் விலை நிர்ணய தரவுத்தொகுப்பில் இருந்து எடுத்த மாதிரி தரவுடன் ரிக்ரஷன் என்ன என்பதை ஆராய்ந்துள்ளீர்கள், இது முழு பாடத்திலும் பயன்படுத்தப்படும். மேலும், அதை `ggplot2` மூலம் காட்சிப்படுத்தியுள்ளீர்கள்.💪\n",
"\n",
"இப்போது நீங்கள் எம்.எல்.க்கு ரிக்ரஷனை மேலும் ஆழமாகப் புரிந்துகொள்ள தயாராக உள்ளீர்கள். இந்த பாடத்தில், நீங்கள் இரண்டு வகையான ரிக்ரஷன் பற்றி மேலும் அறியப்போகிறீர்கள்: *அடிப்படை நேரியல் ரிக்ரஷன்* மற்றும் *பாலினோமியல் ரிக்ரஷன்*, மேலும் இந்த தொழில்நுட்பங்களின் அடிப்படையில் உள்ள சில கணிதங்களைப் பற்றியும்.\n",
"\n",
"> இந்த பாடத்திட்டத்தின் முழுவதும், கணிதத்தில் குறைந்த அறிவை வைத்திருக்கிறோம் என்று கருதுகிறோம், மேலும் மற்ற துறைகளிலிருந்து வரும் மாணவர்களுக்கு அதை எளிதாக்க முயல்கிறோம். எனவே குறிப்புகள், 🧮 அழைப்புகள், வரைபடங்கள் மற்றும் புரிதலுக்கு உதவும் பிற கற்றல் கருவிகளை கவனிக்கவும்.\n",
"\n",
"#### தயாரிப்பு\n",
"\n",
"நினைவூட்டலாக, நீங்கள் இந்த தரவுகளை ஏற்றுவதன் மூலம் அதில் கேள்விகளை கேட்க முயல்கிறீர்கள்.\n",
"\n",
"- கதிரிக்காய்களை வாங்க சிறந்த நேரம் எது?\n",
"\n",
"- சிறிய கதிரிக்காய்களின் ஒரு கேஸின் விலையை நான் எதிர்பார்க்க முடியுமா?\n",
"\n",
"- நான் அவற்றை அரை-புஷல் கூடை அல்லது 1 1/9 புஷல் பெட்டியில் வாங்க வேண்டுமா? இந்த தரவுகளை மேலும் ஆராய்வோம்.\n",
"\n",
"முந்தைய பாடத்தில், நீங்கள் ஒரு `tibble` (தரவுப் பிரேமின் நவீன மறுபரிசீலனை) உருவாக்கி, அசல் தரவுத்தொகுப்பின் ஒரு பகுதியை அதில் நிரப்பினீர்கள், புஷல் மூலம் விலையை நிலைப்படுத்தி. அதைச் செய்வதன் மூலம், நீங்கள் சுமார் 400 தரவுப் புள்ளிகளை மட்டுமே சேகரிக்க முடிந்தது, மேலும் அது விழா மாதங்களுக்கு மட்டுமே. இந்த தரவின் தன்மையை மேலும் சுத்தமாக்குவதன் மூலம் சிறிது கூடுதல் விவரங்களைப் பெற முடியுமா? பார்ப்போம்... 🕵️‍♀️\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",
"- `corrplot`: [corrplot தொகுப்பு](https://cran.r-project.org/web/packages/corrplot/vignettes/corrplot-intro.html) மாறிகள் மத்தியில் மறைந்த முறைமைகளை கண்டறிய உதவும் தானியங்கி மாறி மறுசீரமைப்பை ஆதரிக்கும் தொடர்பு மாறி அட்டவணையில் காட்சிப்படுத்தும் ஆய்வுக் கருவியை வழங்குகிறது.\n",
"\n",
"நீங்கள் அவற்றை கீழே உள்ளபடி நிறுவலாம்:\n",
"\n",
"`install.packages(c(\"tidyverse\", \"tidymodels\", \"janitor\", \"corrplot\"))`\n",
"\n",
"கீழே உள்ள ஸ்கிரிப்ட், இந்த தொகுதியை முடிக்க உங்களுக்கு தேவையான தொகுப்புகள் உள்ளதா என்பதைச் சரிபார்க்கிறது, அவற்றை நிறுவவில்லை என்றால் அவற்றை உங்களுக்காக நிறுவுகிறது.\n"
],
"metadata": {
"id": "WqQPS1OAsg3H"
}
},
{
"cell_type": "code",
"execution_count": null,
"source": [
"suppressWarnings(if (!require(\"pacman\")) install.packages(\"pacman\"))\n",
"\n",
"pacman::p_load(tidyverse, tidymodels, janitor, corrplot)"
],
"outputs": [],
"metadata": {
"id": "tA4C2WN3skCf",
"colab": {
"base_uri": "https://localhost:8080/"
},
"outputId": "c06cd805-5534-4edc-f72b-d0d1dab96ac0"
}
},
{
"cell_type": "markdown",
"source": [
"நாம் பின்னர் இந்த அற்புதமான தொகுப்புகளை ஏற்றுவோம் மற்றும் அவற்றை தற்போதைய R அமர்வில் பயன்படுத்தக்கூடியதாக மாற்றுவோம். (இது வெறும் விளக்கத்திற்காக, `pacman::p_load()` இதை ஏற்கனவே செய்துவிட்டது)\n",
"\n",
"## 1. ஒரு நேரியல் ரேகை\n",
"\n",
"Lesson 1-ல் நீங்கள் கற்றது போல, ஒரு நேரியல் ரேகைச்சிதறல் பயிற்சியின் நோக்கம் *சிறந்த பொருத்தம் கொண்ட ஒரு ரேகையை* வரைபடம் செய்யும் திறனை பெறுவது:\n",
"\n",
"- **மாறிகளின் தொடர்புகளை காட்டுதல்**. மாறிகளுக்கிடையிலான தொடர்பை காட்டுதல்\n",
"\n",
"- **முன்கூட்டியே கணிக்குதல்**. புதிய தரவுப் புள்ளி அந்த ரேகைக்கு தொடர்பான இடத்தில் எங்கு இருக்கும் என்பதை துல்லியமாக கணிக்குதல்.\n",
"\n",
"இந்த வகையான ரேகையை வரைய, **குறைந்த-சதுரங்கள் ரேகைச்சிதறல்** எனப்படும் புள்ளியியல் தொழில்நுட்பத்தை பயன்படுத்துகிறோம். `குறைந்த-சதுரங்கள்` என்றால், ரேகைச்சிதறல் ரேகையைச் சுற்றியுள்ள அனைத்து தரவுப் புள்ளிகளும் சதுரமாக்கப்பட்டு பின்னர் சேர்க்கப்படும். முடிவில், அந்த இறுதி தொகை மிகச் சிறியதாக இருக்க வேண்டும், ஏனெனில் பிழைகள் குறைவாக இருக்க வேண்டும், அல்லது `குறைந்த-சதுரங்கள்`. எனவே, சிறந்த பொருத்தம் கொண்ட ரேகை என்பது சதுர பிழைகளின் தொகை மிகக் குறைந்த மதிப்பை வழங்கும் ரேகை - அதனால் *குறைந்த-சதுரங்கள் ரேகைச்சிதறல்* என்ற பெயர்.\n",
"\n",
"நாம் இதைச் செய்கிறோம், ஏனெனில் அனைத்து தரவுப் புள்ளிகளிலிருந்தும் குறைந்த மொத்த தூரம் கொண்ட ஒரு ரேகையை மாதிரி செய்ய விரும்புகிறோம். மேலும், நாம் அதன் திசையை விட அதன் அளவைக் கவலைப்படுவதால், சேர்க்கும் முன் புள்ளிகளை சதுரமாக்குகிறோம்.\n",
"\n",
"> **🧮 கணிதத்தை காட்டுங்கள்**\n",
">\n",
"> இந்த ரேகை, *சிறந்த பொருத்தம் கொண்ட ரேகை* [ஒரு சமன்பாட்டால்](https://en.wikipedia.org/wiki/Simple_linear_regression) வெளிப்படுத்தப்படலாம்:\n",
">\n",
"> Y = a + bX\n",
">\n",
"> `X` என்பது '`விளக்க மாறி` அல்லது `முன்னறிவிப்பு மாறி`'. `Y` என்பது '`சார்ந்த மாறி` அல்லது `முடிவு`'. ரேகையின் சாய்வு `b` ஆகும், மற்றும் `a` என்பது y-இடைமுகம், இது `X = 0` என்றபோது `Y` இன் மதிப்பைக் குறிக்கிறது.\n",
">\n",
"\n",
"> ![](../../../../../../2-Regression/3-Linear/solution/images/slope.png \"சாய்வு = $y/x$\")\n",
" Jen Looper உருவாக்கிய தகவல்படம்\n",
">\n",
"> முதலில், சாய்வு `b` ஐ கணக்கிடுங்கள்.\n",
">\n",
"> வேறு வார்த்தைகளில், மற்றும் எங்கள் பூசணிக்காய் தரவின் முதன்மை கேள்வியைப் பார்க்கும்போது: \"மாதத்தின்படி ஒரு பூசணிக்காயின் புஷல் விலையை கணிக்கவும்\", `X` விலை குறிக்கிறது மற்றும் `Y` விற்பனை மாதத்தை குறிக்கிறது.\n",
">\n",
"> ![](../../../../../../translated_images/ta/calculation.989aa7822020d9d0ba9fc781f1ab5192f3421be86ebb88026528aef33c37b0d8.png)\n",
" Jen Looper உருவாக்கிய தகவல்படம்\n",
"> \n",
"> `Y` இன் மதிப்பை கணக்கிடுங்கள். நீங்கள் சுமார் \\$4 செலுத்தினால், அது ஏப்ரல் மாதமாக இருக்க வேண்டும்!\n",
">\n",
"> இந்த ரேகையை கணக்கிடும் கணிதம், ரேகையின் சாய்வை காட்ட வேண்டும், இது இடைமுகத்திற்கும் சார்ந்தது, அல்லது `X = 0` என்றபோது `Y` எங்கு அமைந்துள்ளது என்பதை.\n",
">\n",
"> இந்த மதிப்புகளுக்கான கணக்கீட்டு முறையை [Math is Fun](https://www.mathsisfun.com/data/least-squares-regression.html) இணையதளத்தில் காணலாம். மேலும், [இந்த குறைந்த-சதுரங்கள் கணக்கீட்டியை](https://www.mathsisfun.com/data/least-squares-calculator.html) பார்வையிடவும், எவ்வாறு எண்களின் மதிப்புகள் ரேகையை பாதிக்கின்றன என்பதைப் பாருங்கள்.\n",
"\n",
"அதிகம் பயமில்லை, சரியா? 🤓\n",
"\n",
"#### தொடர்பு\n",
"\n",
"இன்னொரு முக்கியமான சொல் **தொகுப்பு குணகம்** என்பது கொடுக்கப்பட்ட X மற்றும் Y மாறிகளுக்கிடையிலான தொடர்பு. ஒரு சிதறல் வரைபடத்தைப் பயன்படுத்தி, நீங்கள் இந்த குணகத்தை விரைவாக காட்சிப்படுத்தலாம். தரவுப் புள்ளிகள் ஒழுங்காக ஒரு ரேகையில் சிதறியுள்ள வரைபடம் அதிக தொடர்பைக் கொண்டுள்ளது, ஆனால் X மற்றும் Y இடையே தரவுப் புள்ளிகள் எங்கும் சிதறியுள்ள வரைபடம் குறைந்த தொடர்பைக் கொண்டுள்ளது.\n",
"\n",
"ஒரு நல்ல நேரியல் ரேகைச்சிதறல் மாதிரி, குறைந்த-சதுரங்கள் ரேகைச்சிதறல் முறையைப் பயன்படுத்தி ஒரு ரேகைச்சிதறலுடன் 1-க்கு அருகிலுள்ள (0-க்கு அருகிலல்ல) தொடர்பு குணகம் கொண்டதாக இருக்கும்.\n"
],
"metadata": {
"id": "cdX5FRpvsoP5"
}
},
{
"cell_type": "markdown",
"source": [
"## **2. தரவுடன் ஒரு நடனம்: மாதிரியாக்கத்திற்கு பயன்படுத்தப்படும் ஒரு டேட்டா ஃப்ரேமை உருவாக்குதல்**\n",
"\n",
"<p >\n",
" <img src=\"../../../../../../translated_images/ta/janitor.e4a77dd3d3e6a32e.webp\"\n",
" width=\"700\"/>\n",
" <figcaption>@allison_horst அவர்களின் கலைப்பணி</figcaption>\n",
"\n",
"\n",
"<!--![@allison_horst அவர்களின் கலைப்பணி](../../../../../../translated_images/ta/janitor.e4a77dd3d3e6a32e.webp){width=\"700\"}-->\n"
],
"metadata": {
"id": "WdUKXk7Bs8-V"
}
},
{
"cell_type": "markdown",
"source": [
"தேவையான நூலகங்கள் மற்றும் தரவுத்தொகுப்பை ஏற்றவும். தரவுகளை ஒரு subset கொண்ட தரவுசட்டமாக மாற்றவும்:\n",
"\n",
"- புஷல் மூலம் விலை நிர்ணயிக்கப்பட்ட பம்ப்கின்களை மட்டும் பெறவும்\n",
"\n",
"- தேதியை மாதமாக மாற்றவும்\n",
"\n",
"- உயர் மற்றும் குறைந்த விலைகளின் சராசரியாக விலையை கணக்கிடவும்\n",
"\n",
"- புஷல் அளவின் அடிப்படையில் விலையை மாற்றவும்\n",
"\n",
"> இந்த படிகளை [முந்தைய பாடத்தில்](https://github.com/microsoft/ML-For-Beginners/blob/main/2-Regression/2-Data/solution/lesson_2-R.ipynb) கCovered செய்தோம்.\n"
],
"metadata": {
"id": "fMCtu2G2s-p8"
}
},
{
"cell_type": "code",
"execution_count": null,
"source": [
"# Load the core Tidyverse packages\n",
"library(tidyverse)\n",
"library(lubridate)\n",
"\n",
"# Import the pumpkins data\n",
"pumpkins <- read_csv(file = \"https://raw.githubusercontent.com/microsoft/ML-For-Beginners/main/2-Regression/data/US-pumpkins.csv\")\n",
"\n",
"\n",
"# Get a glimpse and dimensions of the data\n",
"glimpse(pumpkins)\n",
"\n",
"\n",
"# Print the first 50 rows of the data set\n",
"pumpkins %>% \n",
" slice_head(n = 5)"
],
"outputs": [],
"metadata": {
"id": "ryMVZEEPtERn"
}
},
{
"cell_type": "markdown",
"source": [
"சாகசத்தின் உண்மையான ஆவியில், dirty தரவுகளை பரிசோதிக்கவும் சுத்தம் செய்யவும் எளிய செயல்பாடுகளை வழங்கும் [`janitor package`](../../../../../../2-Regression/3-Linear/solution/R/github.com/sfirke/janitor) ஐ ஆராய்வோம். உதாரணமாக, நமது தரவுக்கான நெடுவரிசை பெயர்களை பார்ப்போம்:\n"
],
"metadata": {
"id": "xcNxM70EtJjb"
}
},
{
"cell_type": "code",
"execution_count": null,
"source": [
"# Return column names\n",
"pumpkins %>% \n",
" names()"
],
"outputs": [],
"metadata": {
"id": "5XtpaIigtPfW"
}
},
{
"cell_type": "markdown",
"source": [
"🤔 நாங்கள் மேலும் சிறப்பாக செய்யலாம். இந்த sütun பெயர்களை `friendR` ஆக மாற்றி [snake_case](https://en.wikipedia.org/wiki/Snake_case) முறையைப் பயன்படுத்தி `janitor::clean_names` மூலம் மாற்றுவோம். இந்த செயல்பாட்டைப் பற்றி மேலும் அறிய: `?clean_names`\n"
],
"metadata": {
"id": "IbIqrMINtSHe"
}
},
{
"cell_type": "code",
"execution_count": null,
"source": [
"# Clean names to the snake_case convention\n",
"pumpkins <- pumpkins %>% \n",
" clean_names(case = \"snake\")\n",
"\n",
"# Return column names\n",
"pumpkins %>% \n",
" names()"
],
"outputs": [],
"metadata": {
"id": "a2uYvclYtWvX"
}
},
{
"cell_type": "markdown",
"source": [
"மிகவும் சுத்தமாக tidyR 🧹! இப்போது, முந்தைய பாடத்தில் போலவே `dplyr` பயன்படுத்தி தரவுடன் ஒரு நடனம்! 💃\n"
],
"metadata": {
"id": "HfhnuzDDtaDd"
}
},
{
"cell_type": "code",
"execution_count": null,
"source": [
"# Select desired columns\n",
"pumpkins <- pumpkins %>% \n",
" select(variety, city_name, package, low_price, high_price, date)\n",
"\n",
"\n",
"\n",
"# Extract the month from the dates to a new column\n",
"pumpkins <- pumpkins %>%\n",
" mutate(date = mdy(date),\n",
" month = month(date)) %>% \n",
" select(-date)\n",
"\n",
"\n",
"\n",
"# Create a new column for average Price\n",
"pumpkins <- pumpkins %>% \n",
" mutate(price = (low_price + high_price)/2)\n",
"\n",
"\n",
"# Retain only pumpkins with the string \"bushel\"\n",
"new_pumpkins <- pumpkins %>% \n",
" filter(str_detect(string = package, pattern = \"bushel\"))\n",
"\n",
"\n",
"# Normalize the pricing so that you show the pricing per bushel, not per 1 1/9 or 1/2 bushel\n",
"new_pumpkins <- new_pumpkins %>% \n",
" mutate(price = case_when(\n",
" str_detect(package, \"1 1/9\") ~ price/(1.1),\n",
" str_detect(package, \"1/2\") ~ price*2,\n",
" TRUE ~ price))\n",
"\n",
"# Relocate column positions\n",
"new_pumpkins <- new_pumpkins %>% \n",
" relocate(month, .before = variety)\n",
"\n",
"\n",
"# Display the first 5 rows\n",
"new_pumpkins %>% \n",
" slice_head(n = 5)"
],
"outputs": [],
"metadata": {
"id": "X0wU3gQvtd9f"
}
},
{
"cell_type": "markdown",
"source": [
"சிறப்பாக செய்தீர்கள்!👌 இப்போது உங்களிடம் புதிய ரிக்ரஷன் மாடலை உருவாக்க ஒரு சுத்தமான, ஒழுங்கான தரவுத்தொகுப்பு உள்ளது!\n",
"\n",
"ஒரு ஸ்காட்டர் ப்ளாட்டை பார்க்க விரும்புகிறீர்களா?\n"
],
"metadata": {
"id": "UpaIwaxqth82"
}
},
{
"cell_type": "code",
"execution_count": null,
"source": [
"# Set theme\n",
"theme_set(theme_light())\n",
"\n",
"# Make a scatter plot of month and price\n",
"new_pumpkins %>% \n",
" ggplot(mapping = aes(x = month, y = price)) +\n",
" geom_point(size = 1.6)\n"
],
"outputs": [],
"metadata": {
"id": "DXgU-j37tl5K"
}
},
{
"cell_type": "markdown",
"source": [
"ஒரு சிதறல் வரைபடம் நமக்கு நினைவூட்டுகிறது, நமக்கு ஆகஸ்ட் முதல் டிசம்பர் வரை மாத தரவுகள் மட்டுமே உள்ளன. நேரியல் முறையில் முடிவுகளை வரையறுக்க மேலும் தரவுகள் தேவைப்படலாம்.\n",
"\n",
"நாம் மீண்டும் எங்கள் மாதிரித் தரவுகளைப் பார்ப்போம்:\n"
],
"metadata": {
"id": "Ve64wVbwtobI"
}
},
{
"cell_type": "code",
"execution_count": null,
"source": [
"# Display first 5 rows\n",
"new_pumpkins %>% \n",
" slice_head(n = 5)"
],
"outputs": [],
"metadata": {
"id": "HFQX2ng1tuSJ"
}
},
{
"cell_type": "markdown",
"source": [
"நாம் `city` அல்லது `package` போன்ற எழுத்து வகை உள்ள களங்களை அடிப்படையாகக் கொண்டு ஒரு pumpkin-இன் `price`-ஐ கணிக்க விரும்பினால் என்ன செய்வது? அல்லது இன்னும் எளிதாக, `package` மற்றும் `price` ஆகியவற்றுக்கு இடையிலான தொடர்பை (இரண்டுமே எண் வடிவில் இருக்க வேண்டும்) எப்படி கண்டறியலாம்? 🤷🤷\n",
"\n",
"Machine learning மாதிரிகள் எழுத்து மதிப்புகளுக்கு பதிலாக எண் அம்சங்களுடன் சிறப்பாக செயல்படுகின்றன, எனவே பொதுவாக நீங்கள் வகை அம்சங்களை எண் வடிவங்களாக மாற்ற வேண்டும்.\n",
"\n",
"இதன் பொருள், மாதிரி எளிதாக பயன்படுத்தக்கூடியதாக எங்கள் முன்னோக்கிகளை மறுவடிவமைக்க ஒரு வழியை கண்டுபிடிக்க வேண்டும், இது `feature engineering` எனப்படும் செயல்முறையாகும்.\n"
],
"metadata": {
"id": "7hsHoxsStyjJ"
}
},
{
"cell_type": "markdown",
"source": [
"## 3. மாதிரி உருவாக்கத்திற்கான தரவுகளை முன் செயலாக்கம் 👩‍🍳👨‍🍳\n",
"\n",
"மாதிரிக்கு தரவுகளை எளிதாக பயன்படுத்த உதவுவதற்காக முன்னோக்கி மதிப்புகளை மறுவடிவமைப்பது `அம்ச பொறியியல்` என்று அழைக்கப்படுகிறது.\n",
"\n",
"விவిధ மாதிரிகள் வித்தியாசமான முன் செயலாக்க தேவைகளை கொண்டுள்ளன. உதாரணமாக, `குறுக்கீடு வகை மாறிகள்` போன்ற மாதங்கள், வகைகள் மற்றும் city_name ஆகியவற்றை குறைந்த சதுரங்கள் முறைமையில் குறிக்க வேண்டும். இது `வகை மதிப்புகள்` கொண்ட ஒரு நெடுவரிசையை `எண் நெடுவரிசைகள்` ஆக மாற்றுவதைக் குறிக்கிறது, இது அசல் நெடுவரிசையை மாற்றும்.\n",
"\n",
"உதாரணமாக, உங்கள் தரவுகளில் பின்வரும் வகை அம்சம் உள்ளதாகக் கருதுங்கள்:\n",
"\n",
"| நகரம் |\n",
"|:-------:|\n",
"| டென்பர் |\n",
"| நைரோபி |\n",
"| டோக்கியோ |\n",
"\n",
"நீங்கள் *ஒழுங்கு குறியீடு* பயன்படுத்தி ஒவ்வொரு வகைக்கும் தனித்துவமான முழு எண் மதிப்பை மாற்றலாம், இதுபோல:\n",
"\n",
"| நகரம் |\n",
"|:----:|\n",
"| 0 |\n",
"| 1 |\n",
"| 2 |\n",
"\n",
"இதுதான் நாங்கள் எங்கள் தரவுகளுக்கு செய்யப் போகிறோம்!\n",
"\n",
"இந்த பிரிவில், மற்றொரு அற்புதமான Tidymodels தொகுப்பை ஆராய்வோம்: [recipes](https://tidymodels.github.io/recipes/) - இது உங்கள் தரவுகளை **மாதிரி பயிற்சிக்கு முன்** செயலாக்க உதவுவதற்காக வடிவமைக்கப்பட்டுள்ளது. அதன் மையத்தில், ஒரு recipe என்பது ஒரு தரவுத்தொகுப்பை மாதிரி உருவாக்கத்திற்குத் தயாராக மாற்றுவதற்கான படிகளை வரையறுக்கும் ஒரு பொருள் ஆகும்.\n",
"\n",
"இப்போது, முன்னோக்கி நெடுவரிசைகளில் உள்ள அனைத்து கண்காணிப்புகளுக்கும் தனித்துவமான முழு எண்களை மாற்றுவதன் மூலம் எங்கள் தரவுகளை மாதிரி உருவாக்கத்திற்குத் தயாராக்கும் ஒரு recipe உருவாக்குவோம்:\n"
],
"metadata": {
"id": "AD5kQbcvt3Xl"
}
},
{
"cell_type": "code",
"execution_count": null,
"source": [
"# Specify a recipe\n",
"pumpkins_recipe <- recipe(price ~ ., data = new_pumpkins) %>% \n",
" step_integer(all_predictors(), zero_based = TRUE)\n",
"\n",
"\n",
"# Print out the recipe\n",
"pumpkins_recipe"
],
"outputs": [],
"metadata": {
"id": "BNaFKXfRt9TU"
}
},
{
"cell_type": "markdown",
"source": [
"அற்புதம்! 👏 நாங்கள் முதல் ரெசிபியை உருவாக்கியுள்ளோம், இது ஒரு முடிவை (விலை) மற்றும் அதற்கான முன்னறிவிப்புகளை குறிப்பிடுகிறது, மேலும் அனைத்து முன்னறிவிப்பு களங்கள் முழுமையாக முழு எண்களாக மாற்றப்பட வேண்டும் என்று குறிப்பிடுகிறது 🙌! இதை விரைவாக பிரித்து பார்ப்போம்:\n",
"\n",
"- `recipe()`-க்கு உள்ள அழைப்பு ஒரு சூத்திரத்துடன், `new_pumpkins` தரவைக் குறிக்கோளாகக் கொண்டு மாறிகளின் *பங்கு*களை ரெசிபிக்கு தெரிவிக்கிறது. உதாரணமாக, `price` கால் அட்டவணை `outcome` பங்காக ஒதுக்கப்பட்டுள்ளது, மற்ற அனைத்து கால் அட்டவணைகள் `predictor` பங்காக ஒதுக்கப்பட்டுள்ளன.\n",
"\n",
"- `step_integer(all_predictors(), zero_based = TRUE)` அனைத்து முன்னறிவிப்புகளும் 0-இல் தொடங்கும் எண்களின் தொகுப்பாக மாற்றப்பட வேண்டும் என்று குறிப்பிடுகிறது.\n",
"\n",
"நிச்சயமாக, உங்களுக்கு இப்படி ஒரு எண்ணம் இருக்கலாம்: \"இது மிகவும் அருமை!! ஆனால், நான் ரெசிபிகள் என்ன எதிர்பார்க்கிறேன் என்பதை சரியாகச் செய்கிறார்களா என்பதை உறுதிப்படுத்த வேண்டும் என்றால் என்ன செய்வது? 🤔\"\n",
"\n",
"அது ஒரு அற்புதமான எண்ணம்! பாருங்கள், உங்கள் ரெசிபி வரையறுக்கப்பட்டவுடன், தரவுகளை உண்மையில் முன் செயலாக்க தேவையான அளவுருக்களை மதிப்பீடு செய்யலாம், பின்னர் செயலாக்கப்பட்ட தரவுகளை எடுக்கலாம். Tidymodels பயன்படுத்தும்போது நீங்கள் பொதுவாக இதை செய்ய வேண்டியதில்லை (சாதாரண நடைமுறையை நாங்கள் ஒரு நிமிடத்தில் பார்க்கிறோம்-\\> `workflows`), ஆனால் இது ரெசிபிகள் உங்கள் எதிர்பார்ப்புகளை பூர்த்தி செய்கிறார்களா என்பதை உறுதிப்படுத்த ஒரு வகையான சான்று சோதனை செய்ய உதவியாக இருக்கலாம்.\n",
"\n",
"அதற்காக, உங்களுக்கு மேலும் இரண்டு செயல் வார்த்தைகள் தேவைப்படும்: `prep()` மற்றும் `bake()`. எப்போதும் போல, [`Allison Horst`](https://github.com/allisonhorst/stats-illustrations) அவர்களின் சிறிய R நண்பர்கள் உங்களுக்கு இதை மேலும் விளக்க உதவுகிறார்கள்!\n",
"\n",
"<p >\n",
" <img src=\"../../../../../../translated_images/ta/recipes.9ad10d8a4056bf89.webp\"\n",
" width=\"550\"/>\n",
" <figcaption>@allison_horst அவர்களின் கலைப்பணி</figcaption>\n"
],
"metadata": {
"id": "KEiO0v7kuC9O"
}
},
{
"cell_type": "markdown",
"source": [
"[`prep()`](https://recipes.tidymodels.org/reference/prep.html): பயிற்சி தொகுப்பிலிருந்து தேவையான அளவுருக்களை மதிப்பீடு செய்து, பிற தரவுத்தொகுப்புகளில் பயன்படுத்த முடியும். உதாரணமாக, ஒரு கொடுக்கப்பட்ட முன்னறிவிப்பு நெடுவரிசைக்கு, எந்தக் கண்காணிப்பு 0 அல்லது 1 அல்லது 2 போன்ற முழு எண்களாக ஒதுக்கப்படும்.\n",
"\n",
"[`bake()`](https://recipes.tidymodels.org/reference/bake.html): தயாரிக்கப்பட்ட recipe-ஐ எடுத்து, எந்த தரவுத்தொகுப்பிலும் செயல்பாடுகளைப் பயன்படுத்துகிறது.\n",
"\n",
"இதைச் சொல்லும்போது, நமது recipes-ஐ prep மற்றும் bake செய்து, உள்ளே என்ன நடக்கிறது என்பதை உறுதிப்படுத்திக் கொள்வோம். முன்னறிவிப்பு நெடுவரிசைகள் முதலில் குறியாக்கம் செய்யப்படும், பின்னர் மாதிரி பொருத்தப்படும்.\n"
],
"metadata": {
"id": "Q1xtzebuuTCP"
}
},
{
"cell_type": "code",
"execution_count": null,
"source": [
"# Prep the recipe\n",
"pumpkins_prep <- prep(pumpkins_recipe)\n",
"\n",
"# Bake the recipe to extract a preprocessed new_pumpkins data\n",
"baked_pumpkins <- bake(pumpkins_prep, new_data = NULL)\n",
"\n",
"# Print out the baked data set\n",
"baked_pumpkins %>% \n",
" slice_head(n = 10)"
],
"outputs": [],
"metadata": {
"id": "FGBbJbP_uUUn"
}
},
{
"cell_type": "markdown",
"source": [
"வா-வா! 🥳 `baked_pumpkins` எனும் செயலாக்கப்பட்ட தரவுகளில் அனைத்து முன்னோக்கிகளும் குறியாக்கம் செய்யப்பட்டுள்ளன, இது நிச்சயமாக நமது முன் செயலாக்க நடவடிக்கைகள் எதிர்பார்த்தபடி செயல்படும் என்பதை உறுதிப்படுத்துகிறது. இதனால் தரவுகளைப் படிக்க உங்களுக்கு சற்று கடினமாக இருக்கும், ஆனால் Tidymodels-க்கு மிகவும் புரிந்துகொள்ளக்கூடியதாக இருக்கும்! எந்தக் கண்காணிப்புகள் தொடர்பான முழுமையான எண்களுக்கு மாறியுள்ளன என்பதை கண்டறிய சிறிது நேரம் எடுத்துக்கொள்ளுங்கள்.\n",
"\n",
"மேலும் குறிப்பிடத்தக்கது, `baked_pumpkins` என்பது ஒரு தரவக் கட்டமைப்பாகும், இதில் கணக்கீடுகளைச் செய்ய முடியும்.\n",
"\n",
"உதாரணமாக, உங்கள் தரவின் இரண்டு புள்ளிகளுக்கு இடையில் நல்ல தொடர்பை கண்டறிந்து, ஒரு சிறந்த முன்னறிவிப்பு மாதிரியை உருவாக்க முயற்சிக்கலாம். இதற்காக `cor()` என்ற செயல்பாட்டைப் பயன்படுத்துவோம். இந்த செயல்பாட்டைப் பற்றி மேலும் அறிய `?cor()` எனத் தட்டச்சு செய்யுங்கள்.\n"
],
"metadata": {
"id": "1dvP0LBUueAW"
}
},
{
"cell_type": "code",
"execution_count": null,
"source": [
"# Find the correlation between the city_name and the price\n",
"cor(baked_pumpkins$city_name, baked_pumpkins$price)\n",
"\n",
"# Find the correlation between the package and the price\n",
"cor(baked_pumpkins$package, baked_pumpkins$price)\n"
],
"outputs": [],
"metadata": {
"id": "3bQzXCjFuiSV"
}
},
{
"cell_type": "markdown",
"source": [
"நகரம் மற்றும் விலைக்கு இடையில் மிகவும் குறைந்த தொடர்பு மட்டுமே உள்ளது என்று தெரிகிறது. ஆனால், தொகுப்பு மற்றும் அதன் விலைக்கு இடையில் சிறிது மேம்பட்ட தொடர்பு உள்ளது. இது பொருத்தமாகத்தான் இருக்கிறது, இல்லையா? பொதுவாக, உற்பத்திப் பெட்டி பெரியதாக இருந்தால், விலை அதிகமாக இருக்கும்.\n",
"\n",
"இதற்கிடையில், `corrplot` பாக்கேஜைப் பயன்படுத்தி அனைத்து களங்களின் தொடர்பு மாட்ரிக்ஸை காட்சிப்படுத்த முயற்சிக்கலாம்.\n"
],
"metadata": {
"id": "BToPWbgjuoZw"
}
},
{
"cell_type": "code",
"execution_count": null,
"source": [
"# Load the corrplot package\n",
"library(corrplot)\n",
"\n",
"# Obtain correlation matrix\n",
"corr_mat <- cor(baked_pumpkins %>% \n",
" # Drop columns that are not really informative\n",
" select(-c(low_price, high_price)))\n",
"\n",
"# Make a correlation plot between the variables\n",
"corrplot(corr_mat, method = \"shade\", shade.col = NA, tl.col = \"black\", tl.srt = 45, addCoef.col = \"black\", cl.pos = \"n\", order = \"original\")"
],
"outputs": [],
"metadata": {
"id": "ZwAL3ksmutVR"
}
},
{
"cell_type": "markdown",
"source": [
"🤩🤩 மிகவும் சிறந்தது.\n",
"\n",
"இப்போது இந்த தரவின் அடிப்படையில் கேட்க வேண்டிய ஒரு நல்ல கேள்வி: '`ஒரு கொடுக்கப்பட்ட பரங்கிக்காய் தொகுப்பின் விலையை நான் எதிர்பார்க்க முடியுமா?`' இதை உடனே ஆராய்வோம்!\n",
"\n",
"> குறிப்பு: நீங்கள் **`pumpkins_prep`** என்ற தயாரிக்கப்பட்ட செய்முறையை **`new_data = NULL`** உடன் **`bake()`** செய்தால், செயல்படுத்தப்பட்ட (அதாவது குறியாக்கப்பட்ட) பயிற்சி தரவுகளை நீங்கள் பெறுவீர்கள். உதாரணமாக, உங்களிடம் மற்றொரு தரவுத்தொகுப்பு, ஒரு சோதனை தொகுப்பு இருந்தால், அந்த செய்முறை அதை எப்படி முன்-செயலாக்கும் என்பதை பார்க்க விரும்பினால், நீங்கள் **`pumpkins_prep`** ஐ **`new_data = test_set`** உடன் bake செய்யலாம்.\n",
"\n",
"## 4. ஒரு நேரியல் மடக்கீட்டு மாதிரியை உருவாக்குங்கள்\n",
"\n",
"<p >\n",
" <img src=\"../../../../../../translated_images/ta/linear-polynomial.5523c7cb6576ccab.webp\"\n",
" width=\"800\"/>\n",
" <figcaption>தசானி மதிபள்ளி உருவாக்கிய தகவல் வரைபடம்</figcaption>\n",
"\n",
"\n",
"<!--![தசானி மதிபள்ளி உருவாக்கிய தகவல் வரைபடம்](../../../../../../translated_images/ta/linear-polynomial.5523c7cb6576ccab.webp){width=\"800\"}-->\n"
],
"metadata": {
"id": "YqXjLuWavNxW"
}
},
{
"cell_type": "markdown",
"source": [
"இப்போது நாம் ஒரு சமையல் முறையை உருவாக்கி, தரவுகள் சரியாக முன் செயலாக்கப்படும் என்பதை உறுதிப்படுத்தியுள்ளோம், இப்போது ஒரு பின்மேற்கோள் மாதிரியை உருவாக்கி இந்த கேள்விக்கு பதிலளிக்கலாம்: `ஒரு கொடுக்கப்பட்ட பம்ப்கின் தொகுப்பின் விலையை நான் எவ்வளவு எதிர்பார்க்கலாம்?`\n",
"\n",
"#### பயிற்சி தொகுப்பைப் பயன்படுத்தி ஒரு நேரியல் பின்மேற்கோள் மாதிரியை பயிற்சி செய்யுங்கள்\n",
"\n",
"நீங்கள் ஏற்கனவே கண்டுபிடித்திருக்கலாம், *price* நெடுவரிசை `outcome` மாறி ஆகும், அதே நேரத்தில் *package* நெடுவரிசை `predictor` மாறி ஆகும்.\n",
"\n",
"இதற்காக, முதலில் தரவுகளை 80% பயிற்சிக்காகவும் 20% சோதனை தொகுப்புக்காகவும் பிரிப்போம், பின்னர் predictor நெடுவரிசையை முழு எண்களாக குறியாக்கும் ஒரு சமையல் முறையை வரையறுப்போம், பின்னர் ஒரு மாதிரி விவரக்குறிப்பை உருவாக்குவோம். நாம் சமையல் முறையை prep மற்றும் bake செய்யமாட்டோம், ஏனெனில் அது எதிர்பார்த்தபடி தரவுகளை முன் செயலாக்கும் என்பதை நாம் ஏற்கனவே அறிவோம்.\n"
],
"metadata": {
"id": "Pq0bSzCevW-h"
}
},
{
"cell_type": "code",
"execution_count": null,
"source": [
"set.seed(2056)\n",
"# Split the data into training and test sets\n",
"pumpkins_split <- new_pumpkins %>% \n",
" initial_split(prop = 0.8)\n",
"\n",
"\n",
"# Extract training and test data\n",
"pumpkins_train <- training(pumpkins_split)\n",
"pumpkins_test <- testing(pumpkins_split)\n",
"\n",
"\n",
"\n",
"# Create a recipe for preprocessing the data\n",
"lm_pumpkins_recipe <- recipe(price ~ package, data = pumpkins_train) %>% \n",
" step_integer(all_predictors(), zero_based = TRUE)\n",
"\n",
"\n",
"\n",
"# Create a linear model specification\n",
"lm_spec <- linear_reg() %>% \n",
" set_engine(\"lm\") %>% \n",
" set_mode(\"regression\")"
],
"outputs": [],
"metadata": {
"id": "CyoEh_wuvcLv"
}
},
{
"cell_type": "markdown",
"source": [
"சிறப்பாக செய்தீர்கள்! இப்போது நமக்கு ஒரு சமையல் முறையும், ஒரு மாதிரி விவரக்குறிப்பும் உள்ளன, அவற்றை ஒன்றாக இணைத்து ஒரு பொருளாக உருவாக்குவதற்கான வழியை கண்டுபிடிக்க வேண்டும். இந்த பொருள் முதலில் தரவுகளை முன் செயலாக்கம் செய்யும் (பின்னணியில் prep+bake), முன் செயலாக்கப்பட்ட தரவுகளில் மாதிரியை பொருத்தும், மேலும் சாத்தியமான பிந்தைய செயலாக்க நடவடிக்கைகளுக்கும் அனுமதிக்கும். இதைச் செய்யும் போது உங்கள் மன அமைதிக்கு எப்படி இருக்கிறது!🤩\n",
"\n",
"Tidymodels-இல், இந்த வசதியான பொருள் [`workflow`](https://workflows.tidymodels.org/) என்று அழைக்கப்படுகிறது, இது உங்கள் மாதிரி கூறுகளை வசதியாக வைத்திருக்கிறது! Python-இல் இதை *pipelines* என்று அழைப்போம்.\n",
"\n",
"அதனால், எல்லாவற்றையும் workflow-ஆக இணைத்து விடுவோம்!📦\n"
],
"metadata": {
"id": "G3zF_3DqviFJ"
}
},
{
"cell_type": "code",
"execution_count": null,
"source": [
"# Hold modelling components in a workflow\n",
"lm_wf <- workflow() %>% \n",
" add_recipe(lm_pumpkins_recipe) %>% \n",
" add_model(lm_spec)\n",
"\n",
"# Print out the workflow\n",
"lm_wf"
],
"outputs": [],
"metadata": {
"id": "T3olroU3v-WX"
}
},
{
"cell_type": "markdown",
"source": [
"👌 கூடுதலாக, ஒரு வேலைப்போக்கு ஒரு மாதிரி போல் பொருத்தமாகவும்/பயிற்சி அளிக்கப்படவும் செய்யலாம்.\n"
],
"metadata": {
"id": "zd1A5tgOwEPX"
}
},
{
"cell_type": "code",
"execution_count": null,
"source": [
"# Train the model\n",
"lm_wf_fit <- lm_wf %>% \n",
" fit(data = pumpkins_train)\n",
"\n",
"# Print the model coefficients learned \n",
"lm_wf_fit"
],
"outputs": [],
"metadata": {
"id": "NhJagFumwFHf"
}
},
{
"cell_type": "markdown",
"source": [
"மாதிரியின் வெளியீட்டில், பயிற்சியின் போது கற்றுக்கொண்ட குணகாரங்களை காணலாம். இவை, உண்மையான மற்றும் கணிக்கப்பட்ட மாறிகளுக்கு இடையிலான மொத்த பிழையை குறைக்கும் சிறந்த பொருத்த கோட்டின் குணகாரங்களை பிரதிநிதித்துவப்படுத்துகின்றன.\n",
"\n",
"#### சோதனை தொகுப்பைப் பயன்படுத்தி மாதிரி செயல்திறனை மதிப்பீடு செய்யுங்கள்\n",
"\n",
"மாதிரி எப்படி செயல்பட்டது என்பதை பார்க்க நேரம் வந்துவிட்டது 📏! இதை எப்படி செய்வது?\n",
"\n",
"இப்போது நாம் மாதிரியை பயிற்சி செய்துவிட்டோம், `parsnip::predict()` ஐப் பயன்படுத்தி test_set க்கான கணிப்புகளை செய்யலாம். பின்னர், இந்த கணிப்புகளை உண்மையான லேபிள் மதிப்புகளுடன் ஒப்பிட்டு, மாதிரி எவ்வளவு நன்றாக (அல்லது இல்லை!) செயல்படுகிறது என்பதை மதிப்பீடு செய்யலாம்.\n",
"\n",
"முதலில் சோதனை தொகுப்புக்கான கணிப்புகளை செய்யுங்கள், பின்னர் அந்த நெறிகளை சோதனை தொகுப்புடன் இணைக்கவும்.\n"
],
"metadata": {
"id": "_4QkGtBTwItF"
}
},
{
"cell_type": "code",
"execution_count": null,
"source": [
"# Make predictions for the test set\n",
"predictions <- lm_wf_fit %>% \n",
" predict(new_data = pumpkins_test)\n",
"\n",
"\n",
"# Bind predictions to the test set\n",
"lm_results <- pumpkins_test %>% \n",
" select(c(package, price)) %>% \n",
" bind_cols(predictions)\n",
"\n",
"\n",
"# Print the first ten rows of the tibble\n",
"lm_results %>% \n",
" slice_head(n = 10)"
],
"outputs": [],
"metadata": {
"id": "UFZzTG0gwTs9"
}
},
{
"cell_type": "markdown",
"source": [
"ஆம், நீங்கள் ஒரு மாதிரியை உருவாக்கி, அதை பயன்படுத்தி கணிப்புகளை செய்துள்ளீர்கள்!🔮 இது நல்லதா, வாருங்கள் மாதிரியின் செயல்திறனை மதிப்பீடு செய்வோம்!\n",
"\n",
"Tidymodels-ல், இதை `yardstick::metrics()` பயன்படுத்தி செய்கிறோம்! நேரியல் ரிக்ரஷனுக்காக, கீழ்க்கண்ட அளவுகோல்களை கவனமாக பார்க்கலாம்:\n",
"\n",
"- `Root Mean Square Error (RMSE)`: [MSE](https://en.wikipedia.org/wiki/Mean_squared_error) இன் சதுரவேர். இது லேபிளின் (இந்தக் கட்டத்தில், பூசணிக்காயின் விலை) அதே அலகில் ஒரு முழுமையான அளவுகோலை வழங்குகிறது. மதிப்பு குறைவாக இருக்கும் போது, மாதிரி சிறந்ததாக இருக்கும் (எளிமையான அர்த்தத்தில், கணிப்புகள் தவறாக இருக்கும் சராசரி விலையை இது பிரதிநிதித்துவப்படுத்துகிறது!)\n",
"\n",
"- `Coefficient of Determination (சாதாரணமாக R-squared அல்லது R2 என அழைக்கப்படுகிறது)`: இது ஒரு உறவியல் அளவுகோல், இதில் மதிப்பு அதிகமாக இருக்கும் போது, மாதிரியின் பொருத்தம் சிறந்ததாக இருக்கும். அடிப்படையில், இந்த அளவுகோல், கணிக்கப்பட்ட மற்றும் உண்மையான லேபிள் மதிப்புகளுக்கு இடையிலான மாறுபாட்டை மாதிரி எவ்வளவு விளக்குகிறது என்பதை பிரதிநிதித்துவப்படுத்துகிறது.\n"
],
"metadata": {
"id": "0A5MjzM7wW9M"
}
},
{
"cell_type": "code",
"execution_count": null,
"source": [
"# Evaluate performance of linear regression\n",
"metrics(data = lm_results,\n",
" truth = price,\n",
" estimate = .pred)"
],
"outputs": [],
"metadata": {
"id": "reJ0UIhQwcEH"
}
},
{
"cell_type": "markdown",
"source": [
"மாதிரி செயல்திறன் குறைந்துவிட்டது. பாக்கெட் மற்றும் விலையின் சிதறல் வரைபடத்தை காட்சிப்படுத்துவதன் மூலம், சிறந்த சுட்டுமாற்றத்தை பெற முடியுமா என்று பார்ப்போம், பின்னர் மாதிரியின் கணிப்புகளை பயன்படுத்தி சிறந்த பொருத்தம் கொண்ட கோட்டை ஒட்டுவோம்.\n",
"\n",
"இதற்காக, பாக்கெட் sütun ஐ குறியாக்குவதற்காக சோதனை தொகுப்பை தயாரித்து, அதை சமைக்க வேண்டும், பின்னர் அதை எங்கள் மாதிரி உருவாக்கிய கணிப்புகளுடன் இணைக்க வேண்டும்.\n"
],
"metadata": {
"id": "fdgjzjkBwfWt"
}
},
{
"cell_type": "code",
"execution_count": null,
"source": [
"# Encode package column\n",
"package_encode <- lm_pumpkins_recipe %>% \n",
" prep() %>% \n",
" bake(new_data = pumpkins_test) %>% \n",
" select(package)\n",
"\n",
"\n",
"# Bind encoded package column to the results\n",
"lm_results <- lm_results %>% \n",
" bind_cols(package_encode %>% \n",
" rename(package_integer = package)) %>% \n",
" relocate(package_integer, .after = package)\n",
"\n",
"\n",
"# Print new results data frame\n",
"lm_results %>% \n",
" slice_head(n = 5)\n",
"\n",
"\n",
"# Make a scatter plot\n",
"lm_results %>% \n",
" ggplot(mapping = aes(x = package_integer, y = price)) +\n",
" geom_point(size = 1.6) +\n",
" # Overlay a line of best fit\n",
" geom_line(aes(y = .pred), color = \"orange\", size = 1.2) +\n",
" xlab(\"package\")\n",
" \n"
],
"outputs": [],
"metadata": {
"id": "R0nw719lwkHE"
}
},
{
"cell_type": "markdown",
"source": [
"பாருங்கள்! நேரியல் ரெக்ரஷன் மாடல் ஒரு தொகுப்பின் மற்றும் அதற்கான விலையின் இடையிலான தொடர்பை சரியாக பொதுமைப்படுத்தவில்லை.\n",
"\n",
"🎃 வாழ்த்துக்கள், நீங்கள் சில வகையான பூசணிக்காய்களின் விலையை கணிக்க உதவும் ஒரு மாடலை உருவாக்கியுள்ளீர்கள். உங்கள் விடுமுறை பூசணிக்காய் தோட்டம் அழகாக இருக்கும். ஆனால், நீங்கள் இன்னும் சிறந்த ஒரு மாடலை உருவாக்கலாம்!\n",
"\n",
"## 5. ஒரு பாலினோமியல் ரெக்ரஷன் மாடலை உருவாக்குங்கள்\n",
"\n",
"<p >\n",
" <img src=\"../../../../../../translated_images/ta/linear-polynomial.5523c7cb6576ccab.webp\"\n",
" width=\"800\"/>\n",
" <figcaption>தசானி மதிபள்ளி உருவாக்கிய தகவல்படம்</figcaption>\n",
"\n",
"\n",
"<!--![தசானி மதிபள்ளி உருவாக்கிய தகவல்படம்](../../../../../../translated_images/ta/linear-polynomial.5523c7cb6576ccab.webp){width=\"800\"}-->\n"
],
"metadata": {
"id": "HOCqJXLTwtWI"
}
},
{
"cell_type": "markdown",
"source": [
"எப்போது எங்கள் தரவுகள் நேரியல் தொடர்பு இல்லாமல் இருக்கலாம், ஆனால் அதே நேரத்தில் ஒரு முடிவை கணிக்க விரும்புகிறோம். பாலினோமியல் ரிக்ரஷன் (Polynomial Regression) சிக்கலான நேரியல் அல்லாத தொடர்புகளுக்கு கணிப்புகளை செய்ய உதவுகிறது.\n",
"\n",
"எடுத்துக்காட்டாக, எங்கள் கும்மட்டிக்காய் தரவுத்தொகுப்பில் தொகுப்பு மற்றும் விலை இடையேயான தொடர்பை எடுத்துக்கொள்ளலாம். சில நேரங்களில் மாறிகள் இடையே நேரியல் தொடர்பு இருக்கும் - கும்மட்டிக்காயின் அளவு அதிகமாக இருந்தால், விலை அதிகமாக இருக்கும் - ஆனால் சில நேரங்களில் இந்த தொடர்புகளை ஒரு தளம் அல்லது நேர்கோட்டாக வரைபட முடியாது.\n",
"\n",
"> ✅ [இங்கே](https://online.stat.psu.edu/stat501/lesson/9/9.8) பாலினோமியல் ரிக்ரஷன் பயன்படுத்தக்கூடிய தரவுகளுக்கான மேலும் சில உதாரணங்கள் உள்ளன\n",
">\n",
"> முந்தைய வரைபடத்தில் Variety மற்றும் Price இடையேயான தொடர்பை மீண்டும் பாருங்கள். இந்த சிதறல் வரைபடம் நேர்கோட்டால் பகுப்பாய்வு செய்யப்பட வேண்டும் என்று தோன்றுகிறதா? ஒருவேளை இல்லை. இந்த சூழலில், நீங்கள் பாலினோமியல் ரிக்ரஷனை முயற்சிக்கலாம்.\n",
">\n",
"> ✅ பாலினோமியல்கள் என்பது ஒரு அல்லது அதற்கு மேற்பட்ட மாறிகள் மற்றும் குணகங்கள் கொண்ட கணிதப் பிரகடனங்கள்\n",
"\n",
"#### பயிற்சி தொகுப்பைப் பயன்படுத்தி பாலினோமியல் ரிக்ரஷன் மாடலை பயிற்சி செய்யுங்கள்\n",
"\n",
"பாலினோமியல் ரிக்ரஷன் *வளைந்த கோடு* உருவாக்கி நேரியல் அல்லாத தரவுகளுக்கு சிறப்பாக பொருந்த உதவுகிறது.\n",
"\n",
"கணிப்புகளை செய்ய பாலினோமியல் மாடல் சிறப்பாக செயல்படும் என்பதை பார்க்கலாம். நாம் முன்பு செய்த செயல்முறையைப் போன்றே சிலவற்றை பின்பற்றுவோம்:\n",
"\n",
"- எங்கள் தரவுகளை மாதிரியாக்கத்திற்குத் தயாராக்க, அதாவது: முன்னோக்கிகளை குறியாக்கம் செய்யவும் *n* அளவிலான பாலினோமியல்களை கணக்கிடவும் குறிப்பிடும் ஒரு ரெசிபியை உருவாக்குங்கள்\n",
"\n",
"- மாடல் விவரக்குறிப்பை உருவாக்குங்கள்\n",
"\n",
"- ரெசிபி மற்றும் மாடல் விவரக்குறிப்பை ஒருங்கிணைத்து ஒரு வேலைப்போக்கு (workflow) உருவாக்குங்கள்\n",
"\n",
"- வேலைப்போக்கை பொருத்துவதன் மூலம் ஒரு மாடலை உருவாக்குங்கள்\n",
"\n",
"- சோதனை தரவுகளில் மாடல் எவ்வளவு நன்றாக செயல்படுகிறது என்பதை மதிப்பீடு செய்யுங்கள்\n",
"\n",
"இப்போது இதைச் செய்யத் தொடங்குவோம்!\n"
],
"metadata": {
"id": "VcEIpRV9wzYr"
}
},
{
"cell_type": "code",
"execution_count": null,
"source": [
"# Specify a recipe\r\n",
"poly_pumpkins_recipe <-\r\n",
" recipe(price ~ package, data = pumpkins_train) %>%\r\n",
" step_integer(all_predictors(), zero_based = TRUE) %>% \r\n",
" step_poly(all_predictors(), degree = 4)\r\n",
"\r\n",
"\r\n",
"# Create a model specification\r\n",
"poly_spec <- linear_reg() %>% \r\n",
" set_engine(\"lm\") %>% \r\n",
" set_mode(\"regression\")\r\n",
"\r\n",
"\r\n",
"# Bundle recipe and model spec into a workflow\r\n",
"poly_wf <- workflow() %>% \r\n",
" add_recipe(poly_pumpkins_recipe) %>% \r\n",
" add_model(poly_spec)\r\n",
"\r\n",
"\r\n",
"# Create a model\r\n",
"poly_wf_fit <- poly_wf %>% \r\n",
" fit(data = pumpkins_train)\r\n",
"\r\n",
"\r\n",
"# Print learned model coefficients\r\n",
"poly_wf_fit\r\n",
"\r\n",
" "
],
"outputs": [],
"metadata": {
"id": "63n_YyRXw3CC"
}
},
{
"cell_type": "markdown",
"source": [
"#### மாதிரி செயல்திறனை மதிப்பீடு செய்யவும்\n",
"\n",
"👏👏நீங்கள் ஒரு பாலினோமியல் மாதிரியை உருவாக்கியுள்ளீர்கள், இப்போது சோதனை தொகுப்பில் கணிப்புகளை செய்யலாம்!\n"
],
"metadata": {
"id": "-LHZtztSxDP0"
}
},
{
"cell_type": "code",
"execution_count": null,
"source": [
"# Make price predictions on test data\r\n",
"poly_results <- poly_wf_fit %>% predict(new_data = pumpkins_test) %>% \r\n",
" bind_cols(pumpkins_test %>% select(c(package, price))) %>% \r\n",
" relocate(.pred, .after = last_col())\r\n",
"\r\n",
"\r\n",
"# Print the results\r\n",
"poly_results %>% \r\n",
" slice_head(n = 10)"
],
"outputs": [],
"metadata": {
"id": "YUFpQ_dKxJGx"
}
},
{
"cell_type": "markdown",
"source": [
"வூ-ஹூ, மாடல் `yardstick::metrics()`-ஐப் பயன்படுத்தி test_set-இல் எப்படி செயல்பட்டது என்பதை மதிப்பீடு செய்யலாம்.\n"
],
"metadata": {
"id": "qxdyj86bxNGZ"
}
},
{
"cell_type": "code",
"execution_count": null,
"source": [
"metrics(data = poly_results, truth = price, estimate = .pred)"
],
"outputs": [],
"metadata": {
"id": "8AW5ltkBxXDm"
}
},
{
"cell_type": "markdown",
"source": [
"🤩🤩 மிகச் சிறந்த செயல்திறன்.\n",
"\n",
"`rmse` சுமார் 7. இருந்து சுமார் 3. ஆகக் குறைந்துள்ளது, இது உண்மையான விலை மற்றும் கணிக்கப்பட்ட விலைக்கு இடையிலான பிழை குறைந்துள்ளது என்பதை குறிக்கிறது. இதை *தளர்வாக* பொருள் கொள்ளலாம், சராசரியாக தவறான கணிப்புகள் சுமார் \\$3 அளவுக்கு தவறாக இருக்கின்றன. `rsq` சுமார் 0.4 இருந்து 0.8 ஆக அதிகரித்துள்ளது.\n",
"\n",
"இந்த அளவுகோல்கள் அனைத்தும் பாலினோமியல் மாதிரி நேரியல் மாதிரியை விட மிகவும் சிறப்பாக செயல்படுகிறது என்பதை காட்டுகின்றன. அருமை!\n",
"\n",
"இதை நாம் காட்சிப்படுத்த முடியுமா என்று பார்ப்போம்!\n"
],
"metadata": {
"id": "6gLHNZDwxYaS"
}
},
{
"cell_type": "code",
"execution_count": null,
"source": [
"# Bind encoded package column to the results\r\n",
"poly_results <- poly_results %>% \r\n",
" bind_cols(package_encode %>% \r\n",
" rename(package_integer = package)) %>% \r\n",
" relocate(package_integer, .after = package)\r\n",
"\r\n",
"\r\n",
"# Print new results data frame\r\n",
"poly_results %>% \r\n",
" slice_head(n = 5)\r\n",
"\r\n",
"\r\n",
"# Make a scatter plot\r\n",
"poly_results %>% \r\n",
" ggplot(mapping = aes(x = package_integer, y = price)) +\r\n",
" geom_point(size = 1.6) +\r\n",
" # Overlay a line of best fit\r\n",
" geom_line(aes(y = .pred), color = \"midnightblue\", size = 1.2) +\r\n",
" xlab(\"package\")\r\n"
],
"outputs": [],
"metadata": {
"id": "A83U16frxdF1"
}
},
{
"cell_type": "markdown",
"source": [
"நீங்கள் உங்கள் தரவுக்கு சிறப்பாக பொருந்தும் ஒரு வளைந்த கோட்டை காணலாம்! 🤩\n",
"\n",
"இதை மேலும் மென்மையாக மாற்ற, `geom_smooth`-க்கு ஒரு பாலினோமியல் சூத்திரத்தை இவ்வாறு வழங்கலாம்:\n"
],
"metadata": {
"id": "4U-7aHOVxlGU"
}
},
{
"cell_type": "code",
"execution_count": null,
"source": [
"# Make a scatter plot\r\n",
"poly_results %>% \r\n",
" ggplot(mapping = aes(x = package_integer, y = price)) +\r\n",
" geom_point(size = 1.6) +\r\n",
" # Overlay a line of best fit\r\n",
" geom_smooth(method = lm, formula = y ~ poly(x, degree = 4), color = \"midnightblue\", size = 1.2, se = FALSE) +\r\n",
" xlab(\"package\")"
],
"outputs": [],
"metadata": {
"id": "5vzNT0Uexm-w"
}
},
{
"cell_type": "markdown",
"source": [
"மிகவும் மென்மையான வளைவைப் போல!🤩\n",
"\n",
"இங்கே நீங்கள் புதிய கணிப்பை எப்படி செய்வீர்கள்:\n"
],
"metadata": {
"id": "v9u-wwyLxq4G"
}
},
{
"cell_type": "code",
"execution_count": null,
"source": [
"# Make a hypothetical data frame\r\n",
"hypo_tibble <- tibble(package = \"bushel baskets\")\r\n",
"\r\n",
"# Make predictions using linear model\r\n",
"lm_pred <- lm_wf_fit %>% predict(new_data = hypo_tibble)\r\n",
"\r\n",
"# Make predictions using polynomial model\r\n",
"poly_pred <- poly_wf_fit %>% predict(new_data = hypo_tibble)\r\n",
"\r\n",
"# Return predictions in a list\r\n",
"list(\"linear model prediction\" = lm_pred, \r\n",
" \"polynomial model prediction\" = poly_pred)\r\n"
],
"outputs": [],
"metadata": {
"id": "jRPSyfQGxuQv"
}
},
{
"cell_type": "markdown",
"source": [
"`polynomial model` கணிப்பு `price` மற்றும் `package` scatter plot-களைப் பார்த்தால் பொருத்தமாகவே தெரிகிறது! மேலும், இது முந்தைய மாடலை விட சிறந்தது என்றால், அதே தரவைக் கொண்டு பார்க்கும்போது, இந்த அதிக விலை கொண்ட pumpkins-க்கு நீங்கள் பட்ஜெட் செய்ய வேண்டும்!\n",
"\n",
"🏆 அருமை! நீங்கள் ஒரு பாடத்தில் இரண்டு regression மாடல்களை உருவாக்கியுள்ளீர்கள். Regression பற்றிய இறுதி பகுதியில், categories-ஐ தீர்மானிக்க logistic regression பற்றி நீங்கள் கற்றுக்கொள்வீர்கள்.\n",
"\n",
"## **🚀சவால்**\n",
"\n",
"இந்த notebook-ல் பல்வேறு மாறிகளை சோதித்து, correlation மாடல் துல்லியத்துடன் எப்படி தொடர்புடையது என்பதை பாருங்கள்.\n",
"\n",
"## [**பாடத்திற்குப் பிந்தைய வினாடி வினா**](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/14/)\n",
"\n",
"## **மீளாய்வு & சுயபடிப்பு**\n",
"\n",
"இந்த பாடத்தில் நாம் Linear Regression பற்றி கற்றுக்கொண்டோம். Regression-இன் மற்ற முக்கிய வகைகள் உள்ளன. Stepwise, Ridge, Lasso மற்றும் Elasticnet தொழில்நுட்பங்கள் பற்றி படிக்கவும். மேலும் அறிய ஒரு சிறந்த பாடநெறி [Stanford Statistical Learning course](https://online.stanford.edu/courses/sohs-ystatslearning-statistical-learning) ஆகும்.\n",
"\n",
"Tidymodels framework-ஐ எப்படி பயன்படுத்துவது என்பதை மேலும் அறிய விரும்பினால், கீழே உள்ள வளங்களைப் பாருங்கள்:\n",
"\n",
"- Tidymodels இணையதளம்: [Tidymodels-ஐ தொடங்குங்கள்](https://www.tidymodels.org/start/)\n",
"\n",
"- Max Kuhn மற்றும் Julia Silge, [*Tidy Modeling with R*](https://www.tmwr.org/)*.*\n",
"\n",
"###### **நன்றி:**\n",
"\n",
"[Allison Horst](https://twitter.com/allison_horst?lang=en) R-ஐ மேலும் வரவேற்கக்கூடிய மற்றும் ஈர்க்கக்கூடியதாக்கும் அற்புதமான படங்களை உருவாக்கியதற்காக. மேலும் படங்களை அவரது [கேலரியில்](https://www.google.com/url?q=https://github.com/allisonhorst/stats-illustrations&sa=D&source=editors&ust=1626380772530000&usg=AOvVaw3zcfyCizFQZpkSLzxiiQEM) காணலாம்.\n"
],
"metadata": {
"id": "8zOLOWqMxzk5"
}
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"\n---\n\n**குறிப்பு**: \nஇந்த ஆவணம் [Co-op Translator](https://github.com/Azure/co-op-translator) என்ற AI மொழிபெயர்ப்பு சேவையைப் பயன்படுத்தி மொழிபெயர்க்கப்பட்டுள்ளது. நாங்கள் துல்லியத்திற்காக முயற்சிக்கின்றோம், ஆனால் தானியங்கி மொழிபெயர்ப்புகளில் பிழைகள் அல்லது தவறான தகவல்கள் இருக்கக்கூடும் என்பதை தயவுசெய்து கவனத்தில் கொள்ளவும். அதன் தாய்மொழியில் உள்ள மூல ஆவணம் அதிகாரப்பூர்வ ஆதாரமாக கருதப்பட வேண்டும். முக்கியமான தகவல்களுக்கு, தொழில்முறை மனித மொழிபெயர்ப்பு பரிந்துரைக்கப்படுகிறது. இந்த மொழிபெயர்ப்பைப் பயன்படுத்துவதால் ஏற்படும் எந்த தவறான புரிதல்கள் அல்லது தவறான விளக்கங்களுக்கு நாங்கள் பொறுப்பல்ல.\n"
]
}
]
}