Τι είναι η Γραμμική Παλινδρόμηση;
Φαντάσου ότι έχουμε μερικά σημεία σε ένα χαρτί και θέλουμε να σχεδιάσουμε μια ευθεία γραμμή που να περνάει κοντά από όλα αυτά τα σημεία. Αυτή η γραμμή θα μας βοηθήσει να καταλάβουμε πώς αλλάζει κάτι (όπως το ύψος ενός φυτού) με βάση μια άλλη μεταβλητή (όπως η ποσότητα βροχής).
Παράδειγμα
Ας πούμε ότι έχουμε μετρήσει πόσο ψηλά μεγαλώνουν τα φυτά με βάση την ποσότητα βροχής που έχουν πάρει. Θέλουμε να βρούμε μια γραμμή που να δείχνει αυτή τη σχέση.
Παράδειγμα σε C# με Χρησιμοποίηση του ML.NET
Το ML.NET είναι μια βιβλιοθήκη της Microsoft για μηχανική μάθηση στην C#. Θα χρησιμοποιήσουμε το ML.NET για να δημιουργήσουμε ένα πρόγραμμα που κάνει Γραμμική Παλινδρόμηση.
- Πρώτα, εγκατέστησε το ML.NET:Χρησιμοποίησε το NuGet Package Manager για να προσθέσεις το
Microsoft.ML
στο πρόγραμμά σου. Αν χρησιμοποιείς το Visual Studio, μπορείς να το κάνεις με το εξής:
Install-Package Microsoft.ML
Δημιουργία του Προγράμματος:
Ακολουθεί ένα απλό παράδειγμα για να δεις πώς μπορείς να χρησιμοποιήσεις τη Γραμμική Παλινδρόμηση στην C#:
using System;
using System.Linq;
using Microsoft.ML;
using Microsoft.ML.Data;
class Program
{
// Δημιουργούμε μια κλάση για να αναπαριστά τα δεδομένα μας
public class PlantData
{
public float Rainfall { get; set; }
public float Height { get; set; }
}
// Δημιουργούμε μια κλάση για να αποθηκεύουμε τα αποτελέσματα
public class Prediction
{
[ColumnName("Score")]
public float Height { get; set; }
}
static void Main(string[] args)
{
// Δημιουργούμε έναν MLContext
var context = new MLContext();
// Δεδομένα εκπαίδευσης
var data = new[]
{
new PlantData() { Rainfall = 1, Height = 5 },
new PlantData() { Rainfall = 2, Height = 10 },
new PlantData() { Rainfall = 3, Height = 15 }
};
// Δημιουργούμε ένα IDataView από τα δεδομένα μας
var trainData = context.Data.LoadFromEnumerable(data);
// Δημιουργούμε ένα μοντέλο για Γραμμική Παλινδρόμηση
var model = context.Transforms.Concatenate("Features", new[] { "Rainfall" })
.Append(context.Regression.Trainers.Sdca(labelColumnName: "Height", maximumNumberOfIterations: 100))
.Fit(trainData);
// Κάνουμε μια πρόβλεψη
var predictionFunction = model.Transform(trainData);
var predictions = context.Data.CreateEnumerable<Prediction>(predictionFunction, reuseRowObject: false).ToList();
// Εμφανίζουμε τα αποτελέσματα
foreach (var prediction in predictions)
{
Console.WriteLine($"Πρόβλεψη ύψους: {prediction.Height}");
}
// Δοκιμάζουμε την πρόβλεψη για μια νέα ποσότητα βροχής
var sampleData = new PlantData() { Rainfall = 4 };
var sampleDataView = context.Data.LoadFromEnumerable(new[] { sampleData });
var result = model.Transform(sampleDataView);
var resultPrediction = context.Data.CreateEnumerable<Prediction>(result, reuseRowObject: false).First();
Console.WriteLine($"Για {sampleData.Rainfall} λίτρα βροχής, η πρόβλεψη ύψους είναι: {resultPrediction.Height}");
}
}
Τι Κάνουμε Εδώ:
- Δημιουργούμε Κλάσεις:
PlantData
: Περιέχει τα δεδομένα μας, όπως την ποσότητα βροχής και το ύψος των φυτών.Prediction
: Περιέχει την πρόβλεψη που θα κάνουμε.
- Δημιουργία MLContext:
- Χρησιμοποιούμε το
MLContext
για να ξεκινήσουμε τη διαδικασία μηχανικής μάθησης.
- Χρησιμοποιούμε το
- Φτιάχνουμε Μοντέλο:
- Χρησιμοποιούμε τον
Sdca
(Stochastic Dual Coordinate Ascent) για να εκπαιδεύσουμε το μοντέλο μας
- Χρησιμοποιούμε τον
- Πρόβλεψη:
- Κάνουμε πρόβλεψη για νέες τιμές και εμφανίζουμε τα αποτελέσματα.
- Δοκιμή του Μοντέλου:
- Δοκιμάζουμε το μοντέλο με μια νέα ποσότητα βροχής και βλέπουμε πόσο ύψος προβλέπεται.
Συνοπτικά
Η Γραμμική Παλινδρόμηση είναι ένας τρόπος να βρούμε μια ευθεία γραμμή που δείχνει πώς αλλάζει κάτι με βάση μια άλλη μεταβλητή. Στην C#, χρησιμοποιούμε το ML.NET για να δημιουργήσουμε το μοντέλο μας και να κάνουμε προβλέψεις.
Ελπίζω αυτό το παράδειγμα να σε βοήθησε να καταλάβεις πώς δουλεύει η Γραμμική Παλινδρόμηση στην C#! Αν έχεις άλλες ερωτήσεις, ρώτα με!