Πλήρης Οδηγός για Μηχανική Μάθηση με scikit-learn για Αρχάριους

Πλήρης Οδηγός για Μηχανική Μάθηση με scikit-learn για Αρχάριους 

Η Μηχανική Μάθηση (ML) είναι μια από τις πιο συναρπαστικές και ισχυρές τεχνολογίες στον κόσμο της πληροφορικής σήμερα. Αν θέλεις να ξεκινήσεις την εξερεύνηση της Μηχανικής Μάθησης στην Python, το scikit-learn είναι η καλύτερη βιβλιοθήκη για σένα! Σε αυτόν τον πλήρη οδηγό, θα ανακαλύψεις τα πάντα για το scikit-learn, από την εγκατάστασή του, μέχρι την εκπαίδευση και την αξιολόγηση μοντέλων μηχανικής μάθησης.

1. Εγκατάσταση του scikit-learn

Πριν αρχίσεις, θα πρέπει να εγκαταστήσεις το scikit-learn. Μπορείς να το κάνεις εύκολα μέσω του pip:

pip install scikit-learn

Αυτό θα εγκαταστήσει το scikit-learn και τις απαραίτητες εξαρτήσεις του.

2. Τι Είναι το scikit-learn;

Το scikit-learn είναι μια βιβλιοθήκη για Μηχανική Μάθηση που περιλαμβάνει αλγόριθμους για:

  • Κατηγοριοποίηση (Classification)
  • Παλινδρόμηση (Regression)
  • Ομαδοποίηση (Clustering)
  • Μεικτές τεχνικές, όπως η μείωση διάστασης (Dimensionality Reduction)

3. Φόρτωση και Προετοιμασία Δεδομένων

Η πρώτη κίνηση σε κάθε πρόβλημα μηχανικής μάθησης είναι η φόρτωση και η προετοιμασία των δεδομένων.

Παράδειγμα: Φόρτωση του Dataset Iris

Το dataset Iris είναι ένα από τα πιο γνωστά σύνολα δεδομένων στη Μηχανική Μάθηση και χρησιμοποιείται για την κατηγοριοποίηση φυτών σε τρεις κατηγορίες, βασισμένες σε τέσσερα χαρακτηριστικά (μήκος και πλάτος πετάλων, σέπαλων).

from sklearn.datasets import load_iris
import pandas as pd

# Φορτώνουμε το dataset
iris = load_iris()

# Μετατροπή του dataset σε DataFrame για ευκολότερη ανάλυση
df = pd.DataFrame(iris.data, columns=iris.feature_names)
df['species'] = iris.target

# Εμφάνιση πρώτων γραμμών του dataset
print(df.head())

4. Διαχωρισμός των Δεδομένων σε Εκπαίδευση και Δοκιμή

Ένα σημαντικό βήμα είναι να διαχωρίσουμε τα δεδομένα σε εκπαιδευτικό και δοκιμαστικό σύνολο. Αυτό μας επιτρέπει να εκπαιδεύσουμε το μοντέλο σε μια ομάδα δεδομένων και να το αξιολογήσουμε σε άλλη, αποφεύγοντας την υπερβολική εκπαίδευση (overfitting).

from sklearn.model_selection import train_test_split

# Διαχωρίζουμε τα δεδομένα σε X (χαρακτηριστικά) και y (ετικέτες)
X = iris.data
y = iris.target

# Διαχωρίζουμε σε 70% εκπαίδευση και 30% δοκιμή
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

# Εκτύπωση του μεγέθους των δεδομένων
print(f"Training set size: {X_train.shape[0]}")
print(f"Test set size: {X_test.shape[0]}")

5. Εκπαίδευση Μοντέλου με LogisticRegression

Για την κατηγοριοποίηση, μπορούμε να χρησιμοποιήσουμε το μοντέλο Λογιστικής Παλινδρόμησης (Logistic Regression), το οποίο είναι ένα από τα πιο δημοφιλή και βασικά μοντέλα στη μηχανική μάθηση.

from sklearn.linear_model import LogisticRegression

# Δημιουργία του μοντέλου
model = LogisticRegression(max_iter=200)

# Εκπαίδευση του μοντέλου
model.fit(X_train, y_train)

6. Αξιολόγηση του Μοντέλου

Αφού εκπαιδεύσουμε το μοντέλο, πρέπει να το αξιολογήσουμε χρησιμοποιώντας μετρικές όπως η ακρίβεια (accuracy) και τον πίνακα σύγχυσης.

from sklearn.metrics import accuracy_score, confusion_matrix, classification_report

# Προβλέψεις του μοντέλου
y_pred = model.predict(X_test)

# Υπολογισμός ακρίβειας
accuracy = accuracy_score(y_test, y_pred)
print(f"Accuracy: {accuracy * 100:.2f}%")

# Συγκριτικός πίνακας σύγχυσης
print("Confusion Matrix:")
print(confusion_matrix(y_test, y_pred))

# Πληροφορίες για την απόδοση του μοντέλου
print("Classification Report:")
print(classification_report(y_test, y_pred))

7. Άλλα Μοντέλα και Αλγόριθμοι στο scikit-learn

Αν και η λογιστική παλινδρόμηση είναι δημοφιλής, υπάρχουν και άλλοι αλγόριθμοι για κατηγοριοποίηση:

  • Υποστήριξη Διάνυσμα Μηχανών (SVM): Ιδανικό για προβλήματα με πολλές διαστάσεις.
  • Δέντρα Απόφασης (Decision Trees): Ιδανικό για εύκολη κατανόηση.
  • Τυχαία Δάση (Random Forest): Ιδανικό για βελτίωση της ακρίβειας μέσω ενσωμάτωσης.
  • K-Νέα Γειτονία (K-NN): Βασίζεται στην κοντινότητα των παραδειγμάτων.

Παράδειγμα: Υποστήριξη Διάνυσμα Μηχανών (SVM)

from sklearn.svm import SVC

# Δημιουργία του μοντέλου SVM
svm_model = SVC(kernel='linear')

# Εκπαίδευση του μοντέλου
svm_model.fit(X_train, y_train)

# Προβλέψεις και αξιολόγηση
y_pred_svm = svm_model.predict(X_test)
print(f"SVM Accuracy: {accuracy_score(y_test, y_pred_svm) * 100:.2f}%")

8. Παλινδρόμηση με LinearRegression

Αν το πρόβλημά σου περιλαμβάνει προβλέψεις αριθμητικών τιμών (π.χ. προβλέψεις πωλήσεων), τότε μπορείς να χρησιμοποιήσεις την Γραμμική Παλινδρόμηση (Linear Regression).

from sklearn.linear_model import LinearRegression

# Δημιουργία του μοντέλου
lr_model = LinearRegression()

# Εκπαίδευση του μοντέλου
lr_model.fit(X_train, y_train)

# Προβλέψεις
y_pred_lr = lr_model.predict(X_test)

# Υπολογισμός απόδοσης του μοντέλου
from sklearn.metrics import mean_squared_error
mse = mean_squared_error(y_test, y_pred_lr)
print(f"Mean Squared Error: {mse}")

9. Κανονικοποίηση Δεδομένων

Στην Μηχανική Μάθηση, τα δεδομένα συχνά χρειάζονται κανονικοποίηση ή κλιμάκωση για να βελτιώσουν την απόδοση των μοντέλων. Αυτό είναι πολύ σημαντικό για αλγόριθμους όπως η Υποστήριξη Διάνυσμα Μηχανών (SVM).

Παράδειγμα: Κανονικοποίηση με StandardScaler

from sklearn.preprocessing import StandardScaler

# Δημιουργία του scaler
scaler = StandardScaler()

# Εκπαίδευση και εφαρμογή του scaler
X_train_scaled = scaler.fit_transform(X_train)
X_test_scaled = scaler.transform(X_test)

# Εκπαίδευση του μοντέλου με τα κανονικοποιημένα δεδομένα
model.fit(X_train_scaled, y_train)
y_pred_scaled = model.predict(X_test_scaled)

# Αξιολόγηση
print(f"Accuracy with scaled data: {accuracy_score(y_test, y_pred_scaled) * 100:.2f}%")

10. Αξιολόγηση και Υπερβολική Εκπαίδευση (Overfitting)

Ένα κρίσιμο θέμα στη μηχανική μάθηση είναι το overfitting (υπερβολική εκπαίδευση), όπου το μοντέλο αποδίδει καλά στα δεδομένα εκπαίδευσης αλλά όχι σε δεδομένα που δεν έχει ξαναδεί.

Παράδειγμα: Διασταυρούμενη Επικύρωση (Cross-validation)

from sklearn.model_selection import cross_val_score

# Υπολογισμός της διασταυρούμενης επικύρωσης
cv_scores = cross_val_score(model, X, y, cv=5)
print(f"Cross-validation scores: {cv_scores}")
print(f"Average cross-validation score: {cv_scores.mean()}")

Συμπέρασμα

Ο Μηχανική Μάθηση είναι ένα εξαιρετικά ισχυρό εργαλείο για την επίλυση πραγματικών προβλημάτων και το scikit-learn είναι μια από τις καλύτερες βιβλιοθήκες για να ξεκινήσεις! Είτε εργάζεσαι με προβλήματα κατηγοριοποίησης, παλινδρόμησης ή ομαδοποίησης, το scikit-learn παρέχει όλα τα εργαλεία που χρειάζεσαι για να χτίσεις και να αξιολογήσεις τα μοντέλα σου. Ελπίζω αυτός ο οδηγός να σε βοηθήσει να ξεκινήσεις με την Μηχανική Μάθηση στην Python!


Σχόλια

Δημοφιλείς αναρτήσεις από αυτό το ιστολόγιο

Αυτόματο Φως Νύχτας

🚀 Διαγωνισμός Ρομποτικής & Αυτοματισμού! 🤖

🚗🤖 Φτιάξε το Δικό σου Μίνι Ρομποτικό Αυτοκίνητο με Arduino!