Sayfalar

Pazartesi, Temmuz 04, 2016

Python İle Yapay Zeka 2

Yazımıza devam edelim

Eğitim için datamızı hazırlamıştık aynı işlemleri test verisi içinde uygulamamız gerekiyor. Bizim şimdi kullandığımız veri setinde test verileri için ayrı bir dosya hazırlanmış öyle bir dosya olmasa bile bizim verinin bir kısmını test için ayıırmamız gerekmektedir. Çünkü eğitim sonunda sistemi eğitimde kullanılmayan verilerle doğrulamak gerekli bir adımdır.



Eğtim verilerini hazırlamak için uyguladığımız adaımlarla aynı. sadece Giriş veri sutun adlarını grafiklerde kullanmak için kaybolmadan inLabels dizisine atıyoruz.

Eğitim :

Şimdi elimizde sensörlerden gelen verilerimiz var ve  sensör verilerine karşılık odanın boş olduğu yada içinde birilerinin olduğu bilgisi var. Böyle bir sisteme danışmanlı -Supervised - sistem deniyor.
Kullanacağımız kütüphanenin pek çok değişik modeli var. Eğitim hakkında dikkat edilmesi gereken pek çok konu var. YSA üzerine yazdığımız şu yazıdaki 
ysa-buyu-degildir.html
 bilgilerden çoğu bütün danışmanlı eğitim sistemlerinde geçerlidir okumanızı öneriririm.
Probelmimizi iki şekilde ele alabiliriz, Sınıflandırma ve Regresyon. Sınıflandırmada çıkış değeri odanın boş yada dolu olması üzerine bir sınıflandırma. Regresyonda ise 0 ila 1 arası bir çıkış değerine ulaşmak şeklinde bir her ikisi içinde deneme yapacağız.

Sınıflandırma :

 Önce gereken kütüphane  çağrılarını yapıyoruz.


Biz sınıflandırma için kullandığımızda RandomForestClassifier tercih ettiğimizden onu dahil ettik. Scikit-Learn kütüphanesinin içinde elbette pek çok değişik sınıflandırıcı mevcuttur.  Sizde onları dahil edip denemeler yapabilrsiniz.  Kütüphanenin bir güzelliği çoğu modele aynı kullanım arabirimi oluşturmuş olmasıdır. İkinci satırda ise eğitim sonrası tes aşamasında modelimiz başarısını ölçmek için kullanacağımız fonksiyonları çağırmamız için gereken modüldür.


RandomForestClassiffier  karara ağaçları türü bir sınıflandırıcıdır. Her sınıflandırcının kendisine göre ayar parametreleri vardır. Daha iyi sonuçlar için bu parametreleri ayarlamak gerekebilir. İlk aşamada varsayılan değerlerle deneme yapıp sonuçları değerlendirerek ve Probleminizi, verilerinizi dikkate alarak denemeler yapmanız gerekecektir.



Yukarda gördüğünüz gibi  biz ilk satırda RandomForestClassiffier sınıflandırıcı tanımladık sadece iki parametre ayarı yaptık. İkinci satır ise sklearn modelleri  için genel bir yapıdır. fit  fonksiyonuyla sınıflandırıcıya giriş ve çıkış verileri verilip kendini eğitim işlemi başlatıldı. Eğitimm işlemi verinize ve parametrelerinize kullandığınız sınıflandırıcıya göre değişik zaman alabilir. Bizim verimiz büyük olmadığından eğitim işlemi çok kısa sürer.

İlk satırda predict fonksiyonu ile eğitilmiş modelimize test giriş verileri verilip  bu verileri için çıkış değerleri tahmin ediliyor -predictions- . predict fonksiyonuda sklearn modelleri  için genel bir yapıdır.
 ikinci satırda  eğitilmiş model başarı ölçüm fonksiyonlarından birini görüyorsunuz. confusion_matrix fonksiyonu bizden gerçek sonuçlar ve modelin tahminlerini ister ve karşılaştırır. Ve bize matris formunda bir çıktı verir. Şimdi bizim örneğimizde odanın boş olması ve dolu olması durumu var. Modelimizde yine 2 şekilde tahmin yürütebilir. Bu taminler gerçekler sonuçlarla karşılaştırıldığında
  1. Boş Oda -- Boş 
  2. Boş Oda  -- Dolu 
  3. Dolu Oda  -- Boş
  4. Dolu Oda -- Dolu 
 diye tahmin edilebilir. Bu fonksiyon bu  bu yapıyı 2x2 lik bir matris şekline gösterir.
detaylı bilgi için bakınız
Confusion_matrix
Bu bize modelimizin tahmin geçerliliğini gösterir.  Model başarı ölçüm sistemlerinden biriside tahminlerin doğruluk oranıdır. accuracy diye geçer



Doğruluk oranı içinde accuracy_score fonksiyonunu çağırıyoruz. Elbette bu hesabın yapılması için gerçek değerlerin ve tahminlerin verilmesi gerekiyor.  Sonuçda eğittiğimiz model %97.7 bir tahmin doğruluk başarısına sahip.

RandomForestClassiffier modelininin Karar Ağacı yapısında bir sınıflandırıcı olduğunu söylemiştik  Ağaç temelli modellerin Giriş değişkenlerinin önem sıralamasınıda veren bir  özelliği vardır.
Eğitilmiş model eğitim sonrasında feature_importances_  değişkeninde giriş değişkenlerinin önemlerini tutan bir dizi oluşturur. Peki bu liste ne anlama gelir.  Grafiğe dönüştürelim ve görelim.



Kodda ise  Matplotlib  kütüphanesi ile sutun garfiği oluşturuldu. Grafikler sonucları çok daha iyi görmemizi sağlar
Odanın boşmu dolumu olduğunu tahmin etmemizde en çok önemi olan giriş değişkenleri ; grafikden de kolayca görebileceğimiz gibi  Öncelikle aydınlık -Light-  sonra Karbondioksit -CO2 - miktarı  geliyor.

Problemimizin sınıflandırmayla çözümünün de sonuna geldik bir sonraki yazımızda Regresyonla bir bir çözüm daha üreteceğiz.
Görüş ve önerilerinizi bekleriz.

Hayırlı bayramlar

4 yorum:

Unknown dedi ki...

Merhaba ben RandomForestClassifier yerine Gaussian Naive Bayes kullandım.Fakat feature_importances_ özellliğini kullanamadım.
http://scikit-learn.org/stable/modules/generated/sklearn.naive_bayes.GaussianNB.html#examples-using-sklearn-naive-bayes-gaussiannb
API de ilgili bir şey göremedim.Nasıl yapacağım konusunda bilginiz var mı acaba?

Unknown dedi ki...
Bu yorum yazar tarafından silindi.
birol kuyumcu dedi ki...

sorunuzun cevabı yazıda geçiyor "RandomForestClassiffier modelininin Karar Ağacı yapısında bir sınıflandırıcı olduğunu söylemiştik Ağaç temelli modellerin Giriş değişkenlerinin önem sıralamasınıda veren bir özelliği vardır."

Unknown dedi ki...
Bu yorum yazar tarafından silindi.