Τι είναι οι Αλγόριθμοι Κατηγοριοποίησης;

Οι αλγόριθμοι κατηγοριοποίησης (classification algorithms) χρησιμοποιούνται για να ταξινομήσουν δεδομένα σε προκαθορισμένες κατηγορίες ή κλάσεις. Για παράδειγμα, μπορούμε να χρησιμοποιήσουμε κατηγοριοποίηση για να αποφασίσουμε αν ένα email είναι “spam” ή “όχι spam”.

Βασικές Έννοιες

  1. Εκπαίδευση (Training): Δημιουργία ενός μοντέλου από υπάρχοντα δεδομένα (εκπαιδευτικό σύνολο).
  2. Δοκιμή (Testing): Έλεγχος της ακρίβειας του μοντέλου σε νέα δεδομένα (δοκιμαστικό σύνολο).
  3. Κατηγορίες (Classes): Οι διαφορετικές κατηγορίες στις οποίες μπορούμε να κατατάξουμε τα δεδομένα.

Παράδειγμα: Αλγόριθμος Απόφασης (Decision Tree)

Ο αλγόριθμος απόφασης είναι ένας από τους πιο κοινούς αλγόριθμους κατηγοριοποίησης

Ψευδογλώσσα



Διαδικασία Κατηγοριοποίηση(δεδομένα)
    Εκπαίδευση το μοντέλο
    Για κάθε νέο στοιχείο:
        Αν το στοιχείο ανήκει στην κατηγορία A τότε
            Επιστροφή A
        Αλλιώς αν το στοιχείο ανήκει στην κατηγορία B τότε
            Επιστροφή B
    Τέλος_αν
Τέλος_Διαδικασίας




Υλοποίηση σε C#

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



using System;
using System.Collections.Generic;

class Program
{
    static void Main()
    {
        // Δεδομένα εκπαίδευσης
        var trainingData = new List<Tuple<double, double, string>>()
        {
            Tuple.Create(5.1, 3.5, "Iris-setosa"),
            Tuple.Create(4.9, 3.0, "Iris-setosa"),
            Tuple.Create(6.3, 3.3, "Iris-versicolor"),
            Tuple.Create(5.8, 2.7, "Iris-versicolor"),
            Tuple.Create(7.2, 3.6, "Iris-virginica"),
            Tuple.Create(6.5, 3.2, "Iris-virginica"),
        };

        // Δοκιμή
        var newSample = Tuple.Create(5.0, 3.4);
        string result = Classify(newSample, trainingData);
        
        Console.WriteLine($"Το δείγμα ανήκει στην κατηγορία: {result}");
    }

    static string Classify(Tuple<double, double> sample, List<Tuple<double, double, string>> trainingData)
    {
        // Απλός κανόνας: η απόφαση βασίζεται στον μέσο όρο
        foreach (var data in trainingData)
        {
            if (data.Item1 < 5.5)
                return "Iris-setosa";
            else if (data.Item1 < 6.5)
                return "Iris-versicolor";
            else
                return "Iris-virginica";
        }
        return "Άγνωστη κατηγορία";
    }
}

Τι είναι οι Αλγόριθμοι Συσταδοποίησης;

Οι αλγόριθμοι συσταδοποίησης (clustering algorithms) χρησιμοποιούνται για να ομαδοποιήσουν δεδομένα σε ομάδες, χωρίς προκαθορισμένες κατηγορίες. Οι ομάδες (clusters) περιέχουν παρόμοια δεδομένα.

Βασικές Έννοιες

  1. Ομάδες (Clusters): Σύνολα δεδομένων που είναι παρόμοια μεταξύ τους.
  2. Απόσταση (Distance): Μέτρο που χρησιμοποιείται για να καθορίσει την ομοιότητα μεταξύ δεδομένων.

Παράδειγμα: K-Means

Ο αλγόριθμος K-Means είναι ένας από τους πιο γνωστούς αλγόριθμους συσταδοποίησης.



Ψευδογλώσσα



Διαδικασία KMeans(δεδομένα, k)
    Αρχικοποιήστε k κέντρα
    Επαναλάβετε:
        Ανάθεση κάθε δείγματος στο κοντινότερο κέντρο
        Ενημέρωση των κέντρων
    Μέχρι να μην αλλάξουν τα κέντρα
Τέλος_Διαδικασίας







Υλοποίηση σε C#



using System;
using System.Collections.Generic;
using System.Linq;

class Program
{
    static void Main()
    {
        // Δεδομένα
        var dataPoints = new List<Tuple<double, double>>()
        {
            Tuple.Create(1.0, 2.0),
            Tuple.Create(1.5, 1.8),
            Tuple.Create(5.0, 8.0),
            Tuple.Create(8.0, 8.0),
            Tuple.Create(1.0, 0.6),
            Tuple.Create(9.0, 11.0),
        };

        int k = 2; // Αριθμός ομάδων
        var clusters = KMeans(dataPoints, k);

        // Εμφάνιση αποτελεσμάτων
        foreach (var cluster in clusters)
        {
            Console.WriteLine("Ομάδα:");
            foreach (var point in cluster)
            {
                Console.WriteLine($"  {point}");
            }
        }
    }

    static List<List<Tuple<double, double>>> KMeans(List<Tuple<double, double>> dataPoints, int k)
    {
        // Αρχικοποίηση κέντρων (τυχαία επιλογή)
        var centroids = dataPoints.OrderBy(x => Guid.NewGuid()).Take(k).ToList();
        var clusters = new List<List<Tuple<double, double>>>(new List<Tuple<double, double>>[k]);

        bool changed;
        do
        {
            // Επανατοποθέτηση ομάδων
            clusters = new List<List<Tuple<double, double>>>(new List<Tuple<double, double>>[k]);
            changed = false;

            foreach (var point in dataPoints)
            {
                int closest = FindClosest(point, centroids);
                if (clusters[closest] == null)
                    clusters[closest] = new List<Tuple<double, double>>();
                clusters[closest].Add(point);
            }

            // Ενημέρωση κέντρων
            for (int i = 0; i < k; i++)
            {
                var newCentroid = UpdateCentroid(clusters[i]);
                if (!newCentroid.Equals(centroids[i]))
                    changed = true;
                centroids[i] = newCentroid;
            }
        } while (changed);

        return clusters;
    }

    static int FindClosest(Tuple<double, double> point, List<Tuple<double, double>> centroids)
    {
        double minDist = double.MaxValue;
        int closest = 0;

        for (int i = 0; i < centroids.Count; i++)
        {
            double dist = Math.Sqrt(Math.Pow(point.Item1 - centroids[i].Item1, 2) +
                                     Math.Pow(point.Item2 - centroids[i].Item2, 2));
            if (dist < minDist)
            {
                minDist = dist;
                closest = i;
            }
        }

        return closest;
    }

    static Tuple<double, double> UpdateCentroid(List<Tuple<double, double>> cluster)
    {
        double x = cluster.Average(p => p.Item1);
        double y = cluster.Average(p => p.Item2);
        return Tuple.Create(x, y);
    }
}

Συμπέρασμα

Οι αλγόριθμοι κατηγοριοποίησης και συσταδοποίησης είναι θεμελιώδεις για την ανάλυση δεδομένων και τη μηχανική μάθηση. Χρησιμοποιούνται σε πολλές εφαρμογές, όπως η αναγνώριση προτύπων, η ανάλυση αγορών και η επεξεργασία εικόνας. Είναι σημαντικό να κατανοήσεις πώς λειτουργούν αυτοί οι αλγόριθμοι, ώστε να μπορείς να τους εφαρμόσεις σε διάφορες πρακτικές καταστάσεις.