Sayfalar

Matplotlib etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
Matplotlib etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

Cumartesi, Ocak 28, 2017

Türkiyede Terör

Kaggle da 'Global Terrorism Database' adında bir veri tabanı yayınlanmış. Dünya çapında 1970 - 2015 yılları arasında 150 binden fazla eylem hakkında bilgiler içeren bir çalışma olmuş. merkezi Maryland Üniversitesi'nde bulunan Terörizm ve Terörle Mücadele Çalışmaları için Ulusal Konsorsiyum (START) araştırmacıları oluşturulmuş ve devam ettirilmektedir.




Bizde bu veritabanından ülkemizde gerçekleşen eyemleri gösterelim dedik.



Teror from bluekid on Vimeo.


Yukardaki haritada 1970 den 2015 in sonuna kadar gerçekleşen eylemler harita üzerinde gösterilmiştir.

Veritabanında Türkiyede geçen  3557 eylem var. Bu eylemleri gerçekleştiren  90 örgüt var.  Faili meçhuller de var elbette.

Yıllara göre Gerçekleştirilen eylem sayısı ve ölümler


 En çok eylemin olduğu yıllar ve eylem sayıları

1992    514
2015    416
1994    300
1991    293
1990    195
2012    189
1977    189
1979    141
1995    133
1989    114
Eylemlerde ölen insan sayılarına baktığımızda yıllara göre  en yüksek 10

1992    1233.0
1994     982.0
1990     512.0
2015     490.0
1991     308.0
2012     248.0
1989     232.0
1995     189.0
1987     187.0
1999     127.0
Örgütler Eyemlerine göre sıralarsak Yüzde olarak


PKK % 45 ile en fazla eylem yapan örgüt olmuş. İşin ilginci ikinci sırada % 36 ile faili meçhul eylemler geliyor.

IŞİD 'in eylem sayısı yüzdesi az olduğuna bakmayın En kanlı eylemler sırasında PKK ile başa baş gidiyorlar.

Son olarak 10 ar yıllık periyotlarda göre yine harita üzerinden fakat Ölüm sayısına göre çember büyüklüklerini değişterek çizdirdiğimiz haritalara göz atın. ilk yıl dahil son yıl dahil değil şeklinde





Elbette son haritamızda mecburen 5 yıllık bir veri var. Ama malesef 10 yılları aratmıyor



Son olarak;  Biz burda Dünya çapında hazırlanmış genel bir veritabanı kullandık. Ülke yöneticilerimizin ulaşabilecekleri çok daha detaylı veriler olduğu aşikardır.
Malum ölçemediğiniz şeyi düzeltemezsiniz de, yönetemezsiniz de. Bi-zahmet inceleyip gereken çıkarımları yapsınlar

Not : Bütün işlemler python kullanılarak yapıldı. Kaggle daki sayfada örnekleri görebilirsiniz.  Bende ordaki kodlardan faydalanıp yazdım zaten. Patron duymadan alel acele bloga yazı yazdığımdan ipython-notebook 'u düzenleyip yayınlıyamadım. Kusuruma bakmayın.

Cuma, Ekim 21, 2016

Görünür ve Kızılötesi görüntülerle Gemi Sınıflandırma



Vais from bluekid on Vimeo.




Deniz trafiği kontrolünde gemilerin gece ve gündüz tanınması gerekiyormuş. Bu problemin çözümü için bir veri seti oluşturulmuş ve bir makale yazılmış.




Yukardaki fotoğraflara bakarsanız, geminin tanınması gereken görüntünün çok değişik uzaklardan değişik açılardan çekildiği görünüyor. Keza gündüz kızıl ötesi görüntü alınabilirken, gece el mahkum sadece kızıötesi görüntüler üzerinden tanınması gerekiyor.

VAIS: A Dataset for Recognizing Maritime Imagery in the Visible and InfraredSpectrums

University of Pennsylvania, Gwangju Institute of Science and Technology ve Jet Propulsion Laboratory, California Institute of Technology den araştırmacıların bir çalışması. Çalışmada tanıma algoritması olarak derin öğrenme  'Convolutional neural networks' - CNN kullanılmış. Bütün emeklerin üstüne birde veri setini umuma açmışlar, sağolsunlar.

Bizde fırsattan istifade bu veri setiyle Caffede bir çalışma yaptık. Caffedeki "bvlc_reference_caffenet" modeline ince ayar - fine tune - yaptık.
Caffe neymiş, ince ayar yapmak neymiş diyenler
yazılarımıza müracaat etsinler.

Makalede  görünürde %87, kızılötesinde % 61 başarıya ulaşılmış.



 Bizim ulaştığımız sonuçlar ise Görünürde %98, Kızılötesinde % 92 başarı oldu.

Kızılötesi için:




Gündüz Görüntüleri için 




Cuma, Temmuz 08, 2016

Python İle Yapay Zeka 3

Regresyon :

Problemimizin sınıflandırıcı ile çözümünü yapmıştık şimdide regresyon metodlarından biri ile aynı problemi çözelim.

Biz problemimizde LassoLarsCV metodunu kullanacağız. Liner bir metodun Lars algoritmasıyla ve cross validation ile sağlaması yapılmış bir regresyon modeli çıkarır. Lars ağgoritması için verdiğimiz linke bakın. Cross-validation kavramından bahsedelim biraz.

'Cross Validation' diye de geçen bir terim bu. Türkçeye çapraz doğrulama diye geçmiş. Bir önceki örnekde de görmüştük. Eğitimini yaptığımız sistemin eğitim için kullanmadığımız verilerle doğrulmasının yapılması gerekiyor.  Kabaca anlatırsak ; çapraz doğrulama ile eğitim verisi  istenen sayıda parçaya ayrılır.

Bir parçasının ayrılıp diğerleri ile model eğitilir.  Ayrılan parçası ile doğrulaması yapılarak o modelin performansı ölçülmüş olur.  Sonuçda elede edilen eğitilmiş modellerin  performanslarının ortalaması kullanılır.

Uygulamamıza dönersek. Verimiz zaten hazırdı. Aynı kısımdan devam edersek önce kullanacağımız sistem için gereken çağrıları yapalım



 İlk satırda LassoLarsCv  sınıfını kullanmak için gerkeken çağrıdır. İkinci satırda ise bu tip modellerde performansı artıran bir ön işleme metodudur. 


Scale- Ölçekleme  fonksiyonu ile her değerden ortalama çıkarılıp standart sapmaya bölünerek uygulanıyor.  İlk satırda Ölçekleme için gereken sınıf oluşturuluyor. İkinci satırda Ölçekleme için gerken parametreler fit fonksiyonu ile ve eğitim verisi kullanılarak  elde ediliyor.  Sonraki satırlarda Sonrasında transform fonksiyonu ile gereken ölçekleme işlemleri eğitim ve test verisi için uygulanıyor.

ilk satırda LassoLarsCV sınıfı tanımlanıyor 10 parçalı bir çapraz doğrulama yapılması için parametre olarak 'cv=10' veriliyor.
ikinci satırda diğer sklearn modellerindeki gibi fit fonksiyonu ve eğitim verileri ile eğitim işlemi yapılıyor

bu model yine aynı diğer çoğu sklearn modelinindeki gibi predict fonksiyonu ile eğitilmiş modelimizin test verisi için tahminlerini alıyoruz.

Fakat bu modelimizde sınıflandırmanın aksine tahminler sadece 0 ve 1 arası bir değer olarak hesaplanır.


Modelimizin performansını ölçmek için  bu sayıların bir eşik eğerin altında olanlarını 0  üstünde olanlarını 1 olarak  filitreliyoruz. Eşik değeri olarak orta noktayı seçiyoruz 0.5

Artık tahminlerimizi tıpkı sınıflandırmadaki gibi değerlendirebiliriz.


İlk  satırda karşılaştırma matrisini -confusion matrix-  hesaplıyoruz.  Bu yazımızda konuyu biraz daha açalım bu matrisde sutunlar tahminleri satırlar gerçek değerleri gösteriyor
yani ilk satırda 1638 + 55 = 1693 gerçekde 0 olması gereken gözlem var.  Bunun 1638 i  0 diye doğru tahmin edilmiş 55 tanesine 1 denilmiş Aynı şekilde ikinci satırda yani 1 değeri için 3+969 = 972 gözlem vardır bunlardan 969 tanesi 1 diye doğru tahmin edilmiş 3 tanesi 0 diye yanlış yahmin edilmiş.

Sınıflandırma örneğimizde giriş özelliklerinin önem derecesini görmüştük.  Şimdi kullandığımız metod da aşağı yukarı aynı amaç için coef_ özelliğini kullanıyoruz.



Regresyon modelimiz de de en önemli giriş özellikleri sırası ile Aydınlık değri Light  ve  Karbondioksit değeri CO2. Sınıflanırdmadaki modelimizin aksine bu iki özellik dışındakilerin bir önemi görünmüyor.

Eşik değerini  orta nokta olarak seçtik farklı eşik değerleri için tahminlerimizin doğruluk oranı değişirmi ?




Hesaplayalım  Yukardaki kodda hem eğitim verisi hemde tes verisi için tahminler yapılıp değişik eşik değerleri için doğruluk oranları hesaplanıyor. eğitim ve test verisi doğruluk oranını  ortalamalırnın maksimum olduğu eşik değeri hesaplanıyor.


Hesaplanmı eşik değerlerini grafik olarak gösteriyoruz ve altında bulduğumum optimum eşik değeri için hesaplanan eşik değerlerini yazıyoruz.

Koda ulaşmak için buraya bakabilirsiniz 

Evet Bir yazımızın daha sonuna geldik. Eğer Uygun zaman ve uygun bir veri seti bulabilirsem bu yazı serisinin bir sonrakinda Danışmansız - Unsupervised - metdola ilgili bir uygulama yapmak ve anlatmak istiyorum. Her türlüğörüş öneri ve sorularınızı bekleriz.

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