ML.NET Nedir?
ML.NET, .NET platformuna dahil olan açık kaynaklı makine öğrenmesi framework’ üdür.
Farklı makine öğrenmesi senaryolarını C# veya F# dilleri kullanarak modellerimizi eğitebilir, derleyebilir ve kullanıma hazır hale getirebilirsiniz. Çoklu platform desteği olduğu için Windows, Linux ve macOS platformlarında da kullanılabilir.
ML.NET anlatmaya başlamadan önce makine öğrenmesi kavramından da kısaca bahsetmek gerekir.
Makine öğrenmesi, bilgisayar sistemlerinin en az insan müdahalesi ile belirli veri setleri üzerinden belirlenen algoritmalar ile analizler yapıp karar verme ve öngörüde bulunabilmesini inceleyen bilimsel çalışmadır.
Yapay zeka alanının bir alt dalı (kümesi) olarak geçmektedir. Öngörü veya tahminlerde bulunmadan önce eğitim verileri üzerinden eğitilmiş model oluşturulur.
ML.NET temel anlamda 7 adımda özetlenebilir:
- ML.NET Context’ i Oluşturma: Tüm ML.NET işlemleri için başlangıç noktasıdır.
- Veri Yükleme: Analiz edilecek veriler yüklenir.
- Veri Dönüştürme: Yüklenen ham veriler dönüştürülür.
- Algoritma Seçme: Dönüştürülen verilerin eğitimi için uygun algoritma seçilir.
- Modeli Eğitme: Dönüştürülen verilen seçilen algoritmaya uygun şekilde eğitimli model oluşturulur.
- Modeli Değerlendirme: Eğitimli model üzerinden değerlendirmeler yapılır.
- Modeli Yükleme: Eğitimli modeli .NET uygulamasına entegre edilmesi sağlanır.
Şimdi kod örneği üzerinden adım adım gidebiliriz.
Başlarda dediğimiz gibi önce MLContext’ imizi oluşturuyoruz.
MLContext yapısı veri hazırlama, özellik belirleme, eğitim, tahmin, model değerlendirme için bileşenler oluşturabilmemizi sağlar. Ayrıca, günlük kaydı, yürütme kontrolü ve tekrarlanabilir rastgele sayılar kümesi vb. işlemleri de yapabilmemize yardımcı olur.
MLContext, verileri yükleyebilir ve dönüştürebilir, makine öğrenme görevimiz için en iyi algoritmayı seçebilir, modelimizi eğitebiliriz. Eğitildikten sonra, modelimizi doğruluk açısından test edebilir, kaydedebilir ve tahminlerde bulunabilirsiniz.
Yapı olarak EntityFramework’ teki DBContext yapısına benzer bir yapıdır.
Context’ i oluşturduktan sonra modelimiz için gerekli verileri yüklememiz gerekiyor. Yükleyeceğimiz verileri bir IDataView nesnesine atayabiliriz. IDataView nesneleri, sayı, metin, boolean değerler vs. içerebilir. Verileri dosyalardan, JSON/ XML formatındaki verilerden, ilişkisel veya ilişkisel olmayan veritabanlarından veya farklı veri kaynaklarından bir IDataView nesnesine yükleme yapabiliriz.
LoadFromTextFile, TXT, CSV, TSV ve diğer dosya formatlarından veri yükleyebilmemizi sağlar. Ayrıca ayıraç olan karakteri ve dosyada başlık olup olmadığını da belitmemiz gerekir.
LoadFromEnumerable ise bellek içi koleksiyonlardan, JSON / XML’den, ilişkisel ve ilişkisel olmayan veritabanlarından (örn. SQL, CosmosDB, MongoDB) ve diğer birçok veri kaynağından yüklenmesini sağlar.
Verilerimiz yükledikten sonra genelde elimizdeki ham verileri direkt olarak modelin eğitilmesinde kullanamayız. Bu yüzden önce verilerimizin dönüştürülmesi gerekir.
Bu şekilde verilerimizi işledikten sonra elimizdeki senaryoya uygun olarak algoritma seçmemiz gereklidir.
Belirlediğimiz işlenmiş veriler ve algoritma üzerinden Fit() methodu ile eğitimli modelimizi oluşturabiliriz. Elimizdeki verileri girdi olarak verip eğitimli modeli çıktı olarak alırız.
Modelimizi de eğittikten sonra artık test verilerimiz üzerinden sonuçlarımızı yazdırabiliriz.
Eğitimli modelimizi diğer .NET uygulamalarımıza entegre etmek için dosya olarak kaydedebiliriz.
Eğitimli modelimizi dosya olarak kaydettikten sonra, modelimiz diğer .NET uygulamalarımıza yükleyebiliriz.
SONUÇ:
ML.NET, .NET geliştiricilerinin farklı dil veya kütüphane kullanmadan makine öğrenmesi ile ilgili geliştirme yapmasını sağlayan önemli bir framework. Henüz tam anlamıyla zengin içeriklere sahip olamasa da git gide büyüyen bir yapı olarak yazılım dünyasında yerini almaya başladı. TensorFlow ve ONNX vb. sistemler ile de uyumluluğa sahip olması da artı yönlerinden biri.
Kaynaklar ve Faydalı Linkler: