Microsoft Azure Machine Learning – Örnek Deney ve MVC Arayüzü

Bildiğiniz gibi geçen aylarda Microsoft, Azure platformu üzerine yeni bir ürün çıkardı. Ürünün adı Azure Machine Learning. Machine Learning, özel tasarlanmış algoritmalar ile bilgisayarların öğrenebilmesini amaçlayan bir çalışma konusu. Machine Learning sayesinde bilgisayarlara var olan bir veri üzerinden öğrenmelerini sağlayarak, kendi başlarına karar verebilmelerini sağlamayı amaçlanıyor.

Tam olarak anlatmak istediğimi, detaylıca açıklayacağım bir örnekle açıklamak istiyorum.

Günlük hayatımızda her gün karşılaştığımız bir olay aslında, insanlar bankalardan sürekli olarak kredi almak istiyor. Bankalar bu kredi başvurularını alarak başvuru sahiplerinin özelliklerine göre kredi verip vermeyeceklerine karar veriyorlar. Bu başvuru ya şubeye giderek ya da SMS, Internet gibi kanallardan yapılıyor. Süreç içerisinde bankalar için en kritik olan kısım, hızlı bir şekilde doğru kişiye doğru miktarda kredi vermek. Bir başka değişle, banka eğer borcunu ödeyemeyecek bir kişiye yüksek miktarda kredi açarsa, büyük ihtimalle bu parayı banka geri alamayacaktır ve hem müşteri hem de banka için istenmeyen sonuçlar doğuracaktır.

Bu süreci hızlandırmanın iki yolu var ya daha çok eleman alarak kredi başvurulara daha hızlı cevap verilecek ya da bu süreci bilgisayarların yapması sağlanarak çok daha hızlı bir şekilde başvurular sonuçlandırılacak. İşte ikinci seçimimizde işin içerisine Machine Learning giriyor. Normalde bankalar bu tarz ihtiyaçlar için karar verme mekanizmalarını kullanıyor fakat bu tarz sistemler büyük yatırımlar ve entegrasyon çalışmaları gerektiriyor.

Microsoft Azure Machine Learning sayesinde bu yatırımları ve entegrasyon çalışmalarını minimuma indirerek, bulut üzerinde çalışan bir hizmet haline getirmiş. Hem entegrasyon kolaylıkları hem geliştirme ortamı hem de altyapı rahatlığından dolayı ilgi çekici noktalara gidebilir diye düşünüyorum.

Şimdi gelin Azure üzerinde örnek bir Machine Learning modeli hazırlayalım. Hedefimiz bir web sitesi üzerinden gelecek olan kredi başvurularını anlık olarak kriterlerini incelenecek, başvuru sahibinin krediye uygunluğuna karar vermek.

Bu örnekte yaptığım çalışmanın büyük kısmını Microsoft Azure Machine Learning‘in sitesinden bulabilirsiniz. Ben hem varolan bu yazıyı biraz daha detaylandırmak istedim hemde eksik olan web arayüzü ile bağlantı kısmını eklemek istedim

Orijinal yazının adresi: http://azure.microsoft.com/en-us/documentation/articles/machine-learning-walkthrough-develop-predictive-solution/

 

  1. http://azure.microsoft.com/tr-TR/account/ sitesinden Azure hesabımızdaki Yönetim Portalına bağlanıyoruz. Eğer daha önceden bir Azure hesabınız yok ise http://azure.microsoft.com/tr-tr/pricing/free-trial/ kolaylıkla deneme hesabı açabilirsiniz.

     

 

  1. Yönetim Portalımıza bağlandıktan sonra sol taraftaki menüden Machine Learning sekmesine tıklıyoruz.

  1. Machine Learning sekmesine tıkladıktan sonra karşımıza aktif Workspace’lerimiz çıkıyor. Benim ekranımda daha önceden bir Workspace yarattığım için bir tane gözüküyor fakat sizin sayfanızda burası boş olacaktır. Workspace aslında Machine Learning projelerimiz üzerine çalışmamızı sağlayan bir çalışma ortamıdır. Örnek vermek gerekirse Visual Studio’da ki Solution gibi diyebiliriz. Aynı Solution’da olduğu gibi içerisinde birden çok Proje barındırır. Şimdi kendimiz aşağıdaki menüden yeni bir Workspace yaratıyoruz. Görüntüdeki seçenekleri takip ederek Quick Create düğmesine basınız. Bu ekranda Workspace’imize bir isim veriyoruz, dünya da nerede saklanacağını belirtiyoruz ve Workspace’in kullanacağı bir barındırma alanı (Storage Account) yaratıyoruz.

  1. Workspace’imizi yarattıktan sonra aynı üstteki ekrandaki gibi listede yarattığınız Workspace’inizi göreceksiniz. Üzerine tıklarayak Workspace’in içerisine giriyoruz. Workspace’in içerisinde yapabileceğiniz birkaç işlem bulunuyor. Yeni Machine Learning sistemi hazırlamak için geliştirme ortamı olan ML Studio‘ya bağlanıyorsunuz. Manage Access ile bu Workspace’i kullanacak kullanıcıları tanımlayabiliriz. Deploy Production Web Services ile de hazırladığınız Machine Learning modellerinin dış dünya ile iletişimini sağlayacak olan web servisleri yönetebiliyoruz. Şimdi gelin ilk olarak örnek modelimizi hazırlayacağımız MS Studio‘ya bağlanalım. Sign-In to ML Studio linkine tıklayın.

  1. ML Studio’nun ilk giriş ekranı bu şekilde. Bu ekranda Machine Learning hakkında bütün detaylı bilgiyi ve son gelişmeleri takip edebilirsiniz. Benim bu örnekte kullandığım gibi birçok örneğe buradan ulaşabilirsiniz. Sol menüye baktığımızda burada Experiments aslında bizim tasarladığımız ML Modelleri. Azure her bir ML modeline Experiment (Deney) adını vermiş. Yeni modelimizi burada tasarladıktan sonra Web Services ekranında hazırladığımız bu modelleri dış dünya ile konuşturacağız. Böylece örneğimin son kısmında yapacağım web sayfası ML modelime kredi başvurusunu gönderip cevabını alabilecek. Gelin modellerimizi tasarlamaya başlayalım. Experiments sekmesine tıklayın.

  1. Experiments ekranında üzerine çalıştığımız modelleri görebiliyoruz. Eğer sizde bu ekran boş ise daha önceden hiç model hazırlamadığınız içindir.

     

    Modelimizi hazırlamak için ilk olarak veri kümesine ihtiyacımız var. Bunun nedeni, ilk olarak bilgisayara öğrenebileceği bir veri kümesi vermemiz gerekiyor, aynı bizim bir konuyu öğrenmek için kitap okumamız gibi. Bilgisayar bu veri kümesi üzerinde çalışarak hangi koşullarda yüksek kredi riski olmuşmuş hangi koşullarda düşük kredi riski olmuşmuş onu öğreniyor. Bunu öğrendikten sonra ancak bize yardımcı olabilecek hale geliyor. Veri Kümesini yaratmak için ekranın aşağısındaki New düğmesine basarak yeni bir DataSet yaratıyoruz.

     

     

  2. Veri kümemizi http://archive.ics.uci.edu/ml/datasets/Statlog+(German+Credit+Data) sayfasından alıyoruz. Bu sayfada sunulan veri kümesi Almanya’da kredi başvurularını ve bu başvurulara verilen risk sonuçlarını barındırıyor. Hazırlayacağımız modelde bu veri kümesini inceleyerek hangi koşullarda hangi risk sonuçları verilmiş onu öğrenecek. Bu sayfa üzerinde Data Folder linkine tıklıyoruz ve açılan sayfada german.data dosyasını bilgisayarımıza indiriyoruz.

  1. İndirdiğimiz german.data dosyasını NotePad’de açabiliriz. Bu dosya içerisinde boşluklar ile ayrılmış olarak 1000 kayıt/kredi başvurusu bulunuyor. Dosyanın içerisine baktığınızda sayılardan farklı olarak birçok kod göreceksiniz (A21, A173 gibi). Bu kodların karşılıklarını dosyayı indirdiğimiz web sayfasında bulabilirsiniz. Her bir kredi başvurusu için 20 ayrı değişken bulunuyor 21’inci değer ise 1 veya 2 olabiliyor. Eğer bu değer 1 ise risk düşük (iyi), eğer 2 ise risk yüksek (kötü) olarak değerlendiriliyor. Bu kodların karşılıkları aslında bizim modelimiz için çok bir önemi yok. Hazırlayacağımız model, her satırdaki bu kodların kombinasyon değişikliklerin kredi riskini nasıl değiştirdiğiyle ilgilenecek ve buna göre gelecekteki başvuruların risklerini tahmin edecek. Veri kümemiz ile ilgili son dikkat etmemiz nokta ise, verimizi indirdiğimiz kurum sistemin yüksek kredi riski olmasına karşın düşük olarak karar verilmesini, riskin düşük olmasına rağmen yüksek olarak karar verilmesinden 5 kat daha zararlı buluyor. Bunu bankanın yüksek risk taşıyan bir müşteriye yüksek miktarda kredi vermesi olarak düşünebilirsiniz. Hatırlarsanız ABD’deki morgage krizi bu sebeple olmuştu.

  1. Şimdi sıra geldi bu veri kümemizi kullanmak için ML Studio‘ya yüklememize. ML Studio CSV formatı ile daha rahat çalıştığı için, boşluklarla ayrılmış olan verilerimizi virgül formatına çevireceğiz. Bunun için Windows PowerShell komutlarını kullanacağız. Windows PowerShell’e aşağıdaki gibi komut yazın. Burada german.data dosyasının tam klasör lokasyonunu yazmanız gerekecektir.

     

    cat german.data %{$_ replace ” “,“,”| sc german.csv

 

Sonuç olarak;

  1. CSV dosyamızı hazırladıktan sonra artık ML Studio’ya yükleyebiliriz. ML Studio’dan New butonuna basıp DataSet seçeneğini seçtikten sonra From Local File seçeneğini seçiyoruz. Karşımıza dosya yükleme ekranı çıkacaktır. Burada dosyamızı seçip onaylıyoruz. Veri kümemizin adını UCI German Credit Data olarak koyabiliriz. İleriki adımlarda veri kümemizi bu isimle bulacağız.

 

  1. Artık veri kümemizi de yüklediğimize göre ilk Deneyimizi (Experiment) hazırlayabiliriz. Unutmayım bu hazırlayacağımız deneyin asıl amacı kredi riskini doğru bir şekilde tahmin edebilecek bir model çıkartmak. Aynı yeni veri kümesi yarattığımız gibi yeni bir deney yaratıyoruz, New -> Experiment. ML Studio bize çalışma ortamımızı saniyeler içerisinde hazırlıyor.

 

  1. Biraz önce ML Studio’ya yüklediğimiz veri kümemizi sol kısımdaki Saved Datasets klasörünün altında bulup çalışma ortamına sürükleyelim. Komponentimizi sürükledikten sonra çıkışına tıklayıp Visualize‘a basarak, bu veri kümesi içerisindeki her kolonun içerisindeki verilerle ilgili detaylı istatistiksel verilere ulaşabiliriz. Dikkat ederseniz veri kümemizin kolon başlıkları yok, bu şekilde çalışmamız biraz zor olacaktır. Gelin kolonlarımıza adlarını verelim. ML Studio‘da sol araç çubuğunda arama kısmına “metadata” yazarak Metadata Editor komponentini çalışma ortamına sürükleyelim. Bu komponent sayesinde ver kümemizdeki kolonlarımızı isimlendirebileceğiz.

     

  2. Metadata Editor komponetimizi çalışma ortamına taşıdıktan sonra veri kümemizdeki çıkışı Metadata komponentin girişine bağlıyoruz. Bu sayede veri kümesindeki her satır için bu komponentin içerisinden geçerek kolon adları olacak şekilde devam edecek. İlk olarak sağdaki komponent özelliklerinden Lunch column selector düğmesine basıyoruz, açılan pencerede Begin With değerini All Columns olarak ayarlıyoruz ve onaylayıp pencereyi kapatıyoruz. Veri kümemizdeki 21 kolon için kolon isimlerini virgül ile ayırarak yazıp, Metadata Editor özelliklerindeki New column name kısmına girelim. Bu kolon isimlerini veri kümesini indirdiğimiz sayfadan da öğrenebilirsiniz veya aşağıdaki şekilde hazırlanmış olarak direk kopyalayıp yapıştırabilirsiniz.

    Status of checking account, Duration in months, Credit history, Purpose, Credit amount, Savings account/bond, Present employment since, Installment rate in percentage of disposable income, Personal status and sex, Other debtors, Present residence since, Property, Age in years, Other installment plans, Housing, Number of existing credits, Job, Number of people providing maintenance for, Telephone, Foreign worker, Credit risk

     

            

     

  3. Bu işlemleri eğer doğru bir şekilde tamamladıysanız Metadata Editor‘un yanında kırmızı hata mesajı yok olacaktır. Eğer tam olarak emin olmak istiyorsanız deneyinizi aşağıdaki menüden RUN tuşuna basarak çalıştırabilirsiniz. Şimdilik bir sonuç görmeyeceğiz fakat ML Studio hazırladığımız komponentleri çalıştırarak bize problem olmadığını kanıtlayacak. Kolonlarımızdan ve verimizden emin olduğumuza göre bir sonraki adıma geçebiliriz.

 

Ayrıca deneyimiz çalıştıktan sonra Metadata Editor‘un çıkışına tıklayarak Visualize düğmesine bastığımızda veri kümemizin kolonlarının isimlendirildiğini görebiliriz.

  1. Şimdi sıra geldi veri kümemizdeki verileri 2 gruba ayırmaya. Hazırlayacağımız modelimiz için Test (Testing) ve Öğrenme (Training) veri grupları hazırlamamız gerekiyor. Öğrenme (Training) verisi modelimizin her satırını inceleyeceği ve çıktılarını öğrenerek ne zaman yüksek kredi riski oluşuyor ne zaman düşük kredi riski oluştuğunu anlayacağı, ana verimizin bir alt kümesi. Test (Testing) verisi ise Öğrenme (Training) verisinden tamamen bağımsız olan ama aynı düzende ve mantıkta olan veri kümesi, bu küme sayesinde modelimizin ne kadar iyi öğrendiğini test edeceğiz. Test ve Öğrenme veri kümeleri ile detaylı bilgiye http://en.wikipedia.org/wiki/Test_set , http://msdn.microsoft.com/en-us/library/bb895173.aspx sitelerinden ulaşabilirsiniz.

     

  2. Ana veri kümemizi 2 alt kümeye ayırmak için Split komponentini kullanıyoruz. Bu komponenti sol menüdeki arama çubuğuna Split yazarak bulabilirsiniz. Komponentimizi çalışma ortamına taşıdıktan sonra Metadata Editor‘un çıkışını bu komponente bağlıyoruz. Split komponenti kendiliğinden ana kümeyi 2 ye böler, yani toplam verinin %50 si bir çıkıştan diğer %50 ise diğer çıkıştan çıkar. Her çıkıştan toplam verinin yüzde kaçı çıkacağını komponent özelliklerinden ayarlayabiliriz. Ayrıca Randomize Split seçeneği ile veri kümesindeki satırlar karışık olarak bölünecektir. Yani satırları sırasıyla dağıtmak yerine bütün veri kümesi içerisinden rastgele satırları alarak dağıtım yapacaktır. Bu örneğimizde bu yüzdeleri değiştirmemize gerek yok.

     

  3. Şimdi sıra geldi, önceki adımlarda bahsettiğimiz risk farkını yaratmaya. Hatırlarsanız önceki adımlarda bahsettiğimiz konu, bankanın yüksek kredi riski olan bir başvuruya düşük kredi riski ataması, düşük kredi riskine yüksek kredi riski atamasından 5 kat daha zarar getiriyor olmasıydı. Bu durumu modelimizin tam olarak öğrenebilmesi için modelimize giren verilerdeki her yüksek kredi riski olan kaydı 5 kayıt olarak çoğaltacağız. Bu sayede modelimiz yüksek kredi riski olan kayıtlarla daha çok karşılaşarak daha detaylı bir öğrenim yakalayacak. Unutmayın bu örnekteki kullandığımız modeller için en önemli girdi kayıt sayısı ne kadar fazla kayıt modelimize gösterebilirsek o kadar gerçeğe yakın bir öğrenim yakalarız.

     

  4. Bu satır çoğaltmasını yapmamız için R Script denilen bir script dili kullanacağız. R Script dili özellikle istatistiksel işlemlerde yoğunlukla kullanılan bir script dilidir. Daha fazla bilgi için http://en.wikipedia.org/wiki/R_(programming_language) sitesini ziyaret edebilirsiniz. Deneyimize R Script komponenti koymak için sol arama çubuğuna R Script yazarak Execute R Script komponentimizi çalışma ortamına ekleyebiliriz. Daha sonra Split komponentin sol çıkışını Execute R Script komponentimizin en sol girişine bağlayalım. Böylece verimizin %50 si bu komponente girecek, giren verilerden yüksek risk sonucu olanları 5 katına çıkarmak içinde Execute R Script komponentimizin içerisinde aşağıdaki R Script kodu yazıyoruz. Bu işlemi Split komponentimizin diğer çıkışı içinde gerçekleştiriyoruz ve elimizde şu şekilde bir yapı oluyor.

     

    R Script:

dataset1 <- maml.mapInputPort(1)
data.set<-dataset1[dataset1[,21]==1,]
pos<-dataset1[dataset1[,21]==2,]
for
(i in
1:5) data.set<-rbind(data.set,pos)
maml.mapOutputPort(“data.set”)

 

  1. Artık elimizde öğrenme modelimizi bağlayabileceğimiz yapı hazır. Bu deneyde ilk olarak 2 farklı öğrenme algoritması deneyeceğiz. Bu algoritmalardan hangisi modelimizde daha iyi öğrenme sonuçları çıkarırsa sistemimizde o modeli kullanacağız. Deneye sokacağımız algoritmalar şunlar:
    1. Support Vector Machine (SVM): Bu algoritma da giren her kayıt bir veya birden çok kategoriye atanır, bu şekilde bütün kayıtlar kategorilere atanarak bir karar mekanizması oluşturulmuş olunur. SVM “binary” olarak çalışır. Daha fazla bilgi için, http://en.wikipedia.org/wiki/Support_vector_machine
    2. Two-Class Boosted Decision Trees: Bu algoritma da her kayıt içerisindeki değerlerin oluşturduğu karar ağacında bir uç noktaya atanır. Bütün kayıtlar bu şekilde gruplanmış olur. Daha fazla bilgi için, http://en.wikipedia.org/wiki/Decision_tree_learning

       

  2. Öğrenme algoritmaları hakkında kısa bir bilgi sahibi olduktan sonra projemize geri dönelim. Her Execute R Script komponentin çıkışına birer öğrenme algoritması ile Train Model bağlıyoruz. Soldaki Execute R Script ekran görüntüsündeki gibi bağlantıları yaptıktan sonra Train Model komponentin özelliklerinden veri kümesinin sonuç kolonunu yani 21’inci kolonu tanımlamamız gerekiyor. Bunun için Train Model komponentinin özelliklerinden Lunch column selector düğmesine basıp 21’inci kolonu gösteriyoruz.

    

  1. Two-Class Boosted Decision Tree algoritmasını ve öğrenme modelini bağladıktan sonra SVM algoritmasını da bağlamamız gerekiyor fakat bu sefer fazladan bir komponent daha ekleyeceğiz. Bu komponent adı Transform Data by Scaling. Bu komponenti Tanh dönüşümü ile kullanarak, sayesinde SVM’nin ihtiyacı olan bütün kolonların aynı ölçeğe düşmesini sağlayabiliriz. Kısacası bu komponentin çıkışında her satırın bütün kolonlarını 0 veya 1 haline getireceğiz yani “binary” yapacağız.

     

  2. Transform Data by Scaling komponentini sol arama çubuğundan bularak çalışma ortamına ekleyelim ve sol taraftaki Execute R Script komponentinin sağdaki boş çıkışına bağlayalım. Daha sonra Transform Data by Scaling komponentinin özelliklerinden Transformation Method olarak Tanh seçelim ve Launch Column Selector düğmesine basarak kolon ayalarını yapalım. Kolon ayarlarını aşağıdaki ekran görüntüsü gibi yapınız. Burada kısaca anlatmak istediğimiz, komponente giren bütün sayısal değerleri ölçeklendir ama son kolonu ölçeklendirmedir çünkü son kolon sonuç kolonu.

  1. Bundan sonra aynı bir önceki öğrenme modelini bağladığımız gibi bu modeli de bağlıyoruz. Unutmayın Öğrenme (Train Model) modelinde Luch Column Selector‘de 21’inci kolonu seçmeniz gerekiyor. Sonuç olarak elimizde aşağıdaki ekran olması gerekiyor.

  1. Sıra geldi hazırladığımız bu iki modeli değerlendirmeye, böylece hangisi daha iyi sonuç vereceğini görebileceğiz. Bu değerlendirme için Score Model ve Evaluate Model komponentlerini kullanacağız. Score Model komponenti, Öğrenme Modelini (Train Model) Test Veri kümesine göre değerlendirir. Bu sebeple 2 girişinden biri Öğrenmiş Model (Train Model) çıkışından gelir diğeri ise direkt Test verisi olarak gelir. Evaluate Model komponenti ise iki farklı Score Model komponentinden gelen sonuçları karşılaştırmamıza yarar. Bu modelleri kullanarak aşağıdaki yapıyı oluşturuyoruz.

  1. Yukarıdaki ekran görüntüsüne dikkat ederseniz her bir Score Model komponenti bir Train Model komponentinden Trained Model girişi alıyor bir de Test veri kümesinden direkt olarak giriş alıyor. Bu sayede Train Model’den çıkan sonuçları Test verisi ile karşılaştırıp sonuç üretebiliyor. Evaluate Model komponenti ise 2 farklı Machine Learning komponentini kullanan Trained Modellerin sonuçlarını karşılaştırıyor. Eğer sizde yukarıdaki ekranı hazırladıysanız aşağıdaki menüden RUN tuşuna basarak hazırladığımız sistemi çalıştıralım ve sonuçları beraber değerlendirelim. Sonuç olarak yanlış yapmadıysak aşağıdaki gibi ekran görmeliyiz.

  1. Eğer bütün komponentlerden yeşil tik işareti görüyorsak bu modelimizin sorunsuz çalıştığını gösterir. Şimdi gelin hangi Algoritma daha iyi sonuç vermiş. Evaluate Model komponentinin çıkışına tıklayarak Visualize düğmesine basalım. Karşımıza aşağıdaki gibi bir ekran görüntüsü gelecektir. Bu grafikte Scored dataset (Mavi Renk)
    Evaluate Model komponentine sol taraftan giren Two-Class Boosted Decisition Tree algoritmasından gelen sonucu diğeri (Kırmızı Renk) ise Two-Class Support Vector Machine algoritmasından gelen sonucu göstermektedir.

     

     

    Bu grafikte bize yardımcı olacak değerlerin açıklamaları şu şekilde:

  • True Positive: Doğru olarak karar verilmiş. Örnek: Kredi Riski düşük bir başvuru, Kredi Riski düşük olarak tanımlanmış.
  • False Positive: Yanlış olarak karar verilmiş. Örnek: Kredi Riski düşük bir başvuru, yanlış bir şekilde Kredi Riski fazla olarak tanımlanmış.
  • True Negative: Doğru olarak Yanlış olduğu karar verilmiş. Örnek: Kredi Riski fazla olan bir başvuru, doğru şekilde Kredi Riski fazla olarak tanımlanmış.
  • False Negative: Yanlış olarak Yanlış olduğu karar verilmiş. Örnek: Kredi Riski fazla olan bir başvuru, yanlış şekilde Kredi Riski düşük olarak tanımlanmış.
  • Accuracy: Tahmin edilen bir değerin gerçek değerine ne kadar yakın olduğunu gösterir.
  • Precision: Yapılan bütün tahminlerin yüzde kaçı doğru tahmin olduğunu gösterir.
  • Recall: Toplam kayıtlar içerisinde yapılan doğru tahmin yüzdesidir.
  • F1 Score: Precision ve Recall’un harmonic ortalamasının alınmasından oluşan bir değerdir.

Kaynak: http://en.wikipedia.org/wiki/Sensitivity_and_specificity, http://en.wikipedia.org/wiki/Accuracy_and_precision, http://en.wikipedia.org/wiki/Recall_(information_retrieval)

  1. Şimdi sıra geldi artık doğru algoritmaya karar vererek modelimizi kullanmaya. Bunun için hazırladığımız deneyimizi öğretim deneyinden skorlama deneyine çevirmemiz gerekiyor. Bu sayede modelimiz gelen yeni başvuruları skorlayarak bize kredi risk durumunu çıkartacak. Diyelim ki bir önceki adımda Scored dataset yani Two-Class Boosted Decision Tree algoritmamızın daha iyi olduğuna karar verdik. Bu yönde gelin deneyimizi değiştirelim. İlk olarak şu adımları yapın:
    1. Two-Class Support Vector Machine modülünü kaldırın.
    2. Ona bağlı olan Train Model’i ve Score Model’i de kaldırın.
    3. Transform Data by Scaling komponentini de kaldırın.

       

  2. Gerek olmayan komponentleri sildikten sonra Train Model komponentinin çıkışına basarak Save as Trained Model seçelim. Bu sayede kaydettiğimiz modelimizi başka projelerde kullanacak hale geliyor. Bu modelimizi “Credit Risk Prediction” olarak kaydediyoruz. Kaydettiğimiz bu modeli sol taraftaki arama çubuğundan artık bulabiliriz.
  3. Şimdi biraz daha temizlik yapalım:
    1. Two-Class Boosted Decision Tree komponentini kaldırın.
    2. Train Model komponentini kaldırın.
    3. Araba çubuğundan biraz önce “Credit Risk Prediction” olarak kaydettiğimiz komponenti çalışma ortamına ekleyin ve çıkışını Score Model komponentine bağlayın.

Bu adımdan sonra elimizde bu şekilde bir model kalıyor.

  1. Deneyimizi eğer yukarıdaki ekran görüntüsündeki gibi şekillendirdiysek birkaç komponent daha silmeye devam edebiliriz.
    1. Split komponentini kaldırın.
    2. Her iki Execute R Script komponentini kaldırın.
    3. Evaluate Model komponentini kaldırın.
    4. Transform Data by Scaling komponentini kaldırın.

       

  2. Yukarıdaki komponentleri kaldırdıktan sonra deneyimiz aşağıdaki hale geliyor. Bu deneyi çalışır hale getirmemiz için bir komponent daha ekleyeceğiz. Hatırlarsanız veri kümemizden (German Credit Card UCI Dataset) 21 kolon geliyor. Bu kolonların 20 tanesi, 21’inci yani Kredi Risk sonucunu belirleyen değişkenler. Artık bizim eğitilmiş bir modelimiz olduğuna göre ve kredi riskini artık bu modelimiz tahmin edeceğine göre, veri kümesinden 21’inci kolonun gelmemesi gerekiyor. Bir şekilde veri kümesinden gelen 21 kolonun son kolonunu aşağıdaki modelimize göndermememiz gerekiyor. Bu filtreyi Project Columns komponenti ile halledeceğiz.

  1. Project Columns komponentini Metadata Editor ile Score Model arasına bağlıyoruz ve özelliklerinden Lunch column selector üzerinden sadece 21’inci kolonu devre dışı bırakıyoruz.

    

  1. Yukarıdaki düzenlemeleri yaptıktan sonra herşeyin doğru olduğuna deneği çalıştırarak emin olabiliriz. Aşağıdaki menüden RUN düğmesine basın ve deneyinizin sorunsuz çalıştığına emin olun. Bundan sonra artık iş web servisleri ayarlamaya geldi. İlk olarak deneyimize verinin giriş noktasını ayarlayacağız. Score Model komponentinin sağ girişinin üzerine sağ tıklayın ve Set as Publish Input seçin. Sonucun çıkacağı noktayı ayarlamak için de Score Model komponentimizin çıkışına sağ tıklıyoruz ve Set as Publish Output seçiyoruz.

            

  1. Yukarıdaki ayarlamaları yaptıktan sonra deneyimizi bir daha RUN diyerek çalıştıralım ve herşeyin yolunda olduğundan emin olalım. Burada aklınıza en yukarıdaki veri kümesinin halen diye durduğu sorusu gelebilir. Merak etmeyin modelimiz artık buradan veri çekmeyecek fakat buraya satır/veri formatını bilmesi için halen ihtiyacı var.
  2. Deneyimiz
    sorunsuz çalıştıktan sonra artık tanımladığımız web servis giriş çıkışlarını aktif hale getirebiliriz. Bunun için aşağıdaki menüden Publish Web Service düğmesine basmamız yeterli olacaktır. Çıkacak olan soruya evet demeniz yeterli.
  3. Publish Web Service düğmesine basıp çıkan onay sorusuna evet dedikten sonra ML Studio bizi Web Service sekmesindeki hazırladığımız web servisimizin ayarlarına götürüyor. Bu ekrandan Request/Response servisindeki Test linkine basarak modelimizi ve web servisi test edebiliriz.

 

Bu ekranda gördüğünüz iki farklı webservis URL’i var ve bunların tipleri farklı bu tiplerin açıklamaları şu şekilde;

  1. Request/Response: Bu URL’i kullanarak kullanıcı bir adet sorgu gönderip cevabını alabilir.
  2. Batch Execution: Bu URL’i kullanarak kullanıcı Azure BLOB tipinde toplu veriyi formatlar ver sorgu için göderir. Web servisde bütün bu toplu verinin sonuçlarını yine Azure BLOB olarak kaydeder ve adresini geri döndürür.

 

Ayrıca API key bizim bu web servise geliştirdiğimiz uygulamalardan ulaşmamıza yarayacak.

  1. Test ederken veri kümemizde olan kayıtlardan birinin değerlerini kullanabilirsiniz.

Satır değerlerini girdikten sonra tik işaretine basarak sorgumuzu modelimize gönderiyoruz ve cevabını beklemeye başlıyoruz.

Yukarıdaki gibi Azure bize sonucun hazır olduğunu belirtiyor. Bu ekranda Details düğmesine basarak sorgumuzun cevabını görebiliriz.

Yukarıdaki ekran görüntüsünde olduğu gibi Result satırında ki son 2 değer bizim sorgumuzun değeridir. İlk değer modelimize gönderdiğimiz sorgunun sonucu olarak “1” yani düşük kredi riski belirlediğini gösteriyor. Bu değeri veri kümemizdeki sonuçlarla karşılaştırarak doğruluğunu kesinleştirebiliriz.

  1. Web servisimizin ve modelimizin doğru sonuç verdiğine emin olduktan sonra web servisimizi canlı sisteme çekerek kullanmaya başlayabiliriz. Bu ayarı yine web servis sekmesindeki ekrandan Configuration üst sekmesine tıklayarak ulaşabiliriz. Canlı sisteme almak içinde Ready For Production ayarını YES olarak değiştirmemiz yeterli olacaktır.

     

     

  2. Web servisimizi canlı sisteme çektikten sonra artık tek yapmamız gereken bir uygulama ile web servise bağlanarak üst adımlarda yaptığımız gibi modelimize sorgu göndermek ve cevabını almak. Bunun için ben bir web sayfası yapmayı uygun buldum.
  3. Visual Studio’muzu açalım ve yeni bir MVC projesi yaratıyoruz. Detaylı olarak bu projenin içeriğine girmeyeceğim. Temel olarak her MVC projesinde olduğu gibi View kısmına web servisimize sorgu yapabileceğimiz bir form hazırladım. Model olarak formdan gelen verileri Controller’a taşıyacak bir obje oluşturdum. Controller tarafında ise View’dan gelen objeyi ScoreData tipinde bir objeyi doldurmak için kullandım ve ScoreRequest tipinde bir obje ile web servise sorgumu gönderdim. Cevabı da tekrar View’a göndererk kullanıcıya gösterdim. Hazırladığım web sayfasını Azure sayfası olarak Visual Studio üzerinden yayınladım. Aşağıda geliştirdiğim web sayfasının projesini bulabilirsiniz, detaylı şekilde bütün kodu inceleyebilirsiniz. Projeyi indirmek için linke tıklayınız: http://1drv.ms/1tl3ivN

Reklamlar

3 responses to “Microsoft Azure Machine Learning – Örnek Deney ve MVC Arayüzü

Bir Cevap Yazın

Aşağıya bilgilerinizi girin veya oturum açmak için bir simgeye tıklayın:

WordPress.com Logosu

WordPress.com hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap / Değiştir )

Twitter resmi

Twitter hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap / Değiştir )

Facebook fotoğrafı

Facebook hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap / Değiştir )

Google+ fotoğrafı

Google+ hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap / Değiştir )

Connecting to %s