570 likes | 583 Views
Learn to develop machine learning applications using ML.NET, a powerful framework for creating custom models and integrating ML capabilities into various platforms.
E N D
Developing Machine Learning Applications with ML.NET Emrah Usluemrah.uslu@peakup.org PEAKUP .NET Yazılım Geliştirici Konferansı 3 Kasım 2018 // İstanbul
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… Ne kadar? Kaç tane? Nasıl bir dağılıma sahip? Bu A’mı B’mi? Regresyon Kümeleme Sınıflandırma
.NET yazılım ekibi Makine Öğrenmesini nasıl kullanıyor?
şu3 problemi çözüyor Bildirilen Problemlerin Sınıflandırılması Uçuş Gecikmeleri Satış Tahmini
ML.NET NEDİR? 01 ML.NET kendi makine öğrenmesi modellerinizi oluşturmanızı sağlar.
HazırML Modelleri (Azure Cognitive Services) • Örneğin Azure Cognitive servislerinikullanarak 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 Search Knowledge 96% pozitif Programlama Dilleri (C#, VB, F#) Full Control / Harder Easy / Less Control
Hazır ML Modelleri (Azure Cognitive Services) • Örneğin Azure Cognitive servislerinikullanarak 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 Search Knowledge 9% pozitif Programlama Dilleri (C#, VB, F#) Full Control / Harder Easy / Less Control
Kendi ML Modellerinizi Oluşturun Çalıştır Veriyi Hazırla Derle & Eğit 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 öğrenmesitemelleri ve kütüphaneleri bakımından yetersiz. • ML.NET, Azure Machine Learning ve CognitiveServices’in sağladığı deneyimi tamamlıyor. • Kendi modelini oluştur • Code First yaklaşımı • AppLocal Model ile Dağıtım Less Control / Easy
ML.NET NEDİR? 02 ML.NET framework first Yaklaşımını benimsiyor.
ML.NET, framework first yaklaşımını benimsiyor Makine Öğrenmesi için Yazılım Geliştirici dostu API’ler Eğitim Tüketim Misc. Transforms Learners Extensions ML Data framework Natural Text Linear Evaluators Schema Boosted Trees Calibrators Missing values Svm Data loaders Categorical K-Means Normalization Feature Selection
ML.NET NEDİR? 03 ML.NET, büyük ölçekli Microsoftürünlerinde kendini kanıtladı.
Microsoft’daML.NET Kullanımı BingAds Excel Power Point Windows 10 + more!
ML.NET NEDİR? 04 ML.NET Açık Kaynak Kodlu& Çoklu Platform Desteği
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 Açık Kaynak Kodlu Yazılım Geliştirici Odaklı Kendini Kanıtlamış & Genişletilebilir https://github.com/dotnet/machinelearning
GitHub Problem Etiketleme
GitHub Problem Etiketleme (Sınıflandırma Problemi) Bildirilen bu problem, hangi etiket ile işaretlenmeli? A’mı B’mi?
ML Modelleri (GitHub Problem Sınıflandırma) Özellikler Başlık Açıklama
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ışı ML Pipeline etiketler + özellik vektörü etiketler + düz metin model
Uçtan Uca Makine Öğrenmesi İş Akışı ML Pipeline • etiketler + özellik vektörü • etiketler + düz metin 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(16binkayı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) varpipeline=new LearningPipeline(); Veri Topla Özellikleri Belirle Modeli Eğit Modeli Değerlendir Modeli Tüket
Özellikleri Belirle (ML.NET’de Pipeline) varpipeline=new LearningPipeline();pipeline.Add(newTextLoader<CoreFxIssue>("../corefx_issues.tsv",useHeader:true)); Veri Topla Özellikleri Belirle Modeli Eğit Modeli Değerlendir Modeli Tüket classCoreFxIssue { [Column(ordinal: "0")] publicstring ID; [Column(ordinal: "1")] publicstring Area; [Column(ordinal: "2")] publicstring Title; [Column(ordinal: "3")] publicstring Description; }
Özellikleri Belirle (ML.NET’de Pipeline) varpipeline=new LearningPipeline();pipeline.Add(newTextLoader<CoreFxIssue>("../corefx_issues.tsv",useHeader:true)); Veri Topla Özellikleri Belirle Modeli Eğit Modeli Değerlendir Modeli Tüket
Özellikleri Belirle (ML.NET’de Pipeline) varpipeline=new LearningPipeline();pipeline.Add(newTextLoader<CoreFxIssue>("../corefx_issues.tsv",useHeader:true)); pipeline.Add(newDictionarizer(("Area","Label“))); Veri Topla Özellikleri Belirle Modeli Eğit Modeli Değerlendir Modeli Tüket
Özellikleri Belirle (ML.NET’de Pipeline) varpipeline=new LearningPipeline();pipeline.Add(newTextLoader<CoreFxIssue>("../corefx_issues.tsv",useHeader:true)); pipeline.Add(newDictionarizer(("Area","Label"))); pipeline.Add(newTextFeaturizer("Title","Title")); Veri Topla Özellikleri Belirle Modeli Eğit Modeli Değerlendir Modeli Tüket
Özellikleri Belirle (ML.NET’de Pipeline) varpipeline=new LearningPipeline();pipeline.Add(newTextLoader<CoreFxIssue>("../corefx_issues.tsv",useHeader:true)); pipeline.Add(newDictionarizer(("Area","Label"))); pipeline.Add(newTextFeaturizer("Title","Title")); pipeline.Add(newTextFeaturizer("Description","Description")); Veri Topla Özellikleri Belirle Modeli Eğit Modeli Değerlendir Modeli Tüket
Özellikleri Belirle (ML.NET’de Pipeline) varpipeline=new LearningPipeline();pipeline.Add(newTextLoader<CoreFxIssue>("../corefx_issues.tsv",useHeader:true)); pipeline.Add(newDictionarizer(("Area","Label"))); pipeline.Add(newTextFeaturizer("Title","Title")); pipeline.Add(newTextFeaturizer("Description","Description")); pipeline.Add(newColumnConcatenator("Features","Title","Description")); 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. Veri Topla Özellikleri Belirle Modeli Eğit Modeli Değerlendir Modeli Tüket pipeline.Add(newStochasticDualCoordinateAscentClassifier()); pipeline.Add(newPredictedLabelColumnOriginalValueConverter() { PredictedLabelColumn = "PredictedLabel" });
Modeli Eğit (ML.NET’de Pipeline) • Eğitim modeli etiket ile özellikleri parametre alır ve Model nesnesi oluşturur. Veri Topla Özellikleri Belirle Modeli Eğit Modeli Değerlendir Modeli Tüket pipeline.Add(newStochasticDualCoordinateAscentClassifier()); pipeline.Add(newPredictedLabelColumnOriginalValueConverter() { PredictedLabelColumn = "PredictedLabel" }); PredictionModel<CoreFxIssue, CoreFxIssuePrediction> model = pipeline.Train<CoreFxIssue, CoreFxIssuePrediction>(); publicclassCoreFxIssuePrediction { [ColumnName("PredictedLabel")] publicstring Area; }
ModeliDeğerlendir • Model, yeni gelecek veriler için anlamlı olmalı (genelleştirme) • Testverisi ile değerlendir: Etiketlenmiş veri, test için kullanılmaz • Mikro-doğruluk: Test verisindeki örneklemin yüzde kaçı doğru tahmin edildi? Veriyi Yükle Özellikleri Belirle Modeli Eğit Modeli Değerlendir Modeli Tüket vartestData = newTextLoader<CoreFxIssue>(@“..\corefx_issues_test.tsv", useHeader: true); varevaluator=newClassificationEvaluator();ClassificationMetricsmetrics=evaluator.Evaluate(model,testData);Console.WriteLine("Micro-Accuracy is {0}",metrics.AccuracyMicro);
Modeli Değerlendir • Mkro-doğruluk: ~73% Veriyi Yükle Özellikleri Belirle Modeli Eğit Modeli Değerlendir Modeli Tüket
Model Consumption CoreFxIssue issue = newCoreFxIssue { 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 ML Pipeline
Modeli İyileştirmek “Programming the Unprogrammable” “Programming the Unprogrammable”
Her yol Pipeline! (Taksi Ücreti)
1 2 3 4 5 6 Pipeline Oyunları ! var pipeline = new LearningPipeline(); pipeline.Train<TaxiTrip, TaxiTripFarePrediction>(); pipeline.Add(new ColumnConcatenator("Features", "vendor_id", "rate_code", …); pipeline.Add(newTextLoader<TaxiTrip> (DataPath, useHeader: true, separator: ",")); pipeline.Add(new FastTreeRegressor()); pipeline.Add(new CategoricalOneHotVectorizer ("vendor_id", "rate_code", "payment_type"));
2 3 4 5 6 Pipeline Oyunları ! 1 var pipeline = new LearningPipeline(); pipeline.Train<TaxiTrip, TaxiTripFarePrediction>(); pipeline.Add(new ColumnConcatenator("Features", "vendor_id", "rate_code", …); pipeline.Add(newTextLoader<TaxiTrip> (DataPath, useHeader: true, separator: ",")); pipeline.Add(new FastTreeRegressor()); pipeline.Add(new CategoricalOneHotVectorizer ("vendor_id", "rate_code", "payment_type"));
3 4 5 6 Pipeline Oyunları ! 1 var pipeline = new LearningPipeline(); pipeline.Train<TaxiTrip, TaxiTripFarePrediction>(); pipeline.Add(new ColumnConcatenator("Features", "vendor_id", "rate_code", …); 2 pipeline.Add(newTextLoader<TaxiTrip> (DataPath, useHeader: true, separator: ",")); pipeline.Add(new FastTreeRegressor()); pipeline.Add(new CategoricalOneHotVectorizer ("vendor_id", "rate_code", "payment_type"));
4 5 6 Pipeline Oyunları ! 1 var pipeline = new LearningPipeline(); pipeline.Train<TaxiTrip, TaxiTripFarePrediction>(); pipeline.Add(new ColumnConcatenator("Features", "vendor_id", "rate_code", …); 2 pipeline.Add(newTextLoader<TaxiTrip> (DataPath, useHeader: true, separator: ",")); pipeline.Add(new FastTreeRegressor()); 3 pipeline.Add(new CategoricalOneHotVectorizer ("vendor_id", "rate_code", "payment_type"));
5 6 Pipeline Oyunları ! 1 var pipeline = new LearningPipeline(); pipeline.Train<TaxiTrip, TaxiTripFarePrediction>(); 4 pipeline.Add(new ColumnConcatenator("Features", "vendor_id", "rate_code", …); 2 pipeline.Add(newTextLoader<TaxiTrip> (DataPath, useHeader: true, separator: ",")); pipeline.Add(new FastTreeRegressor()); 3 pipeline.Add(new CategoricalOneHotVectorizer ("vendor_id", "rate_code", "payment_type"));
6 Pipeline Oyunları ! 1 var pipeline = new LearningPipeline(); pipeline.Train<TaxiTrip, TaxiTripFarePrediction>(); 4 pipeline.Add(new ColumnConcatenator("Features", "vendor_id", "rate_code", …); 2 pipeline.Add(newTextLoader<TaxiTrip> (DataPath, useHeader: true, separator: ",")); 5 pipeline.Add(new FastTreeRegressor()); 3 pipeline.Add(new CategoricalOneHotVectorizer ("vendor_id", "rate_code", "payment_type"));