Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Bu öğreticide, ML.NET'i kullanarak
Bu öğreticide şunların nasıl yapılacağını öğreneceksiniz:
- Sorunu anlama
- Uygun makine öğrenmesi görevini seçin
- Verileri hazırlama
- Verileri yükleme ve dönüştürme
- Öğrenme algoritması seçme
- Modeli eğitin
- Tahminler için modeli kullanma
Önkoşullar
Sorunu anlama
Bu sorun, iris çiçek kümesini çiçek özelliklerine göre farklı gruplara bölmekle ilgili. Bu özellikler sepalin uzunluğu ve genişliği ile petalin uzunluğu ve genişliğidir. Bu öğreticide, her çiçeğin türünün bilinmediğini varsayalım. Özelliklerden bir veri kümesinin yapısını öğrenmek ve bir veri örneğinin bu yapıya nasıl uyduğunu tahmin etmek istiyorsunuz.
Uygun makine öğrenmesi görevini seçin
Her çiçeğin hangi gruba ait olduğunu bilmediğiniz için denetimsiz makine öğrenmesi
Konsol uygulaması oluşturma
"IrisFlowerClustering" adlı bir C# Konsol Uygulaması oluşturun. sonraki
düğmesine tıklayın. Kullanılacak çerçeve olarak .NET 8'i seçin. Oluştur düğmesine tıklayın.
Veri kümesini ve model dosyalarını depolamak için projenizde Data adlı bir dizin oluşturun:
Çözüm Gezgini'nde projeye sağ tıklayın ve Ekle>Yeni Klasörseçin. "Veri" yazın ve seçin, ardındangirin.
Microsoft.ML NuGet paketini yükleyin:
Not (Hatırlatma)
Bu örnek, aksi belirtilmedikçe bahsedilen NuGet paketlerinin en son kararlı sürümünü kullanır.
Çözüm Gezginibölümünde projeye sağ tıklayın ve NuGet Paketlerini Yönetseçin. Paket kaynağı olarak "nuget.org" öğesini seçin, Gözat sekmesini seçin, Microsoft.ML arayın ve Yükle'yi seçin. Değişiklikleri Önizleme iletişim
Tamam düğmesini seçin ve listelenen paketlerin lisans koşullarını kabul ediyorsanızLisans Kabulü iletişim kutusundakiKabul Ediyorum düğmesini seçin.
Verileri hazırlama
iris.data veri kümesini indirin ve önceki adımda oluşturduğunuz Data klasörüne kaydedin. iris veri kümesi hakkında daha fazla bilgi için Wikipedia sayfası
Iris çiçek veri kümesi sayfasına ve veri kümesinin kaynağı olan Iris Veri Kümesi sayfasına bakın.Çözüm Gezgini'nde iris.data dosyasına sağ tıklayın ve Özellikler'i seçin. Gelişmişaltında, Çıktı Dizinine Kopyala değerini Daha Yeniyse Kopyalaolarak değiştirin.
iris.data dosyası aşağıdakileri temsil eden beş sütun içerir:
- santimetre cinsinden sepal uzunluk
- santimetre cinsinden sepal genişlik
- santimetre cinsinden petal uzunluğu
- santimetre cinsinden taçyaprağı genişliği
- iris çiçeği türü
Kümeleme örneği için bu öğreticide son sütun yoksayılır.
Veri sınıfları oluşturma
Giriş verileri ve tahminler için sınıflar oluşturun:
Çözüm Gezgini'nde projeye sağ tıklayın ve ardından >Yeni ÖğeEkle'yi seçin.
Yeni Öğe Ekle iletişim kutusunda Sınıfseçin ve Adı alanınıIrisData.cs olarak değiştirin. Ardından Ekleöğesini seçin.Yeni dosyaya aşağıdaki
usingyönergesini ekleyin:using Microsoft.ML.Data;
Mevcut sınıf tanımını kaldırın ve IrisData.cs dosyasına IrisData ve ClusterPredictionsınıflarını tanımlayan aşağıdaki kodu ekleyin:
public class IrisData
{
[LoadColumn(0)]
public float SepalLength;
[LoadColumn(1)]
public float SepalWidth;
[LoadColumn(2)]
public float PetalLength;
[LoadColumn(3)]
public float PetalWidth;
}
public class ClusterPrediction
{
[ColumnName("PredictedLabel")]
public uint PredictedClusterId;
[ColumnName("Score")]
public float[]? Distances;
}
IrisData giriş veri sınıfıdır ve veri kümesindeki her özellik için tanımlara sahiptir. Veri kümesi dosyasındaki kaynak sütunların dizinlerini belirtmek için LoadColumn özniteliğini kullanın.
ClusterPrediction sınıfı, bir IrisData örneğine uygulanan kümeleme modelinin çıkışını temsil eder.
PredictedClusterId ve Distances alanlarını sırasıyla PredictedLabel ve Score sütunlarına bağlamak için ColumnName özniteliğini kullanın. Kümeleme görevi söz konusu olduğunda bu sütunlar şu anlama gelir:
- PredictedLabel sütunu, tahmin edilen kümenin kimliğini içerir.
- Score sütunu, küme merkezlerine olan Öklid uzaklıklarının karelerine sahip bir dizi içerir. Dizi uzunluğu küme sayısına eşittir.
Not
Giriş ve tahmin veri sınıflarındaki kayan nokta değerlerini göstermek için float türünü kullanın.
Veri ve model yollarını tanımlama
Program.cs dosyasına geri dönün ve veri kümesi dosyasının yollarını tutmak ve modeli kaydetmek için dosyaya iki alan ekleyin:
-
_dataPath, modeli eğitmek için kullanılan veri kümesini içeren dosyanın yolunu içerir. -
_modelPath, eğitilen modelin depolandığı dosyanın yolunu içerir.
Bu yolları belirtmek için using yönergelerinin altına aşağıdaki kodu ekleyin:
string _dataPath = Path.Combine(Environment.CurrentDirectory, "Data", "iris.data");
string _modelPath = Path.Combine(Environment.CurrentDirectory, "Data", "IrisClusteringModel.zip");
ML bağlamı oluşturma
aşağıdaki ek using yönergelerini Program.cs dosyasının en üstüne ekleyin:
using Microsoft.ML;
using IrisFlowerClustering;
Console.WriteLine("Hello World!"); satırını aşağıdaki kodla değiştirin:
var mlContext = new MLContext(seed: 0);
Microsoft.ML.MLContext sınıfı, makine öğrenmesi ortamını temsil eder ve veri yükleme, model eğitimi, tahmin ve diğer görevler için günlük kaydı yapma ve giriş noktaları sağlama mekanizmaları sunar. Bu, Entity Framework'te DbContext kullanmakla kavramsal olarak karşılaştırılabilir.
Veri yüklemeyi ayarlama
Veri yükleme yolunu ayarlamak için aşağıdaki kodu MLContext altına ekleyin:
IDataView dataView = mlContext.Data.LoadFromTextFile<IrisData>(_dataPath, hasHeader: false, separatorChar: ',');
Genel MLContext.Data.LoadFromTextFile uzantısı yöntemi sağlanan IrisData türünden veri kümesi şemasını çıkarsar ve transformatörler için giriş olarak kullanılabilecek IDataView döndürür.
Öğrenme işlem hattı oluşturma
Bu öğreticide, kümeleme görevinin öğrenme işlem hattı aşağıdaki iki adımdan oluşur:
- yüklenen sütunları kümeleme eğitmeni tarafından kullanılan bir Özellikler sütununa birleştirin;
- k-means++ kümeleme algoritmasını kullanarak modeli eğitmek için bir KMeansTrainer eğitmeni kullanın.
Verileri yükledikten sonra aşağıdakileri ekleyin:
string featuresColumnName = "Features";
var pipeline = mlContext.Transforms
.Concatenate(featuresColumnName, "SepalLength", "SepalWidth", "PetalLength", "PetalWidth")
.Append(mlContext.Clustering.Trainers.KMeans(featuresColumnName, numberOfClusters: 3));
Kod, veri kümesinin üç kümeye bölünmesi gerektiğini belirtir.
Modeli eğitin
Önceki bölümlerde eklenen adımlar işlem hattını eğitim için hazırlamıştır, ancak hiçbiri yürütüllenmemiştir. Veri yükleme ve model eğitimi gerçekleştirmek için dosyanın en altına aşağıdaki satırı ekleyin:
var model = pipeline.Fit(dataView);
Modeli kaydetme
Bu noktada, mevcut veya yeni .NET uygulamalarınızla tümleştirilebilen bir modeliniz vardır. Modelinizi bir .zip dosyasına kaydetmek için aşağıdaki kodu Fit yöntemini çağırarak ekleyin:
using (var fileStream = new FileStream(_modelPath, FileMode.Create, FileAccess.Write, FileShare.Write))
{
mlContext.Model.Save(model, dataView.Schema, fileStream);
}
Tahminler için modeli kullanma
Tahminler yapmak için transformatör işlem hattı aracılığıyla giriş türünün örneklerini alan ve çıkış türünün örneklerini üreten PredictionEngine<TSrc,TDst> sınıfını kullanın. Bu sınıfın bir örneğini oluşturmak için aşağıdaki satırı ekleyin:
var predictor = mlContext.Model.CreatePredictionEngine<IrisData, ClusterPrediction>(model);
PredictionEngine, tek bir veri örneği üzerinde tahmin gerçekleştirmenizi sağlayan kullanışlı bir API'dir.
PredictionEngine iş parçacığı güvenli değildir. Tek iş parçacıklı veya prototip ortamlarda kullanılması uygundur. Üretim ortamlarında performansı ve iş parçacığı güvenliğini artırmak için, uygulamanız genelinde kullanılabilecek PredictionEngine nesnelerden ObjectPool oluşturan PredictionEnginePool hizmetini kullanın. ASP.NET Core Web API'
Not
PredictionEnginePool hizmet uzantısı şu anda önizleme aşamasındadır.
Test verileri örneklerini barındıracak TestIrisData sınıfını oluşturun:
Çözüm Gezginiiçinde projeye sağ tıklayın ve Yeni Öğe Ekle>'iseçin.
Yeni Öğe Ekle iletişim kutusunda Sınıfseçin ve Adı alanınıTestIrisData.cs olarak değiştirin. Ardından Ekleöğesini seçin.sınıfını aşağıdaki örnekte olduğu gibi statik olacak şekilde değiştirin:
static class TestIrisData
Bu öğreticide bu sınıfta bir iris veri örneği tanıtılır. Modelle deneme yapmak için başka senaryolar da ekleyebilirsiniz.
TestIrisData sınıfına aşağıdaki kodu ekleyin:
internal static readonly IrisData Setosa = new IrisData
{
SepalLength = 5.1f,
SepalWidth = 3.5f,
PetalLength = 1.4f,
PetalWidth = 0.2f
};
Belirtilen öğenin ait olduğu kümeyi bulmak için Program.cs dosyasına dönün ve dosyanın en altına aşağıdaki kodu ekleyin:
var prediction = predictor.Predict(TestIrisData.Setosa);
Console.WriteLine($"Cluster: {prediction.PredictedClusterId}");
Console.WriteLine($"Distances: {string.Join(" ", prediction.Distances ?? Array.Empty<float>())}");
Belirtilen veri örneğini hangi kümenin içerdiğini ve bu örnekten küme centroidlerine uzaklıkların karesini görmek için programı çalıştırın. Sonuçlarınız aşağıdakine benzer olmalıdır:
Cluster: 2
Distances: 11.69127 0.02159119 25.59896
Tebrikler! Artık iris kümelemeye yönelik bir makine öğrenmesi modelini başarıyla oluşturdunuz ve tahminlerde bulunmak için kullandınız. Bu öğreticinin kaynak kodunu dotnet/samples GitHub deposunda bulabilirsiniz.
Sonraki adımlar
Bu öğreticide şunların nasıl yapılacağını öğrendiniz:
- Sorunu anlama
- Uygun makine öğrenmesi görevini seçin
- Verileri hazırlama
- Verileri yükleme ve dönüştürme
- Öğrenme algoritması seçme
- Modeli eğitin
- Tahminler için modeli kullanma
Öğrenmeye devam etmek ve daha fazla örnek bulmak için dotnet/machinelearning GitHub deposuna göz atın.
Dotnet/machinelearning GitHub deposunu