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/el/2-Regression/1-Tools/solution/R/lesson_1-R.ipynb

447 lines
25 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

{
"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-09-04T07:05:36+00:00",
"source_file": "2-Regression/1-Tools/solution/R/lesson_1-R.ipynb",
"language_code": "el"
}
},
"cells": [
{
"cell_type": "markdown",
"source": [],
"metadata": {
"id": "YJUHCXqK57yz"
}
},
{
"cell_type": "markdown",
"source": [
"## Εισαγωγή στην Παλινδρόμηση - Μάθημα 1\n",
"\n",
"#### Βάζοντάς το σε προοπτική\n",
"\n",
"✅ Υπάρχουν πολλοί τύποι μεθόδων παλινδρόμησης, και ποια θα επιλέξετε εξαρτάται από την απάντηση που αναζητάτε. Αν θέλετε να προβλέψετε το πιθανό ύψος ενός ατόμου με δεδομένη ηλικία, θα χρησιμοποιούσατε `γραμμική παλινδρόμηση`, καθώς αναζητάτε μια **αριθμητική τιμή**. Αν ενδιαφέρεστε να ανακαλύψετε αν ένας τύπος κουζίνας πρέπει να θεωρηθεί vegan ή όχι, αναζητάτε μια **κατηγοριοποίηση**, οπότε θα χρησιμοποιούσατε `λογιστική παλινδρόμηση`. Θα μάθετε περισσότερα για τη λογιστική παλινδρόμηση αργότερα. Σκεφτείτε λίγο κάποιες ερωτήσεις που μπορείτε να θέσετε στα δεδομένα και ποια από αυτές τις μεθόδους θα ήταν πιο κατάλληλη.\n",
"\n",
"Σε αυτή την ενότητα, θα δουλέψετε με ένα [μικρό σύνολο δεδομένων για τον διαβήτη](https://www4.stat.ncsu.edu/~boos/var.select/diabetes.html). Φανταστείτε ότι θέλετε να δοκιμάσετε μια θεραπεία για ασθενείς με διαβήτη. Τα μοντέλα Μηχανικής Μάθησης μπορεί να σας βοηθήσουν να προσδιορίσετε ποιοι ασθενείς θα ανταποκριθούν καλύτερα στη θεραπεία, βασισμένοι σε συνδυασμούς μεταβλητών. Ακόμα και ένα πολύ βασικό μοντέλο παλινδρόμησης, όταν οπτικοποιηθεί, μπορεί να δείξει πληροφορίες για μεταβλητές που θα σας βοηθήσουν να οργανώσετε τις θεωρητικές κλινικές σας δοκιμές.\n",
"\n",
"Ας ξεκινήσουμε λοιπόν με αυτή την εργασία!\n",
"\n",
"<p >\n",
" <img src=\"../../images/encouRage.jpg\"\n",
" width=\"630\"/>\n",
" <figcaption>Έργο τέχνης από @allison_horst</figcaption>\n",
"\n",
"<!--![Έργο τέχνης από \\@allison_horst](../../../../../../2-Regression/1-Tools/images/encouRage.jpg)<br>Έργο τέχνης από @allison_horst-->\n"
],
"metadata": {
"id": "LWNNzfqd6feZ"
}
},
{
"cell_type": "markdown",
"source": [
"## 1. Φόρτωση του εργαλειακού μας συνόλου\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",
"Μπορείτε να τα εγκαταστήσετε ως εξής:\n",
"\n",
"`install.packages(c(\"tidyverse\", \"tidymodels\"))`\n",
"\n",
"Το παρακάτω script ελέγχει αν έχετε τα απαραίτητα πακέτα για να ολοκληρώσετε αυτήν την ενότητα και τα εγκαθιστά για εσάς σε περίπτωση που λείπουν κάποια.\n"
],
"metadata": {
"id": "FIo2YhO26wI9"
}
},
{
"cell_type": "code",
"execution_count": 2,
"source": [
"suppressWarnings(if(!require(\"pacman\")) install.packages(\"pacman\"))\n",
"pacman::p_load(tidyverse, tidymodels)"
],
"outputs": [
{
"output_type": "stream",
"name": "stderr",
"text": [
"Loading required package: pacman\n",
"\n"
]
}
],
"metadata": {
"id": "cIA9fz9v7Dss",
"colab": {
"base_uri": "https://localhost:8080/"
},
"outputId": "2df7073b-86b2-4b32-cb86-0da605a0dc11"
}
},
{
"cell_type": "markdown",
"source": [
"Τώρα, ας φορτώσουμε αυτά τα καταπληκτικά πακέτα και να τα κάνουμε διαθέσιμα στην τρέχουσα συνεδρία R μας. (Αυτό είναι για απλή απεικόνιση, το `pacman::p_load()` το έχει ήδη κάνει για εσάς)\n"
],
"metadata": {
"id": "gpO_P_6f9WUG"
}
},
{
"cell_type": "code",
"execution_count": null,
"source": [
"# load the core Tidyverse packages\r\n",
"library(tidyverse)\r\n",
"\r\n",
"# load the core Tidymodels packages\r\n",
"library(tidymodels)\r\n"
],
"outputs": [],
"metadata": {
"id": "NLMycgG-9ezO"
}
},
{
"cell_type": "markdown",
"source": [
"## 2. Το σύνολο δεδομένων για τον διαβήτη\n",
"\n",
"Σε αυτή την άσκηση, θα εφαρμόσουμε τις δεξιότητές μας στην παλινδρόμηση κάνοντας προβλέψεις σε ένα σύνολο δεδομένων για τον διαβήτη. Το [σύνολο δεδομένων για τον διαβήτη](https://www4.stat.ncsu.edu/~boos/var.select/diabetes.rwrite1.txt) περιλαμβάνει `442 δείγματα` δεδομένων σχετικά με τον διαβήτη, με 10 μεταβλητές χαρακτηριστικών πρόβλεψης, `ηλικία`, `φύλο`, `δείκτη μάζας σώματος`, `μέση αρτηριακή πίεση` και `έξι μετρήσεις αίματος ορού`, καθώς και μια μεταβλητή αποτελέσματος `y`: μια ποσοτική μέτρηση της εξέλιξης της νόσου ένα χρόνο μετά την αρχική μέτρηση.\n",
"\n",
"|Αριθμός παρατηρήσεων|442|\n",
"|----------------------|:---|\n",
"|Αριθμός προβλεπτικών μεταβλητών|Οι πρώτες 10 στήλες είναι αριθμητικές προβλεπτικές|\n",
"|Αποτέλεσμα/Στόχος|Η στήλη 11 είναι μια ποσοτική μέτρηση της εξέλιξης της νόσου ένα χρόνο μετά την αρχική μέτρηση|\n",
"|Πληροφορίες προβλεπτικών μεταβλητών|- ηλικία σε χρόνια\n",
"||- φύλο\n",
"||- bmi δείκτης μάζας σώματος\n",
"||- bp μέση αρτηριακή πίεση\n",
"||- s1 tc, συνολική χοληστερόλη ορού\n",
"||- s2 ldl, λιποπρωτεΐνες χαμηλής πυκνότητας\n",
"||- s3 hdl, λιποπρωτεΐνες υψηλής πυκνότητας\n",
"||- s4 tch, συνολική χοληστερόλη / HDL\n",
"||- s5 ltg, πιθανώς λογαριθμική τιμή επιπέδου τριγλυκεριδίων ορού\n",
"||- s6 glu, επίπεδο σακχάρου στο αίμα|\n",
"\n",
"> 🎓 Θυμήσου, αυτή είναι εποπτευόμενη μάθηση, και χρειαζόμαστε έναν ονομασμένο στόχο 'y'.\n",
"\n",
"Πριν μπορέσεις να επεξεργαστείς δεδομένα με τη R, πρέπει να εισάγεις τα δεδομένα στη μνήμη της R ή να δημιουργήσεις μια σύνδεση με τα δεδομένα ώστε η R να μπορεί να τα προσπελάσει εξ αποστάσεως.\n",
"\n",
"> Το πακέτο [readr](https://readr.tidyverse.org/), το οποίο είναι μέρος του Tidyverse, παρέχει έναν γρήγορο και φιλικό τρόπο για την ανάγνωση ορθογώνιων δεδομένων στη R.\n",
"\n",
"Τώρα, ας φορτώσουμε το σύνολο δεδομένων για τον διαβήτη από την παρακάτω πηγή URL: <https://www4.stat.ncsu.edu/~boos/var.select/diabetes.html>\n",
"\n",
"Επιπλέον, θα κάνουμε έναν έλεγχο εγκυρότητας στα δεδομένα μας χρησιμοποιώντας τη `glimpse()` και θα εμφανίσουμε τις πρώτες 5 γραμμές χρησιμοποιώντας τη `slice()`.\n",
"\n",
"Πριν προχωρήσουμε, ας εισάγουμε κάτι που θα συναντήσεις συχνά στον κώδικα της R 🥁🥁: τον τελεστή σωλήνα `%>%`\n",
"\n",
"Ο τελεστής σωλήνα (`%>%`) εκτελεί λειτουργίες σε λογική ακολουθία περνώντας ένα αντικείμενο σε μια συνάρτηση ή έκφραση κλήσης. Μπορείς να σκεφτείς τον τελεστή σωλήνα σαν να λες \"και μετά\" στον κώδικά σου.\n"
],
"metadata": {
"id": "KM6iXLH996Cl"
}
},
{
"cell_type": "code",
"execution_count": null,
"source": [
"# Import the data set\r\n",
"diabetes <- read_table2(file = \"https://www4.stat.ncsu.edu/~boos/var.select/diabetes.rwrite1.txt\")\r\n",
"\r\n",
"\r\n",
"# Get a glimpse and dimensions of the data\r\n",
"glimpse(diabetes)\r\n",
"\r\n",
"\r\n",
"# Select the first 5 rows of the data\r\n",
"diabetes %>% \r\n",
" slice(1:5)"
],
"outputs": [],
"metadata": {
"id": "Z1geAMhM-bSP"
}
},
{
"cell_type": "markdown",
"source": [
"`glimpse()` μας δείχνει ότι αυτά τα δεδομένα έχουν 442 γραμμές και 11 στήλες, με όλες τις στήλες να είναι τύπου δεδομένων `double`.\n",
"\n",
"<br>\n",
"\n",
"> Οι `glimpse()` και `slice()` είναι συναρτήσεις στο [`dplyr`](https://dplyr.tidyverse.org/). Το Dplyr, μέρος του Tidyverse, είναι μια γραμματική για τη διαχείριση δεδομένων που παρέχει ένα συνεπές σύνολο ρημάτων για να σας βοηθήσει να λύσετε τις πιο κοινές προκλήσεις στη διαχείριση δεδομένων.\n",
"\n",
"<br>\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",
"<br>\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()` συνδέει αποτελεσματικά πολλαπλά data frames κατά στήλη.\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). Παρόλο που καταβάλλουμε προσπάθειες για ακρίβεια, παρακαλούμε να έχετε υπόψη ότι οι αυτόματες μεταφράσεις ενδέχεται να περιέχουν σφάλματα ή ανακρίβειες. Το πρωτότυπο έγγραφο στη μητρική του γλώσσα θα πρέπει να θεωρείται η αυθεντική πηγή. Για κρίσιμες πληροφορίες, συνιστάται επαγγελματική ανθρώπινη μετάφραση. Δεν φέρουμε ευθύνη για τυχόν παρεξηγήσεις ή εσφαλμένες ερμηνείες που προκύπτουν από τη χρήση αυτής της μετάφρασης.\n"
]
}
]
}