{ "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-12-19T16:29:38+00:00", "source_file": "2-Regression/1-Tools/solution/R/lesson_1-R.ipynb", "language_code": "te" } }, "cells": [ { "cell_type": "markdown", "source": [ "# రిగ్రెషన్ మోడల్ నిర్మించండి: రిగ్రెషన్ మోడల్స్ కోసం R మరియు Tidymodels తో ప్రారంభించండి\n" ], "metadata": { "id": "YJUHCXqK57yz" } }, { "cell_type": "markdown", "source": [ "## రిగ్రెషన్ పరిచయం - పాఠం 1\n", "\n", "#### దాన్ని దృష్టిలో పెట్టుకోవడం\n", "\n", "✅ రిగ్రెషన్ పద్ధతుల అనేక రకాలు ఉన్నాయి, మీరు ఎంచుకునే పద్ధతి మీరు కోరుకునే సమాధానంపై ఆధారపడి ఉంటుంది. మీరు ఒక నిర్దిష్ట వయస్సు ఉన్న వ్యక్తి యొక్క సాధ్యమైన ఎత్తును అంచనా వేయాలనుకుంటే, మీరు `లీనియర్ రిగ్రెషన్` ఉపయోగిస్తారు, ఎందుకంటే మీరు **సంఖ్యాత్మక విలువ** కోసం చూస్తున్నారు. మీరు ఒక వంటకాన్ని వెగన్గా పరిగణించాలా లేదా అనేది తెలుసుకోవాలనుకుంటే, మీరు **వర్గీకరణ కేటగిరీ** కోసం చూస్తున్నారు కాబట్టి మీరు `లాజిస్టిక్ రిగ్రెషన్` ఉపయోగిస్తారు. లాజిస్టిక్ రిగ్రెషన్ గురించి మీరు తర్వాత మరింత తెలుసుకుంటారు. డేటా నుండి మీరు అడగగల కొన్ని ప్రశ్నల గురించి కొంచెం ఆలోచించండి, మరియు ఈ పద్ధతులలో ఏది ఎక్కువగా అనుకూలమో.\n", "\n", "ఈ విభాగంలో, మీరు [డయాబెటిస్ గురించి చిన్న డేటాసెట్](https://www4.stat.ncsu.edu/~boos/var.select/diabetes.html) తో పని చేస్తారు. మీరు డయాబెటిక్ రోగులకు చికిత్స పరీక్షించాలనుకుంటున్నారని ఊహించుకోండి. మెషీన్ లెర్నింగ్ మోడల్స్ వేరియబుల్స్ యొక్క కలయికల ఆధారంగా ఏ రోగులు చికిత్సకు మెరుగ్గా స్పందిస్తారో నిర్ణయించడంలో మీకు సహాయపడవచ్చు. ఒక చాలా ప్రాథమిక రిగ్రెషన్ మోడల్ కూడా, దృశ్యీకరించినప్పుడు, మీ స 이యతాత్మక క్లినికల్ ట్రయల్స్ను నిర్వహించడంలో సహాయపడే వేరియబుల్స్ గురించి సమాచారం చూపవచ్చు.\n", "\n", "అందువల్ల, ఈ పనిని ప్రారంభిద్దాం!\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",
"ఇప్పుడు మనకు డేటా సిద్ధంగా ఉన్నందున, ఈ డేటాసెట్లోని సంఖ్యల మధ్య తార్కికమైన విభజనను యంత్రం సహాయంతో నిర్ణయించగలమా అని చూడవచ్చు. మనం Tidymodels ఫ్రేమ్వర్క్లో భాగమైన [rsample](https://tidymodels.github.io/rsample/) ప్యాకేజీని ఉపయోగించి, డేటాను *ఎలా* విభజించాలో సమాచారం కలిగిన ఒక ఆబ్జెక్ట్ను సృష్టించవచ్చు, మరియు ఆపై సృష్టించిన శిక్షణ మరియు పరీక్ష సెట్లను తీసుకోవడానికి రెండు మరిన్ని 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) ఫంక్షన్ ద్వారా `estimated` లేదా `trained` చేయవచ్చు.\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 సంప్రదాయం ఎప్పుడూ ఫలితాల యొక్క టిబుల్/డేటా ఫ్రేమ్ను ప్రమాణీకృత కాలమ్ పేర్లతో ఉత్పత్తి చేయడం. ఇది అసలు డేటా మరియు అంచనాలను కలిపి తరువాతి ఆపరేషన్ల కోసం ఉపయోగించదగిన ఫార్మాట్లో ఉంచడం సులభం చేస్తుంది, ఉదాహరణకు ప్లాటింగ్.\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` విలువల scatter plot ను సృష్టిస్తాము, ఆపై మోడల్ డేటా గ్రూపింగ్ల మధ్య సరైన స్థలంలో prediction లను ఉపయోగించి ఒక రేఖను గీయుతాము.\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ఈ పత్రాన్ని AI అనువాద సేవ [Co-op Translator](https://github.com/Azure/co-op-translator) ఉపయోగించి అనువదించబడింది. మేము ఖచ్చితత్వానికి ప్రయత్నించినప్పటికీ, ఆటోమేటెడ్ అనువాదాల్లో పొరపాట్లు లేదా తప్పిదాలు ఉండవచ్చు. మూల పత్రం దాని స్వదేశీ భాషలో అధికారిక మూలంగా పరిగణించాలి. ముఖ్యమైన సమాచారానికి, ప్రొఫెషనల్ మానవ అనువాదం సిఫార్సు చేయబడుతుంది. ఈ అనువాదం వాడకంలో ఏర్పడిన ఏవైనా అపార్థాలు లేదా తప్పుదారితీసే అర్థాలు కోసం మేము బాధ్యత వహించము.\n\n"
]
}
]
}