ML.NET nedir ve nasıl çalışır?What is ML.NET and how does it work?

ML.NET, çevrimiçi veya çevrimdışı senaryolarda .NET uygulamalarına makine öğrenimi ekleme olanağı sunar.ML.NET gives you the ability to add machine learning to .NET applications, in either online or offline scenarios. Bu özellik sayesinde, uygulamanızın kullanabildiği verileri kullanarak otomatik tahminler yapabilirsiniz.With this capability, you can make automatic predictions using the data available to your application. Machine Learning uygulamaları, açık olarak programlanabilir olması yerine tahmine dayalı hale getirmek için verilerdeki desenleri kullanır.Machine learning applications make use of patterns in the data to make predictions rather than needing to be explicitly programmed.

Merkezi ML.NET, bir makine öğrenimi modelidir.Central to ML.NET is a machine learning model. Model, giriş verilerinizi bir tahmine dönüştürmek için gereken adımları belirtir.The model specifies the steps needed to transform your input data into a prediction. ML.NET ile, bir algoritma belirterek özel bir modeli eğitebilirsiniz veya önceden eğitilen TensorFlow ve ONNX modellerini içeri aktarabilirsiniz.With ML.NET, you can train a custom model by specifying an algorithm, or you can import pre-trained TensorFlow and ONNX models.

Bir modelinize sahip olduktan sonra, tahmine dayalı hale getirmek için uygulamanızı uygulamanıza ekleyebilirsiniz.Once you have a model, you can add it to your application to make the predictions.

ML.NET, .NET Core veya .NET Framework kullanarak Windows, Linux ve macOS üzerinde çalışır.ML.NET runs on Windows, Linux, and macOS using .NET Core, or Windows using .NET Framework. 64 bit tüm platformlarda desteklenir.64 bit is supported on all platforms. 32 bit, TensorFlow, LightGBM ve ONNX ile ilgili işlevler dışında Windows 'da desteklenir.32 bit is supported on Windows, except for TensorFlow, LightGBM, and ONNX-related functionality.

ML.NET ile yapabileceğiniz tahmin türlerine örnek olarak şunlar verilebilir:Examples of the type of predictions that you can make with ML.NET:

Sınıflandırma/kategori oluşturmaClassification/Categorization Müşteri geri bildirimini otomatik olarak pozitif ve negatif kategorilere bölünAutomatically divide customer feedback into positive and negative categories
Gerileme/sürekli değerleri tahmin etmeRegression/Predict continuous values Boyut ve konuma göre barındırıldığı fiyatlarını tahmin etmePredict the price of houses based on size and location
Anomali AlgılamaAnomaly Detection Sahte bankacılık işlemlerini AlgılaDetect fraudulent banking transactions
ÖnerilerRecommendations Çevrimiçi alışverişçilerin, önceki satın alımlarına göre satın almasını isteyebileceğiniz ürünleri önerinSuggest products that online shoppers may want to buy, based on their previous purchases
Zaman serisi/sıralı verilerTime series/sequential data Hava durumu/ürün satışları tahminini yapınForecast the weather/product sales
Görüntü sınıflandırmasıImage classification Tıbbi görüntülerde pathologies kategorilere ayırmaCategorize pathologies in medical images

Merhaba ML.NET dünyaHello ML.NET World

Aşağıdaki kod parçacığındaki kod, en basit ML.NET uygulamasını gösterir.The code in the following snippet demonstrates the simplest ML.NET application. Bu örnek, ev boyutunu ve fiyat verilerini kullanarak ev fiyatlarını tahmin etmek için bir doğrusal regresyon modeli oluşturur.This example constructs a linear regression model to predict house prices using house size and price data.

   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ışıCode workflow

Aşağıdaki diyagram, uygulama kodu yapısını, ayrıca model geliştirmenin yinelemeli işlemini temsil eder:The following diagram represents the application code structure, as well as the iterative process of model development:

  • Bir ıdataview nesnesinde eğitim verileri toplama ve yüklemeCollect and load training data into an IDataView object
  • Özellikleri ayıklamak ve makine öğrenimi algoritmasını uygulamak için bir işlem hattı belirtinSpecify a pipeline of operations to extract features and apply a machine learning algorithm
  • İşlem hattına sığdırma () yöntemini çağırarak bir modeli eğitmeTrain a model by calling Fit() on the pipeline
  • Modeli değerlendirin ve geliştirmeyi yineleyinEvaluate the model and iterate to improve
  • Modeli bir uygulamada kullanılmak üzere ikili biçime KaydetSave the model into binary format, for use in an application
  • Modeli bir ıranseski nesnesine geri yüklemeLoad the model back into an ITransformer object
  • CreatePredictionEngine. tahmin () öğesini çağırarak tahminleri yapınMake predictions by calling CreatePredictionEngine.Predict()

Veri oluşturma, işlem hattı geliştirme, model eğitimi, model değerlendirmesi ve model kullanımı bileşenleri dahil ML.NET uygulama geliştirme akışı

Bu kavramların biraz daha ayrıntılı bir şekilde bakalım.Let's dig a little deeper into those concepts.

Machine Learning modeliMachine learning model

ML.NET modeli, tahmin edilen çıkışa ulaşmak üzere giriş verilerinizde gerçekleştirilecek dönüşümleri içeren bir nesnedir.An ML.NET model is an object that contains transformations to perform on your input data to arrive at the predicted output.

TemelBasic

En temel model, yukarıdaki ev fiyat örneğinde olduğu gibi, bir sürekli miktarın birbiriyle orantılı olduğu iki boyutlu doğrusal regresyon olur.The most basic model is two-dimensional linear regression, where one continuous quantity is proportional to another, as in the house price example above.

Sapma ve ağırlık parametrelerine sahip doğrusal regresyon modeli

Model yalnızca: $Price = b + size * w $.The model is simply: $Price = b + Size * w$. $B $ ve $w $ parametreleri, bir dizi (boyut, Fiyat) çiftleriyle bir satıra göre tahmin edilir.The parameters $b$ and $w$ are estimated by fitting a line on a set of (size, price) pairs. Modelin parametrelerini bulmak için kullanılan verilere eğitim verileridenir.The data used to find the parameters of the model is called training data. Machine Learning modelinin girişleri Özelliklerolarak adlandırılır.The inputs of a machine learning model are called features. Bu örnekte, $Size $ tek özelliktir.In this example, $Size$ is the only feature. Bir makine öğrenimi modelini eğitebilmeniz için kullanılan taban-Truth değerlerine Etiketlerdenir.The ground-truth values used to train a machine learning model are called labels. Burada eğitim verileri kümesindeki $Price $ değerleri etiketlerdir.Here, the $Price$ values in the training data set are the labels.

Daha karmaşıkMore complex

Daha karmaşık bir model, işlem metni açıklamasını kullanarak finansal işlemleri kategoriler halinde sınıflandırır.A more complex model classifies financial transactions into categories using the transaction text description.

Her işlem açıklaması, gereksiz sözcük ve karakterleri kaldırarak ve sözcük ve karakter kombinasyonlarını sayarak bir özellik kümesine bölünür.Each transaction description is broken down into a set of features by removing redundant words and characters, and counting word and character combinations. Özellik kümesi, eğitim verilerinde kategori kümesini temel alan doğrusal bir modeli eğiteetmek için kullanılır.The feature set is used to train a linear model based on the set of categories in the training data. Daha benzer yeni bir açıklama, eğitim kümesindeki diğer bir deyişle, aynı kategoriye daha büyük olasılıkla atanır.The more similar a new description is to the ones in the training set, the more likely it will be assigned to the same category.

Metin sınıflandırması modeli

Hem ev fiyat modeli hem de metin sınıflandırma modeli Doğrusal modellerdir.Both the house price model and the text classification model are linear models. Verilerinizin yapısına ve çözmeyle ilgili soruna bağlı olarak, karar ağacı modellerini, Genelleştirilmiş ek modellerini ve diğerlerini de kullanabilirsiniz.Depending on the nature of your data and the problem you are solving, you can also use decision tree models, generalized additive models, and others. Görevler' de modeller hakkında daha fazla bilgi edinebilirsiniz.You can find out more about the models in Tasks.

Veri hazırlamaData preparation

Çoğu durumda, kullanılabilir olan veriler makine öğrenimi modelini eğitmek için doğrudan kullanılmaya uygun değildir.In most cases, the data that you have available isn't suitable to be used directly to train a machine learning model. Kuruluşunuzun parametrelerini bulmak için kullanılmadan önce ham verilerin hazırlanması veya önceden işlenmesi gerekir.The raw data needs to be prepared, or pre-processed, before it can be used to find the parameters of your model. Verilerinizin dize değerlerinden sayısal bir gösterimine dönüştürülmesi gerekebilir.Your data may need to be converted from string values to a numerical representation. Giriş verilerinizde gereksiz bilgilere sahip olabilirsiniz.You might have redundant information in your input data. Giriş verilerinizin boyutlarını azaltmanız veya genişletmeniz gerekebilir.You may need to reduce or expand the dimensions of your input data. Verilerinizin normalleştirilmesi veya ölçeklendirilmesi gerekebilir.Your data might need to be normalized or scaled.

Ml.net öğreticileri , belirli makine öğrenimi 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 öğretin.The ML.NET tutorials teach you about different data processing pipelines for text, image, numerical, and time-series data used for specific machine learning tasks.

Verilerinizi hazırlamak , veri hazırlığını daha genel olarak nasıl uygulayacağınızı gösterir.How to prepare your data shows you how to apply data preparation more generally.

Kaynaklar bölümünde tüm kullanılabilir dönüşümlerinin bir özetini bulabilirsiniz.You can find an appendix of all of the available transformations in the resources section.

Modeli değerlendirmeModel evaluation

Modelinizi eğittikten sonra, gelecekteki tahminleri ne kadar iyi hale getirmek istediğinizi nasıl anlarsınız?Once you have trained your model, how do you know how well it will make future predictions? ML.NET ile modelinizi bazı yeni test verileri için değerlendirebilirsiniz.With ML.NET, you can evaluate your model against some new test data.

Her makine öğrenimi görevi türü, modelin doğruluğunu ve duyarlığını test veri kümesine karşı değerlendirmek için kullanılan ölçümlere sahiptir.Each type of machine learning task has metrics used to evaluate the accuracy and precision of the model against the test data set.

Evin fiyat örneğimiz için regresyon görevini kullandık.For our house price example, we used the Regression task. Modeli değerlendirmek için, özgün örneğe aşağıdaki kodu ekleyin.To evaluate the model, add the following code to the original sample.

        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 bir şekilde olduğunu ve tahmin edilen çıkış ile test çıkışı arasındaki bağıntıdan yüksek olduğunu söyler.The evaluation metrics tell you that the error is low-ish, and that correlation between the predicted output and the test output is high. Bu çok kolay!That was easy! Gerçek örneklerde, iyi model ölçümleri elde etmek için daha fazla ayarlama yapılır.In real examples, it takes more tuning to achieve good model metrics.

ML.NET mimarisiML.NET architecture

Bu bölümde, ML.NET mimari desenlerine gideceğiz.In this section, we go through the architectural patterns of ML.NET. Deneyimli bir .NET geliştiricisiyseniz, bu desenlerden bazıları size tanıdık gelecektir ve bazıları daha az tanıdık olacaktır.If you are an experienced .NET developer, some of these patterns will be familiar to you, and some will be less familiar. Sıkı bir şekilde tutun.Hold tight, while we dive in!

Bir ML.NET uygulaması MLContext nesnesiyle başlar.An ML.NET application starts with an MLContext object. Bu tekil nesne kataloglariçerir.This singleton object contains catalogs. Katalog, veri yükleme ve kaydetme, dönüşümler, tracılar ve model işlemi bileşenlerine yönelik bir fabrikadır.A catalog is a factory for data loading and saving, transforms, trainers, and model operation components. Her Katalog nesnesi farklı bileşen türlerini oluşturma yöntemlerine sahiptir:Each catalog object has methods to create the different types of components:

Veri yükleme ve kaydetmeData loading and saving DataOperationsCatalog
Veri hazırlamaData preparation TransformsCatalog
Eğitim algoritmalarıTraining algorithms İkili sınıflandırmaBinary classification BinaryClassificationCatalog
birden çok Lass sınıflandırmasıMulticlass classification MulticlassClassificationCatalog
Anomali algılamaAnomaly detection AnomalyDetectionCatalog
KümelemeClustering ClusteringCatalog
Tahmin etmeForecasting ForecastingCatalog
SıralamasınaRanking RankingCatalog
RegresyonRegression RegressionCatalog
ÖneriRecommendation RecommendationCatalog Microsoft.ML.Recommender NuGet paketini ekleyinadd the Microsoft.ML.Recommender NuGet package
Zaman serisiTimeSeries TimeSeriesCatalog Microsoft.ML.TimeSeries NuGet paketini ekleyinadd the Microsoft.ML.TimeSeries NuGet package
Model kullanımıModel usage ModelOperationsCatalog

Yukarıdaki kategorilerin her birinde oluşturma yöntemlerine gidebilirsiniz.You can navigate to the creation methods in each of the above categories. Visual Studio 'yu kullanarak kataloglar IntelliSense aracılığıyla gösterilir.Using Visual Studio, the catalogs show up via IntelliSense.

Gerileme Eğitiminleri için IntelliSense

İşlem hattını oluşturmaBuild the pipeline

Her kataloğun içinde bir genişletme yöntemleri kümesidir.Inside each catalog is a set of extension methods. Bir eğitim işlem hattı oluşturmak için uzantı yöntemlerinin nasıl kullanıldığına göz atalım.Let's look at how extension methods are used to create a training pipeline.

    var pipeline = mlContext.Transforms.Concatenate("Features", new[] { "Size" })
        .Append(mlContext.Regression.Trainers.Sdca(labelColumnName: "Price", maximumNumberOfIterations: 100));

Kod parçacığında, Concatenate ve Sdca her ikisi de katalogdaki yöntemlerdir.In the snippet, Concatenate and Sdca are both methods in the catalog. Bunlar, işlem hattının sonuna eklenen bir ıestimator nesnesi oluşturur.They each create an IEstimator object that is appended to the pipeline.

Bu noktada, nesneler yalnızca oluşturulur.At this point, the objects are created only. Yürütme yapılmadı.No execution has happened.

Modeli eğitmeTrain the model

İşlem hattındaki nesneler oluşturulduktan sonra, modeli eğitebilmeniz için veriler kullanılabilir.Once the objects in the pipeline have been created, data can be used to train the model.

    var model = pipeline.Fit(trainingData);

Fit() çağırmak, modelin parametrelerini tahmin etmek için giriş eğitim verilerini kullanır.Calling Fit() uses the input training data to estimate the parameters of the model. Bu, modeli eğitme olarak bilinir.This is known as training the model. Yukarıdaki doğrusal regresyon modelinin iki model parametresi olduğunu unutmayın: sapma ve Ağırlık.Remember, the linear regression model above had two model parameters: bias and weight. Fit() çağrısından sonra parametrelerin değerleri bilinmektedir.After the Fit() call, the values of the parameters are known. Çoğu modelde bundan çok daha fazla parametre olacaktır.Most models will have many more parameters than this.

Modelinizi eğitmehakkında daha fazla bilgi için model eğitimi hakkında daha fazla bilgi edinebilirsiniz.You can learn more about model training in How to train your model.

Elde edilen model nesnesi ITransformer arabirimini uygular.The resulting model object implements the ITransformer interface. Diğer bir deyişle, model giriş verilerini tahmine göre dönüştürür.That is, the model transforms input data into predictions.

   IDataView predictions = model.Transform(inputData);

Modeli kullanmaUse the model

Giriş verilerini toplu olarak veya bir girişte tek seferde tahmin edilecek şekilde dönüştürebilirsiniz.You can transform input data into predictions in bulk, or one input at a time. Ev fiyatı örneğinde, her ikisi de, modeli değerlendirmek amacıyla toplu olarak ve yeni bir tahmin oluşturmak için bir seferde bir kez yaptık.In the house price example, we did both: in bulk for the purpose of evaluating the model, and one at a time to make a new prediction. Tek tahmin yapmaya bakalım.Let's look at making single predictions.

    var size = new HouseData() { Size = 2.5F };
    var predEngine = mlContext.CreatePredictionEngine<HouseData, Prediction>(model);
    var price = predEngine.Predict(size);

CreatePredictionEngine() yöntemi bir giriş sınıfı ve bir çıkış sınıfı alır.The CreatePredictionEngine() method takes an input class and an output class. Alan adları ve/veya kod öznitelikleri, model eğitimi ve tahmin sırasında kullanılan veri sütunlarının adlarını belirlenir.The field names and/or code attributes determine the names of the data columns used during model training and prediction. Nasıl yapılır bölümünde tek bir tahmin yapma hakkında bilgi edinebilirsiniz.You can read about How to make a single prediction in the How-to section.

Veri modelleri ve şemaData models and schema

Bir ML.NET Machine Learning işlem hattının Core 'da DataView nesneleri bulunur.At the core of an ML.NET machine learning pipeline are DataView objects.

İşlem hattındaki her dönüşümde bir giriş şeması (veri adları, türler ve boyutlar, dönüştürmenin girişte görmeyi beklediği boyutlar) vardır; ve bir çıkış şeması (veri adları, türler ve dönüşümün dönüşümden sonra ürettiği boyutlar).Each transformation in the pipeline has an input schema (data names, types, and sizes that the transform expects to see on its input); and an output schema (data names, types, and sizes that the transform produces after the transformation). Aşağıdaki belge, ıdataview arabiriminin ve tür sistemininayrıntılı bir açıklamasını sunmaktadır.The following document provides an in-depth explanation of the IDataView interface and its type system.

İşlem hattındaki bir dönüşümden çıkış şeması, sonraki dönüşümün giriş şemasıyla eşleşmiyorsa, ML.NET bir özel durum oluşturur.If the output schema from one transform in the pipeline doesn't match the input schema of the next transform, ML.NET will throw an exception.

Veri görünümü nesnesinin sütunları ve satırları vardır.A data view object has columns and rows. Her sütunun bir adı ve bir türü ve uzunluğu vardır.Each column has a name and a type and a length. Örneğin, ev fiyatı örnekteki giriş sütunları Boyut ve fiyattır.For example, the input columns in the house price example are Size and Price. Bunlar her ikisi de aynıdır ve vektörler yerine skaler miktarlardır.They are both type and they are scalar quantities rather than vector ones.

ML.NET veri görünümü örneği, ev fiyatı tahmin verileri

Tüm ML.NET algoritmaları vektör olan bir giriş sütununu arar.All ML.NET algorithms look for an input column that is a vector. Varsayılan olarak bu vektör sütununa Özelliklerdenir.By default this vector column is called Features. Bu nedenle, Boyut sütununu, evin fiyat örneğimizde Özellikler adlı yeni bir sütuna bitiştirtik.This is why we concatenated the Size column into a new column called Features in our house price example.

   var pipeline = mlContext.Transforms.Concatenate("Features", new[] { "Size" })

Tüm algoritmalar Ayrıca bir tahmin gerçekleştirildikten sonra yeni sütunlar oluşturur.All algorithms also create new columns after they have performed a prediction. Bu yeni sütunların sabit adları makine öğrenimi algoritmasının türüne bağlıdır.The fixed names of these new columns depend on the type of machine learning algorithm. Regresyon görevi için, yeni sütunlardan birine puandenir.For the regression task, one of the new columns is called Score. Bu nedenle fiyat verilerimizi bu adla ekledik.This is why we attributed our price data with this name.

    public class Prediction
    {
        [ColumnName("Score")]
        public float Price { get; set; }
    }

Machine Learning görevler kılavuzunda, farklı makine öğrenimi görevlerinin çıkış sütunları hakkında daha fazla bilgi edinebilirsiniz.You can find out more about output columns of different machine learning tasks in the Machine Learning Tasks guide.

DataView nesnelerinin önemli bir özelliği, geçdeğerlendirilmesinden kaynaklanmaktadır.An important property of DataView objects is that they are evaluated lazily. Veri görünümleri yalnızca model eğitimi ve değerlendirmesi sırasında yüklenir ve üzerinde çalıştırılır ve veri tahmini yapılır.Data views are only loaded and operated on during model training and evaluation, and data prediction. ML.NET uygulamanızı yazarken ve test ederken, Önizleme yöntemini çağırarak herhangi bir veri görünümü nesnesine bir göz atma işlemleri yapmak Için Visual Studio hata ayıklayıcısını kullanabilirsiniz.While you are writing and testing your ML.NET application, you can use the Visual Studio debugger to take a peek at any data view object by calling the Preview method.

    var debug = testPriceDataView.Preview();

Hata ayıklayıcıda debug değişkenini izleyebilir ve içeriğini inceleyebilirsiniz.You can watch the debug variable in the debugger and examine its contents. Performansı önemli ölçüde düşürür, üretim kodunda önizleme yöntemini kullanmayın.Do not use the Preview method in production code, as it significantly degrades performance.

Model dağıtımıModel Deployment

Gerçek yaşam uygulamalarında, model eğitimi ve değerlendirme kodunuz tahmininizden ayrı olacaktır.In real-life applications, your model training and evaluation code will be separate from your prediction. Aslında, bu iki etkinlik genellikle ayrı takımlar tarafından gerçekleştirilir.In fact, these two activities are often performed by separate teams. Model geliştirme ekibiniz, modeli tahmin uygulamasında kullanım için kaydedebilir.Your model development team can save the model for use in the prediction application.

   mlContext.Model.Save(model, trainingData.Schema,"model.zip");

Sonraki adımlarNext steps