ML.NET nedir ve nasıl çalışır?
ML.NET, çevrimiçi veya çevrimdışı senaryolarda makine öğrenmesini .NET uygulamalarına eklemenizi sağlar. Bu özellik sayesinde, uygulamanıza uygun verileri kullanarak otomatik tahminler yapma imkanınız vardır. Makine öğrenmesi uygulamaları, açıkça programlanmış olmak yerine tahminde bulunuyorsa veri desenlerini kullanır.
ML.NET,bir makine öğrenmesi modelidir. Model, giriş verilerinizi tahmine dönüştürmek için gereken adımları belirtir. ML.NET ile bir algoritma belirterek özel bir model eğitin veya önceden eğitilmiş TensorFlow ve ONNX modellerini içeri aktarabilirsiniz.
Modeliniz olduktan sonra, tahminlerde olmak için modeli uygulamanıza ekebilirsiniz.
ML.NET, Windows, Linux ve macOS üzerinde .NET Core veya Windows kullanarak .NET Framework. 64 bit tüm platformlarda de kullanılabilir. TensorFlow, LightGBM ve ONNX ile ilgili işlevler dışında 32 bit Windows için de kullanılabilir.
ML.NET ile tahminler ML örnekleri:
Sınıflandırma/Kategorilere Ayırma
Müşteri geri bildirimlerini otomatik olarak olumlu ve olumsuz kategorilere bölme
Regresyon/Sürekli değerleri tahmin edin
Boyuta ve konuma göre evlerin fiyatını tahmin edin
Anomali Algılama
Sahte bankacılık işlemlerini algılama
Öneriler
Çevrimiçi alışveriş yapanların önceki satın almalarına göre satın almak istemeleri gereken ürünler önerin
Zaman serisi/sıralı veriler
Hava durumu/ürün satışlarını tahmin edin
Resimleri sınıflandırma
Tıbbi görüntülerde kategorilere ayırma
Hello ML.NET World
Aşağıdaki kod parçacığındaki kod, en basit ML.NET uygulamasını gösteriyor. Bu örnek, ev boyutu ve fiyat verilerini kullanarak ev fiyatlarını tahmin etmek için doğrusal bir regresyon modeli sağlar.
using System;
using Microsoft.ML;
using Microsoft.ML.Data;
class Program
{
public class HouseData
{
public float Size { get; set; }
public float Price { get; set; }
}
public class Prediction
{
[ColumnName("Score")]
public float Price { get; set; }
}
static void Main(string[] args)
{
MLContext mlContext = new MLContext();
// 1. Import or create training data
HouseData[] houseData = {
new HouseData() { Size = 1.1F, Price = 1.2F },
new HouseData() { Size = 1.9F, Price = 2.3F },
new HouseData() { Size = 2.8F, Price = 3.0F },
new HouseData() { Size = 3.4F, Price = 3.7F } };
IDataView trainingData = mlContext.Data.LoadFromEnumerable(houseData);
// 2. Specify data preparation and model training pipeline
var pipeline = mlContext.Transforms.Concatenate("Features", new[] { "Size" })
.Append(mlContext.Regression.Trainers.Sdca(labelColumnName: "Price", maximumNumberOfIterations: 100));
// 3. Train model
var model = pipeline.Fit(trainingData);
// 4. Make a prediction
var size = new HouseData() { Size = 2.5F };
var price = mlContext.Model.CreatePredictionEngine<HouseData, Prediction>(model).Predict(size);
Console.WriteLine($"Predicted price for size: {size.Size*1000} sq ft= {price.Price*100:C}k");
// Predicted price for size: 2500 sq ft= $261.98k
}
}
Kod iş akışı
Aşağıdaki diyagram hem uygulama kodu yapısını hem de model geliştirmenin iterative işlemini temsil eder:
- Eğitim verilerini IDataView nesnesine toplama ve yükleme
- Özellikleri ayıklamak ve makine öğrenmesi algoritması uygulamak için işlem hattı belirtme
- İşlem hattında Fit() çağrısıyla modeli eğitin
- Modeli değerlendirme ve geliştirmek için iterate
- Modeli bir uygulamada kullanmak üzere ikili biçime kaydedin
- Modeli bir ITransformer nesnesine geri yükleme
- CreatePredictionEngine.Predict() çağrısıyla tahminde bulunuyor

Şimdi bu kavramları biraz daha derinlemesine araştıracağız.
Makine öğrenmesi modeli
ML.NET modeli, giriş verilerinizde gerçekleştirecek ve tahmin edilen çıkışa ulaşacak dönüştürmeleri içeren bir nesnedir.
Temel
En temel model, yukarıdaki ev fiyatı örneğinde olduğu gibi sürekli miktarlardan birinin diğer miktarla orantılı olduğu iki boyutlu doğrusal regresyondur.
Model basitçe şöyledir: $Price = b + Boyut * w$. $$ $b $w$ parametreleri, bir satır bir dizi (boyut, fiyat) çifti üzerine sığdırarak tahmin edilmektedir. Modelin parametrelerini bulmak için kullanılan verilere eğitim verileri denir. Makine öğrenmesi modelinin girişlerinin adı özelliklerdir. Bu örnekte, $Size$ tek özelliktir. Makine öğrenmesi modelini eğitmek için kullanılan temel doğruluk değerleri etiket olarak adlandırılan değerlerdir. Burada, $Price veri kümesinde yer alan $Price$ değerleri etiketlerdir.
Daha karmaşık
Daha karmaşık bir model, işlem metni açıklamasını kullanarak finansal işlemleri kategorilere sınıflandırabilir.
Her işlem açıklaması, yedekli sözcükler ve karakterler kaldırılarak ve sözcük ve karakter birleşimleri sayılarak bir özellik kümesine göre ayarlanır. Özellik kümesi, eğitim verilerinde kategori kümesine göre doğrusal bir modeli eğitmek için kullanılır. Yeni bir açıklama, eğitim kümesinde yer alanlara ne kadar benzer olursa aynı kategoriye atanma olasılığı o kadar fazladır.
Hem ev fiyat modeli hem de metin sınıflandırma modeli doğrusal modellerdir. Verilerinizin doğasına ve çözmekte olduğunuz soruna bağlı olarak karar ağacı modellerini, genelleştirilmiş eklenebilir modelleri ve diğer modelleri de kullanabilirsiniz. Görevler'de modeller hakkında daha fazla bilgi bulabilirsiniz.
Veri hazırlama
Çoğu durumda, mevcut verileriniz makine öğrenmesi modelini eğitmek için doğrudan kullanılmaya uygun değildir. Ham verilerin modelinizin parametrelerini bulmak için kullanılamadan önce hazır olması veya önceden işlenmesi gerekir. Verilerinizin dize değerlerinden sayısal bir gösterime dönüştürülmesi gerekir. Giriş verilerinizde yedekli bilgiler olabilir. Giriş verilerinizin boyutlarını azaltmanız veya genişletmeniz gerekir. Verilerinizin normalleştirilmiş veya ölçeklendirilen olması gerekir.
ML.NET öğreticileri, belirli makine öğrenmesi görevleri için kullanılan metin, görüntü, sayısal ve zaman serisi verileri için farklı veri işleme işlem hatları hakkında bilgi verir.
Verilerinizi hazırlama, veri hazırlamayı daha genel bir şekilde nasıl uygulayacaklarını gösterir.
Kullanılabilir tüm dönüştürmelerin ekini kaynaklar bölümünde bulabilirsiniz.
Modeli değerlendirme
Modelinizi eğittiniz, gelecekte ne kadar iyi tahminler yapacaktır? ML.NET ile modelinizi bazı yeni test verilerine göre değerlendirebilirsiniz.
Her makine öğrenmesi görevi türü, modelin test veri kümesine göre doğruluğunu ve duyarlığı değerlendirmek için kullanılan ölçümlere sahiptir.
Ev fiyatı örneğimizde Regresyon görevini kullandık. Modeli değerlendirmek için aşağıdaki kodu özgün örneğine ekleyin.
HouseData[] testHouseData =
{
new HouseData() { Size = 1.1F, Price = 0.98F },
new HouseData() { Size = 1.9F, Price = 2.1F },
new HouseData() { Size = 2.8F, Price = 2.9F },
new HouseData() { Size = 3.4F, Price = 3.6F }
};
var testHouseDataView = mlContext.Data.LoadFromEnumerable(testHouseData);
var testPriceDataView = model.Transform(testHouseDataView);
var metrics = mlContext.Regression.Evaluate(testPriceDataView, labelColumnName: "Price");
Console.WriteLine($"R^2: {metrics.RSquared:0.##}");
Console.WriteLine($"RMS error: {metrics.RootMeanSquaredError:0.##}");
// R^2: 0.96
// RMS error: 0.19
Değerlendirme ölçümleri, hatanın düşük ish olduğunu ve tahmin edilen çıkışla test çıkışı arasındaki bağıntının yüksek olduğunu belirtir. Ne kadar kolay oldu! Gerçek örneklerde iyi model ölçümleri elde etmek için daha fazla ayar yapmak gerekir.
ML.NET mimarisi
Bu bölümde ML.NET'in mimari ML üzerinden geçebilirsiniz. Deneyimli bir .NET geliştiricisiyseniz bu desenlerden bazıları size tanıdık gelecek, bazıları ise daha az tanıdık gelecektir. Sıkı tutun, biz de bu sırada!
ML.NET uygulaması bir nesnesiyle MLContext başlar. Bu tek nesne kataloglar içerir. Katalog; veri yükleme ve kaydetme, dönüştürme, eğitmenler ve model işlemi bileşenleri için bir fabrikadır. Her katalog nesnesinin farklı bileşen türlerini oluşturmak için yöntemleri vardır:
Veri yükleme ve kaydetme
Veri hazırlama
Eğitim algoritmaları
İkili sınıflandırma
Çok sınıflı sınıflandırma
Anormallik algılama
Kümeleme
Tahmin etme
Sıralama
Regresyon
Öneri
Microsoft.ML.Recommender NuGet paketini ekleyin
TimeSeries
Microsoft.ML.TimeSeries NuGet paketini ekleyin
Model kullanımı
Yukarıdaki kategorilerin her birsinde oluşturma yöntemlerine gidin. Bu Visual Studio kataloglar IntelliSense aracılığıyla gösterir.

İşlem hattını oluşturma
Her kataloğun içinde bir dizi uzantı yöntemi vardır. Şimdi eğitim işlem hattı oluşturmak için uzantı yöntemlerinin nasıl kullanıldıklarına bakalım.
var pipeline = mlContext.Transforms.Concatenate("Features", new[] { "Size" })
.Append(mlContext.Regression.Trainers.Sdca(labelColumnName: "Price", maximumNumberOfIterations: 100));
kod parçacığında Concatenate ve her ikisi de Sdca katalogda kullanılan yöntemlerdir. Her biri işlem hattına eklenen bir IEstimator nesnesi oluşturur.
Bu noktada, nesneler yalnızca oluşturulur. Yürütme olmadı.
Modeli eğitme
İşlem hattında nesneler oluşturulduktan sonra veriler modeli eğitmek için kullanılabilir.
var model = pipeline.Fit(trainingData);
çağrısı, Fit() modelin parametrelerini tahmin etmek için giriş eğitim verilerini kullanır. Bu, modeli eğitme olarak bilinir. Yukarıdaki doğrusal regresyon modelinin iki model parametresi olduğunu unutmayın: sapma ve ağırlık. Çağrıdan Fit() sonra parametrelerin değerleri bilinir. Çoğu modelde bunun çok daha fazla parametresi olur.
Model eğitimi hakkında daha fazla bilgi edinmek için modelinizi eğitma konusundan bilgi edinmek için buraya dilersiniz.
Sonuçta elde edilen model nesnesi ITransformer arabirimini uygulayan. Diğer bir ifadeyle model giriş verilerini tahminlere dönüştürer.
IDataView predictions = model.Transform(inputData);
Modeli kullanma
Giriş verilerini toplu tahminlere veya aynı anda bir girişe dönüştürebilirsiniz. Ev fiyatı örneğinde, modeli değerlendirmek amacıyla toplu olarak ve tek tek yeni bir tahmin yapmak için her ikisini de yaptık. Şimdi tek tahminler yapmaya bakalım.
var size = new HouseData() { Size = 2.5F };
var predEngine = mlContext.CreatePredictionEngine<HouseData, Prediction>(model);
var price = predEngine.Predict(size);
yöntemi CreatePredictionEngine() bir giriş sınıfı ve bir çıkış sınıfı alır. Alan adları ve/veya kod öznitelikleri, model eğitimi ve tahmin sırasında kullanılan veri sütunlarının adlarını belirler. Daha fazla bilgi için bkz. Eğitilmiş bir modelle tahmin yapma.
Veri modelleri ve şema
ML.NET makine öğrenmesi işlem hattı, DataView nesneleridir.
İşlem hattında her dönüştürmenin bir giriş şeması (veri adları, türleri ve dönüşümün girişte görmeyi beklediğiniz boyutları) vardır; ve bir çıkış şeması (veri adları, türleri ve dönüştürmeden sonra dönüşümün ürettiği boyutlar).
İşlem hattında bir dönüştürmeden gelen çıkış şeması bir sonraki dönüştürmenin giriş şemasıyla eşleyenene kadar ML.NET bir özel durum oluşturur.
Veri görünümü nesnesinin sütunları ve satırları vardır. Her sütunun bir adı, türü ve uzunluğu var. Örneğin, ev fiyatı örneğinde giriş sütunları Boyut ve Fiyat'tır. Hem tür hem de vektör miktarları yerine skaler miktarlardır.

Tüm ML.NET algoritmaları vektör olan bir giriş sütununa bakar. Varsayılan olarak bu vektör sütunu Özellikler olarak çağrılır. Bu nedenle Size sütununu, ev fiyatı örneğimizde Özellikler adlı yeni bir sütuna dahil etmiş oluruz.
var pipeline = mlContext.Transforms.Concatenate("Features", new[] { "Size" })
Tüm algoritmalar ayrıca tahmin gerçekleştirdikten sonra yeni sütunlar oluşturur. Bu yeni sütunların sabit adları makine öğrenmesi algoritmasının türüne bağlıdır. Regresyon görevi için yeni sütunlardan birinin adı Puan'dır. Bu nedenle fiyat verilerimizi bu adla öznitelik olarak kullandık.
public class Prediction
{
[ColumnName("Score")]
public float Price { get; set; }
}
Farklı makine öğrenmesi görevlerinin çıkış sütunları hakkında daha fazla bilgi için Machine Learning bulabilirsiniz.
DataView nesnelerinin önemli bir özelliği, bunların yavaş olarak değerlendirilmeleridir. Veri görünümleri yalnızca model eğitimi, değerlendirme ve veri tahmini sırasında yüklenir ve bu görünümler üzerinde çalışır. ML.NET uygulamanızı yazarken ve test ederken, Visual Studio hata ayıklayıcısını kullanarak Önizleme yöntemini çağırarak herhangi bir veri görünümü nesnesine göz atabilirsiniz.
var debug = testPriceDataView.Preview();
Değişkenini hata debug ayıklayıcısında izleyebilir ve içeriğini incelersiniz. Önizleme yöntemini üretim kodunda kullanmayın çünkü performansı önemli ölçüde düşürebilir.
Model Dağıtımı
Gerçek hayattaki uygulamalarda model eğitim ve değerlendirme kodunuz tahmininize göre ayrı bir değere sahip olur. Aslında bu iki etkinlik genellikle ayrı ekipler tarafından gerçekleştirilir. Model geliştirme takımınız modeli tahmin uygulamasında kullanmak üzere kaydedebilir.
mlContext.Model.Save(model, trainingData.Schema,"model.zip");
Sonraki adımlar
Öğreticilerde daha gerçekçi veri kümeleriyle farklı makine öğrenmesi görevlerini kullanarak uygulama derlemeyi öğrenin.
Nasıl Kılavuzları'nın belirli konuları hakkında daha ayrıntılı bilgi edinmek için bkz..
Süper meraklısıysanız DOĞRUDAN API Başvurusu belgelerine göz atabilirsiniz.