ML.Net Nedir Nasıl Kullanılır?
- 5
- 2
- 1
- 0
- 0
- 0
Ml.Net Makine öğrenmesi, günümüzde birçok uygulama alanında kullanılan ve verilerden otomatik olarak öğrenme ve tahmin yapma yeteneği sağlayan bir bilim dalıdır. Makine öğrenmesi uygulamaları, açıkça programlanmaları gerekmek yerine verilerdeki desenleri kullanarak çeşitli problemleri çözebilir. Örneğin, makine öğrenmesi uygulamaları ile müşteri geri bildirimlerini analiz edebilir, ev fiyatlarını tahmin edebilir, sahte işlemleri tespit edebilir veya ürün önerileri sunabilirsiniz.
Makine öğrenmesi uygulamaları geliştirmek için birçok araç ve kütüphane mevcuttur. Ancak, .NET platformunda çalışan ve C# veya F# gibi dilleri kullanan geliştiriciler için seçenekler sınırlıdır. ML.Net, bu açığı doldurmak üzere Microsoft tarafından geliştirilen ve .NET uygulamalarına makine öğrenmesi ekleme olanağı sağlayan bir kütüphanedir.
Bu makalede, ML.Net’in ne olduğunu, nasıl çalıştığını ve nasıl kullanabileceğinizi anlatacağım. Ayrıca, ML.Net ile ev fiyatlarını nasıl tahmin edebileceğinize dair basit bir örnek uygulama göstereceğim.
ML.Net Nedir?
ML.Net, .NET platformu için açık kaynaklı ve çapraz platformlu bir makine öğrenmesi kütüphanesidir. ML.Net ile .NET uygulamalarına makine öğrenmesi ekleme olanağı sağlar. Bu sayede, uygulamanız için kullanılabilir verileri kullanarak otomatik tahminler yapabilirsiniz.
ML.Net ile yapabileceğiniz bazı uygulama örnekleri şunlardır:
– Sınıflandırma: Müşteri geri bildirimlerini otomatik olarak pozitif ve negatif kategorilere ayırın
– Regresyon: Büyüklüğüne ve konumuna göre evlerin fiyatını tahmin et
– Anomali Algılama: Sahte bankacılık işlemlerini algıla
– Öneriler: Çevrimiçi alışveriş yapanların önceki alışverişlerine göre satın almak isteyebileceği ürünleri öner
– Zaman serisi: Hava durumunu/ürün satışlarını tahmin et
– Resim sınıflandırma: Tıbbi görüntülerde patolojileri kategorilere ayır
– Metin sınıflandırması: Belgeleri içeriğine göre kategorilere ayır
ML.Net, Windows, Linux ve macOS üzerinde çalışır ve C# ve F# dillerini destekler. Ayrıca, ML.Net ile önceden eğitilmiş TensorFlow ve ONNX modellerini içeri aktarabilir veya dışarı aktarabilirsiniz.
ML.Net Nasıl Çalışır?
ML.Net ile makine öğrenmesi uygulamaları geliştirmek için aşağıdaki adımları izlemeniz gerekir:
1. Verileri hazırlayın. Makine öğrenmesi modelinin amacı, eğitim verileri içindeki desenleri tanımlamaktır. Bu desenler, yeni verileri kullanarak tahminde bulunmak için kullanılır. Verilerinizi bir CSV dosyasına kaydedebilir veya C# kodunda bir sınıf olarak tanımlayabilirsiniz.
2. Modeli eğitin. MLContext nesnesi oluşturun ve verilerinizi IDataView nesnesine yükleyin. Verilerinizdeki giriş ve çıkış sütunlarını belirtmek için bir veri hazırlama pipeline oluşturun. Bir makine öğrenmesi algoritması seçin ve modelinizi eğitmek için Fit yöntemini çağırın.
3. Modeli değerlendirin. Modelinizin performansını ölçmek için test verilerini kullanın. Modelinizden tahminler almak için Predict yöntemini çağırın ve gerçek değerlerle karşılaştırın. Modelinizin doğruluğunu ve hata oranını hesaplayın.
4. Modeli kullanın. Modelinizden yeni verilerle tahminler almak için CreatePredictionEngine yöntemini kullanın. Tahminleri uygulamanızda görüntüleyin veya kaydedin.
ML.Net ile Ev Fiyatlarını Tahmin Etme Örneği
Şimdi, ML.Net ile ev fiyatlarını nasıl tahmin edebileceğimize dair basit bir örnek uygulama göstereceğim. Bu uygulama, ev boyutu, konum, tarihi fiyatlar ve mevcut fiyat gibi verileri kullanarak doğrusal bir regresyon modeli oluşturur.
Verileri Hazırlama
Size | Location | HistoricalPrices | CurrentPrice |
600 | A | 100000, 125000, 122000 | 170000 |
1000 | B | 200000, 250000, 230000 | 225000 |
1000 | A | 126000, 130000, 200000 | 195000 |
850 | B | 150000, 175000, 210000 | 205000 |
900 | A | 155000, 190000, 220000 | 210000 |
550 | A | 99000 , 98000 , 130000 | 180000 |
Verilerimizi C# kodunda HousingData adında bir sınıf olarak tanımlayabiliriz:
#csharp
public class HousingData
{
[LoadColumn(0)]
public float Size { get; set; }
[LoadColumn(1)]
public string Location { get; set; }
[LoadColumn(2,4)]
[VectorType(3)]
public float[] HistoricalPrices { get; set; }
[LoadColumn(5)]
[ColumnName("Label")]
public float CurrentPrice { get; set; }
}
Verilerimizi HousingData tipinde bir dizi olarak oluşturabiliriz:
HousingData[] housingData = new HousingData[]
{
new HousingData { Size = 600f , Location = "A", HistoricalPrices = new float[] {100000f ,125000f ,122000f }, CurrentPrice = 170000f },
new HousingData { Size = 1000f , Location = "B", HistoricalPrices = new float[] {200000f ,250000f ,230000f }, CurrentPrice = 225000f },
new HousingData { Size = 1000f , Location = "A", HistoricalPrices = new float[] {126000f ,130000f ,200000f }, CurrentPrice = 195000f },
new HousingData { Size = 850f , Location = "B", HistoricalPrices = new float[] {150000f ,175000f ,210000f }, CurrentPrice = 205000f },
new HousingData { Size = 900f , Location = "A", HistoricalPrices = new float[] {155000f ,190000f ,220000f }, CurrentPrice = 210000f },
new HousingData { Size = 550f , Location = "B", HistoricalPrices = new float[] {99000f ,98000f ,130000f }, CurrentPrice = 180000f }
};
Verilerimizi MLContext nesnesi oluşturarak IDataView nesnesine yükleyebiliriz:
MLContext mlContext = new MLContext();
IDataView data = mlContext.Data.LoadFromEnumerable(housingData);
Modeli Eğitme
Modelimizi eğitmek için verilerimizi eğitim ve test kümelerine bölmeliyiz. Böylece, modelimizin performansını test verileri ile ölçebiliriz. Verilerimizi %80 eğitim ve %20 test olacak şekilde bölüyoruz:
DataOperationsCatalog.TrainTestData dataSplit = mlContext.Data.TrainTestSplit(data, testFraction: 0.2);
IDataView trainData = dataSplit.TrainSet;
IDataView testData = dataSplit.TestSet;
Verilerimizi hazırlamak için bir veri hazırlama pipeline oluşturuyoruz. Pipeline için şu işlemleri yapıyoruz:
- Location sütununu OneHotEncoding ile sayısal bir vektöre dönüştürüyoruz. Böylece, modelimiz kategorik veriyi anlayabilir.
- Size ve HistoricalPrices sütunlarını Concatenate ile tek bir vektör haline getiriyoruz. Böylece, modelimiz birden fazla giriş sütununu kullanabilir.
- Sdca adlı bir regresyon algoritması seçiyoruz. Bu algoritma, doğrusal bir regresyon modeli oluşturmak için kullanılır.
var pipeline = mlContext.Transforms.Categorical.OneHotEncoding("Location")
.Append(mlContext.Transforms.Concatenate("Features", "Size", "Location", "HistoricalPrices"))
.Append(mlContext.Regression.Trainers.Sdca(labelColumnName: "Label", maximumNumberOfIterations: 100));
var model = pipeline.Fit(trainData);
Pipeline eğitim verileri ile çalıştırarak modelimizi eğitiyoruz:
var model = pipeline.Fit(trainData);
Modeli Değerlendirme
Modelimizi değerlendirmek için test verilerini kullanıyoruz. Modelimizden tahminler almak için Transform yöntemini çağırıyoruz:
IDataView predictions = model.Transform(testData);
Modelimizin performansını ölçmek için RegressionMetrics nesnesini kullanıyoruz. Bu nesne, modelimizin doğruluğunu ve hata oranını hesaplamak için çeşitli metrikler sunar. Örneğin, R-squared değeri, modelimizin verilerdeki varyansı ne kadar açıkladığını gösterir. Mean Absolute Error değeri, modelimizin tahminlerinin gerçek değerlerden ne kadar uzak olduğunu gösterir.
var metrics = mlContext.Regression.Evaluate(predictions, labelColumnName: "Label", scoreColumnName: "Score");
Console.WriteLine($"R-squared: {metrics.RSquared:0.##}");
Console.WriteLine($"Mean Absolute Error: {metrics.MeanAbsoluteError:#.##}");
Modeli Kullanma
Modelimizi kullanarak yeni verilerle tahminler yapabiliriz. Örneğin, aşağıdaki gibi yeni bir ev verisi oluşturabiliriz:
var newHouse = new HousingData
{
Size = 800f,
Location = "A",
HistoricalPrices = new float[] {140000f, 160000f, 170000f}
};
Modelimizden tahmin almak için CreatePredictionEngine yöntemini kullanabiliriz. Bu yöntem, giriş ve çıkış tiplerini belirtmemizi ister. Giriş tipi HousingData, çıkış tipi ise Prediction adında bir sınıftır. Prediction sütununda tahmin edilen ev fiyatı bulunur.
public class Prediction
{
[ColumnName("Score")]
public float Price { get; set; }
}
CreatePredictionEngine yöntemi ile bir tahmin motoru oluşturuyoruz:
var predictionEngine = mlContext.Model.CreatePredictionEngine(model);
Tahmin motorunu kullanarak yeni ev verisi için tahminde bulunuyoruz:
var prediction = predictionEngine.Predict(newHouse);
Console.WriteLine($"Predicted price: {prediction.Price:0.##}");
Sonuç
Bu makalede, ML.Net’in ne olduğunu, nasıl çalıştığını ve nasıl kullanabileceğinizi öğrendiniz. Ayrıca, ev fiyatlarını nasıl tahmin edebileceğinize dair basit bir örnek uygulama gösterdim.
ML.Net ile daha fazla şey yapmak istiyorsanız, kaynaklara göz atabilirsiniz.
Ayrıca Ml.Net ile yapılmış bu projeye göz atabilirsiniz: Makine Öğrenimi – TR Duygu Analizi
İlginizi Çekebilecek Başka Bir Konu: GPT-4: Yapay Zekanın Son Harikası