Τι είναι οι Αλγόριθμοι Κατηγοριοποίησης;
Οι αλγόριθμοι κατηγοριοποίησης (classification algorithms) χρησιμοποιούνται για να ταξινομήσουν δεδομένα σε προκαθορισμένες κατηγορίες ή κλάσεις. Για παράδειγμα, μπορούμε να χρησιμοποιήσουμε κατηγοριοποίηση για να αποφασίσουμε αν ένα email είναι “spam” ή “όχι spam”.
Βασικές Έννοιες
- Εκπαίδευση (Training): Δημιουργία ενός μοντέλου από υπάρχοντα δεδομένα (εκπαιδευτικό σύνολο).
- Δοκιμή (Testing): Έλεγχος της ακρίβειας του μοντέλου σε νέα δεδομένα (δοκιμαστικό σύνολο).
- Κατηγορίες (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) περιέχουν παρόμοια δεδομένα.
Βασικές Έννοιες
- Ομάδες (Clusters): Σύνολα δεδομένων που είναι παρόμοια μεταξύ τους.
- Απόσταση (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);
}
}
Συμπέρασμα
Οι αλγόριθμοι κατηγοριοποίησης και συσταδοποίησης είναι θεμελιώδεις για την ανάλυση δεδομένων και τη μηχανική μάθηση. Χρησιμοποιούνται σε πολλές εφαρμογές, όπως η αναγνώριση προτύπων, η ανάλυση αγορών και η επεξεργασία εικόνας. Είναι σημαντικό να κατανοήσεις πώς λειτουργούν αυτοί οι αλγόριθμοι, ώστε να μπορείς να τους εφαρμόσεις σε διάφορες πρακτικές καταστάσεις.