Developing Machine Learning Applications with ML.NET 7/25/2019 4:51 PM Developing Machine Learning Applications with ML.NET Emrah Uslu emrah.uslu@peakup.org PEAKUP .NET Yazılım Geliştirici Konferansı 3 Kasım 2018 // İstanbul © Microsoft Corporation. All rights reserved. MICROSOFT MAKES NO WARRANTIES, EXPRESS, IMPLIED OR STATUTORY, AS TO THE INFORMATION IN THIS PRESENTATION.
Her şeyi geliştirebildiğimiz platform MASAÜSTÜ WEB BULUT MOBİL OYUN NESNELERİN İNTERNETİ MAKİNE ÖĞRENMESİ .NET
Makine Öğrenmesi “Programlanamayanı Programla” { { T-Shirt’ün Fiyatı? Bu bir yüz mü? f(x) f(x) “Harika düğmeleri var… uzun kollu …hem gündelik hayatta hem işe giderken için giyilebilir”
Makine Öğrenmesi “Programlanamayanı Programla” { Makine Öğrenmesi veriyi kullanarak Yüz Yüz f(x) Model Yüz değil Yüz değil oluşturur
Bazı Makine Öğrenmesi Görevleri… Bu A’mı B’mi? Ne kadar? Kaç tane? Nasıl bir dağılıma sahip? Sınıflandırma Regresyon Kümeleme
.NET yazılım ekibi Makine Öğrenmesini nasıl kullanıyor? 7/25/2019 4:51 PM .NET yazılım ekibi Makine Öğrenmesini nasıl kullanıyor? © Microsoft Corporation. All rights reserved. MICROSOFT MAKES NO WARRANTIES, EXPRESS, IMPLIED OR STATUTORY, AS TO THE INFORMATION IN THIS PRESENTATION.
Problemlerin Sınıflandırılması şu 3 problemi çözüyor Bildirilen Problemlerin Sınıflandırılması Uçuş Gecikmeleri Satış Tahmini
ML.NET kendi makine öğrenmesi modellerinizi oluşturmanızı sağlar. 7/25/2019 4:51 PM ML.NET NEDİR? 01 ML.NET kendi makine öğrenmesi modellerinizi oluşturmanızı sağlar. © Microsoft Corporation. All rights reserved. MICROSOFT MAKES NO WARRANTIES, EXPRESS, IMPLIED OR STATUTORY, AS TO THE INFORMATION IN THIS PRESENTATION.
Hazır ML Modelleri (Azure Cognitive Services) Örneğin Azure Cognitive servislerini kullanarak Metinsel Duygu Analizi TextAnalyticsAPI client = new TextAnalyticsAPI(); client.AzureRegion = AzureRegions.Westus; client.SubscriptionKey = "1bf33391DeadFish"; client.Sentiment( new MultiLanguageBatchInput( new List<MultiLanguageInput>() { new MultiLanguageInput("en","0", "This is a great vacuum cleaner") })); Vision Speech Language Labs Knowledge Search 96% pozitif Programlama Dilleri (C#, VB, F#) Easy / Less Control Full Control / Harder
Hazır ML Modelleri (Azure Cognitive Services) Örneğin Azure Cognitive servislerini kullanarak Metinsel Duygu Analizi TextAnalyticsAPI client = new TextAnalyticsAPI(); client.AzureRegion = AzureRegions.Westus; client.SubscriptionKey = "1bf33391DeadFish"; client.Sentiment( new MultiLanguageBatchInput( new List<MultiLanguageInput>() { new MultiLanguageInput("en","0", "This vacuum cleaner sucks so much dirt") })); Vision Speech Language Labs Knowledge Search 9% pozitif Programlama Dilleri (C#, VB, F#) Easy / Less Control Full Control / Harder
Kendi ML Modellerinizi Oluşturun Veriyi Hazırla Derle & Eğit Çalıştır Full Control / Harder Easy / Less Control
Kendi ML Modellerinizi Oluşturun Var olan Çözümler Python ve R, Makine Öğrenmesi ve Veri Bilimi için ideal ve harika diller ML.NET, bunu alıştığımız araçlar ile yapmanın başka bir yolunu sunuyor. .NET, şu anda makine öğrenmesi temelleri ve kütüphaneleri bakımından yetersiz. ML.NET, Azure Machine Learning ve Cognitive Services’in sağladığı deneyimi tamamlıyor. Kendi modelini oluştur Code First yaklaşımı AppLocal Model ile Dağıtım Less Control / Easy
Yaklaşımını benimsiyor. 7/25/2019 4:51 PM ML.NET NEDİR? 02 ML.NET framework first Yaklaşımını benimsiyor. © Microsoft Corporation. All rights reserved. MICROSOFT MAKES NO WARRANTIES, EXPRESS, IMPLIED OR STATUTORY, AS TO THE INFORMATION IN THIS PRESENTATION.
Makine Öğrenmesi için Yazılım Geliştirici dostu API’ler ML.NET, framework first yaklaşımını benimsiyor Makine Öğrenmesi için Yazılım Geliştirici dostu API’ler Eğitim Tüketim Extensions Transforms Learners Misc. Natural Text Linear ML Data framework Schema Boosted Trees Evaluators Missing values Svm Calibrators Categorical K-Means Data loaders Normalization Feature Selection
ML.NET, büyük ölçekli Microsoft ürünlerinde kendini kanıtladı. 7/25/2019 4:51 PM ML.NET NEDİR? 03 ML.NET, büyük ölçekli Microsoft ürünlerinde kendini kanıtladı. © Microsoft Corporation. All rights reserved. MICROSOFT MAKES NO WARRANTIES, EXPRESS, IMPLIED OR STATUTORY, AS TO THE INFORMATION IN THIS PRESENTATION.
Microsoft’da ML.NET Kullanımı Bing Ads Excel Power Point Windows 10 + more!
Açık Kaynak Kodlu & Çoklu Platform Desteği 7/25/2019 4:51 PM ML.NET NEDİR? 04 ML.NET Açık Kaynak Kodlu & Çoklu Platform Desteği © Microsoft Corporation. All rights reserved. MICROSOFT MAKES NO WARRANTIES, EXPRESS, IMPLIED OR STATUTORY, AS TO THE INFORMATION IN THIS PRESENTATION.
ML.NET 0.6 (Ön İzleme) .NET Yazılım Geliştiriciler için yapılmış Makine Öğrenmesi Framework’ü Windows, Linux ve macOS Desteği Kendi Modelini Geliştir Yazılım Geliştirici Odaklı Kendini Kanıtlamış & Genişletilebilir Açık Kaynak Kodlu https://github.com/dotnet/machinelearning
https://github.com/dotnet/machinelearning/
GitHub Problem Etiketleme 7/25/2019 4:51 PM © Microsoft Corporation. All rights reserved. MICROSOFT MAKES NO WARRANTIES, EXPRESS, IMPLIED OR STATUTORY, AS TO THE INFORMATION IN THIS PRESENTATION.
GitHub Problem Etiketleme (Sınıflandırma Problemi) A’mı B’mi? Bildirilen bu problem, hangi etiket ile işaretlenmeli?
ML Modelleri (GitHub Problem Sınıflandırma)
ML Modelleri (GitHub Problem Sınıflandırma) Özellikler Başlık Açıklama
ML Modelleri (GitHub Problem Sınıflandırma) Etiketler
ML Modelleri (GitHub Problem Sınıflandırma) Modelin Eğitilmesi Özellikler Başlık Açıklama Eğit() Model Etiketler
ML Modelleri (GitHub Problem Sınıflandırma) Tahminleme Model.Tahminle() Özellikler Tahmin Edilen Etiket Başlık Açıklama
Uçtan Uca Makine Öğrenmesi İş Akışı Veriyi Yükle Özellikleri Belirle Modeli Eğit Modeli Değerlendir Modeli Tüket ML Pipeline etiketler + düz metin etiketler + özellik vektörü model
Uçtan Uca Makine Öğrenmesi İş Akışı Veriyi Yükle Özellikleri Belirle Modeli Eğit Modeli Değerlendir Modeli Tüket ML Pipeline etiketler + düz metin etiketler + özellik vektörü model Vee... LearningPipelines! ML.NET’de
Veri Yükle (ML.NET’de Pipeline) GitHub kayıtlarını C# ile API kullanarak topla corefx_issues.tsv (16bin kayıtları, Ağustos 2014 – Nisan 2018) Veri Topla Özellikleri Belirle Modeli Eğit Modeli Değerlendir Modeli Tüket
Veri Yükle (ML.NET’de Pipeline) var pipeline = new LearningPipeline(); Veri Topla Özellikleri Belirle Modeli Eğit Modeli Değerlendir Modeli Tüket
Özellikleri Belirle (ML.NET’de Pipeline) var pipeline = new LearningPipeline(); pipeline.Add(new TextLoader<CoreFxIssue>("../corefx_issues.tsv", useHeader: true)); class CoreFxIssue { [Column(ordinal: "0")] public string ID; [Column(ordinal: "1")] public string Area; [Column(ordinal: "2")] public string Title; [Column(ordinal: "3")] public string Description; } Veri Topla Özellikleri Belirle Modeli Eğit Modeli Değerlendir Modeli Tüket
Özellikleri Belirle (ML.NET’de Pipeline) var pipeline = new LearningPipeline(); pipeline.Add(new TextLoader<CoreFxIssue>("../corefx_issues.tsv", useHeader: true)); ID Area Title Description 7899 area-System.Net Failing network tests in the CI Of the past dozen or so PRs I’ve … Veri Topla Özellikleri Belirle Modeli Eğit Modeli Değerlendir Modeli Tüket
Özellikleri Belirle (ML.NET’de Pipeline) var pipeline = new LearningPipeline(); pipeline.Add(new TextLoader<CoreFxIssue>("../corefx_issues.tsv", useHeader: true)); pipeline.Add(new Dictionarizer(("Area", "Label“))); ID Area Title Description Label 7899 area-System.Net Failing network tests in the CI Of the past dozen or so PRs I’ve … 5 Veri Topla Özellikleri Belirle Modeli Eğit Modeli Değerlendir Modeli Tüket
Özellikleri Belirle (ML.NET’de Pipeline) var pipeline = new LearningPipeline(); pipeline.Add(new TextLoader<CoreFxIssue>("../corefx_issues.tsv", useHeader: true)); pipeline.Add(new Dictionarizer(("Area", "Label"))); pipeline.Add(new TextFeaturizer("Title", "Title")); ID Area Title Description Label 7899 area-System.Net Failing network tests in the CI Of the past dozen or so PRs I’ve … 5 <0.45,0.34, …> Veri Topla Özellikleri Belirle Modeli Eğit Modeli Değerlendir Modeli Tüket
Özellikleri Belirle (ML.NET’de Pipeline) var pipeline = new LearningPipeline(); pipeline.Add(new TextLoader<CoreFxIssue>("../corefx_issues.tsv", useHeader: true)); pipeline.Add(new Dictionarizer(("Area", "Label"))); pipeline.Add(new TextFeaturizer("Title", "Title")); pipeline.Add(new TextFeaturizer("Description", "Description")); ID Area Title Description Label 7899 area-System.Net Failing network tests in the CI Of the past dozen or so PRs I’ve … 5 <0.45,0.34, …> <0.27, 0.54, … > Veri Topla Özellikleri Belirle Modeli Eğit Modeli Değerlendir Modeli Tüket
Özellikleri Belirle (ML.NET’de Pipeline) var pipeline = new LearningPipeline(); pipeline.Add(new TextLoader<CoreFxIssue>("../corefx_issues.tsv", useHeader: true)); pipeline.Add(new Dictionarizer(("Area", "Label"))); pipeline.Add(new TextFeaturizer("Title", "Title")); pipeline.Add(new TextFeaturizer("Description", "Description")); pipeline.Add(new ColumnConcatenator("Features", "Title", "Description")); ID Area Title Description Label Features 7899 area-System.Net Failing network tests in the CI Of the past dozen or so PRs I’ve … 5 <0.45,0.34, …> <0.27, 0.54, … > <0.45,0.34, …, 0.27, 0.54, …> Veri Topla Özellikleri Belirle Modeli Eğit Modeli Değerlendir Modeli Tüket
Modeli Eğit (ML.NET’de Pipeline) Eğitim modeli etiket ile özellikleri parametre alır ve Model nesnesi oluşturur. pipeline.Add(new StochasticDualCoordinateAscentClassifier()); pipeline.Add(new PredictedLabelColumnOriginalValueConverter() { PredictedLabelColumn = "PredictedLabel" }); Veri Topla Özellikleri Belirle Modeli Eğit Modeli Değerlendir Modeli Tüket
Modeli Eğit (ML.NET’de Pipeline) Eğitim modeli etiket ile özellikleri parametre alır ve Model nesnesi oluşturur. pipeline.Add(new StochasticDualCoordinateAscentClassifier()); pipeline.Add(new PredictedLabelColumnOriginalValueConverter() { PredictedLabelColumn = "PredictedLabel" }); PredictionModel<CoreFxIssue, CoreFxIssuePrediction> model = pipeline.Train<CoreFxIssue, CoreFxIssuePrediction>(); public class CoreFxIssuePrediction { [ColumnName("PredictedLabel")] public string Area; } Veri Topla Özellikleri Belirle Modeli Eğit Modeli Değerlendir Modeli Tüket
Modeli Değerlendir Model, yeni gelecek veriler için anlamlı olmalı (genelleştirme) Test verisi ile değerlendir: Etiketlenmiş veri, test için kullanılmaz Mikro-doğruluk: Test verisindeki örneklemin yüzde kaçı doğru tahmin edildi? var testData = new TextLoader<CoreFxIssue>(@“..\corefx_issues_test.tsv", useHeader: true); var evaluator = new ClassificationEvaluator(); ClassificationMetrics metrics = evaluator.Evaluate(model, testData); Console.WriteLine("Micro-Accuracy is {0}", metrics.AccuracyMicro); Veriyi Yükle Özellikleri Belirle Modeli Eğit Modeli Değerlendir Modeli Tüket
Modeli Değerlendir Mkro-doğruluk: ~73% Etiket Doğruluk area-System.Net 0.9691 area-System.Data 0.9163 area-System.Linq 0.8930 area-Serialization 0.8799 area-System.IO 0.8755 … area-System.Numerics 0.7588 area-System.Threading 0.7184 area-System.Reflection 0.6514 area-System.Globalization 0.6494 area-Meta 0.2325 Veriyi Yükle Özellikleri Belirle Modeli Eğit Modeli Değerlendir Modeli Tüket
Model Consumption CoreFxIssue issue = new CoreFxIssue { ID = “7899", Title = "Failing network tests in the CI", Description = @"Of the past dozen or so PRs …" }; CoreFxIssuePrediction prediction = model.Predict(issue); Console.WriteLine("Area-Tag is " + prediction.Area); Veriyi Yükle Özellikleri Belirle Modeli Eğit Modeli Değerlendir Modeli Tüket
Makine Öğrenmesi, İteratiftir Veriyi Yükle Özellikleri Belirle Modeli Eğit Modeli Değerlendir Modeli Tüket ML Pipeline
Daha fazla/farklı veri Modeli İyileştirmek Daha geniş veri seti Kullanıcı Profilleri Farklı veri setleri Daha fazla/farklı veri Farklı öğrenici Farklı dönüştürücü Farklı hiper parametreler Farklı pipeline “Programming the Unprogrammable” “Programming the Unprogrammable”
Her yol Pipeline! (Taksi Ücreti) 7/25/2019 4:51 PM © Microsoft Corporation. All rights reserved. MICROSOFT MAKES NO WARRANTIES, EXPRESS, IMPLIED OR STATUTORY, AS TO THE INFORMATION IN THIS PRESENTATION.
Pipeline Oyunları ! 1 2 3 4 5 6 var pipeline = new LearningPipeline(); pipeline.Train<TaxiTrip, TaxiTripFarePrediction>(); pipeline.Add(new ColumnConcatenator("Features", "vendor_id", "rate_code", …); pipeline.Add(new TextLoader<TaxiTrip> (DataPath, useHeader: true, separator: ",")); pipeline.Add(new FastTreeRegressor()); pipeline.Add(new CategoricalOneHotVectorizer ("vendor_id", "rate_code", "payment_type"));
Pipeline Oyunları ! 2 3 4 5 6 1 var pipeline = new LearningPipeline(); pipeline.Train<TaxiTrip, TaxiTripFarePrediction>(); pipeline.Add(new ColumnConcatenator("Features", "vendor_id", "rate_code", …); pipeline.Add(new TextLoader<TaxiTrip> (DataPath, useHeader: true, separator: ",")); pipeline.Add(new FastTreeRegressor()); pipeline.Add(new CategoricalOneHotVectorizer ("vendor_id", "rate_code", "payment_type"));
Pipeline Oyunları ! 3 4 5 6 1 2 var pipeline = new LearningPipeline(); pipeline.Train<TaxiTrip, TaxiTripFarePrediction>(); pipeline.Add(new ColumnConcatenator("Features", "vendor_id", "rate_code", …); 2 pipeline.Add(new TextLoader<TaxiTrip> (DataPath, useHeader: true, separator: ",")); pipeline.Add(new FastTreeRegressor()); pipeline.Add(new CategoricalOneHotVectorizer ("vendor_id", "rate_code", "payment_type"));
Pipeline Oyunları ! 4 5 6 1 2 3 var pipeline = new LearningPipeline(); pipeline.Train<TaxiTrip, TaxiTripFarePrediction>(); pipeline.Add(new ColumnConcatenator("Features", "vendor_id", "rate_code", …); 2 pipeline.Add(new TextLoader<TaxiTrip> (DataPath, useHeader: true, separator: ",")); pipeline.Add(new FastTreeRegressor()); 3 pipeline.Add(new CategoricalOneHotVectorizer ("vendor_id", "rate_code", "payment_type"));
Pipeline Oyunları ! 5 6 1 4 2 3 var pipeline = new LearningPipeline(); pipeline.Train<TaxiTrip, TaxiTripFarePrediction>(); 4 pipeline.Add(new ColumnConcatenator("Features", "vendor_id", "rate_code", …); 2 pipeline.Add(new TextLoader<TaxiTrip> (DataPath, useHeader: true, separator: ",")); pipeline.Add(new FastTreeRegressor()); 3 pipeline.Add(new CategoricalOneHotVectorizer ("vendor_id", "rate_code", "payment_type"));
Pipeline Oyunları ! 6 1 4 2 5 3 var pipeline = new LearningPipeline(); pipeline.Train<TaxiTrip, TaxiTripFarePrediction>(); 4 pipeline.Add(new ColumnConcatenator("Features", "vendor_id", "rate_code", …); 2 pipeline.Add(new TextLoader<TaxiTrip> (DataPath, useHeader: true, separator: ",")); 5 pipeline.Add(new FastTreeRegressor()); 3 pipeline.Add(new CategoricalOneHotVectorizer ("vendor_id", "rate_code", "payment_type"));
Pipeline Oyunları ! 1 6 4 2 5 3 var pipeline = new LearningPipeline(); pipeline.Train<TaxiTrip, TaxiTripFarePrediction>(); 4 pipeline.Add(new ColumnConcatenator("Features", "vendor_id", "rate_code", …); 2 pipeline.Add(new TextLoader<TaxiTrip> (DataPath, useHeader: true, separator: ",")); 5 pipeline.Add(new FastTreeRegressor()); 3 pipeline.Add(new CategoricalOneHotVectorizer ("vendor_id", "rate_code", "payment_type"));
Pipeline Oyunları ! var pipeline = new LearningPipeline(); pipeline.Add(new TextLoader<TaxiTrip> (DataPath, useHeader: true, separator: ",")); pipeline.Add(new CategoricalOneHotVectorizer ("vendor_id", "rate_code", "payment_type")); pipeline.Add(new ColumnConcatenator("Features", "vendor_id", "rate_code", …); pipeline.Add(new FastTreeRegressor()); pipeline.Train<TaxiTrip, TaxiTripFarePrediction>();
Akıllı Yolculuklar (Uçuş Duyarlılığı & Gecikmeler) 7/25/2019 4:51 PM © Microsoft Corporation. All rights reserved. MICROSOFT MAKES NO WARRANTIES, EXPRESS, IMPLIED OR STATUTORY, AS TO THE INFORMATION IN THIS PRESENTATION.
Uçuş Gecikmelerini Tahminlemek Uçuş Veri Seti Ne Tahmin Ediyoruz? (Etiket) En Alakalı Veri (Özellikler) 108 Orijinal veri setindeki özellikler 9 En etkili özellikler Havayolu Kalkış havaalanı İniş havaalanı Tahmin edilen kalkış saati Mesafe Ay Gün Haftanın günü. Eylül 2017 to Ocak 2018 (2 milyon kayıt) Kalkış Zamanı
Uçuş Gecikmelerini Tahminlemek
Uçuş Gecikmelerini Tahminlemek Tahminleri İyileştirme Yolları Eksik Veri ile Çalışmaktan Kaçının Az gerçekleşen uçuşları kaldırın. Regresyon, tekrarlanan senaryolarla daha iyi sonuç verir. Daha Fazla Boyut (Kolon) Ekleyin Hava durumu verisi, havayolu firması bilgileri vb. Aşırı Durumlardan Kaçının Aşırı uzun gecikmeler ve arıza, kaza gibi tahmin edilemeyen olaylarla ilgili gecikmeleri kaldırın. Veri Setini Büyütün (Daha Fazla Satır) Daha uzun aralıklı veri setleri kullanın.
7/25/2019 4:51 PM Satış Tahmini © Microsoft Corporation. All rights reserved. MICROSOFT MAKES NO WARRANTIES, EXPRESS, IMPLIED OR STATUTORY, AS TO THE INFORMATION IN THIS PRESENTATION.