Sayfalar

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

Pazartesi, Eylül 10, 2018

Ses ile Kalp Atışı Sınıflandırma

Evet başlığından da anlaşılacağı üzere yine sağlık alanında bir yazımız var. Bu seferek verimizi ses olarak alıyoruz.



Verimizin kaynağı yine Kaggle 
https://www.kaggle.com/kinguistics/heartbeat-sounds

Biz kaggle dan ulaşmış olsakda asıl verinin kaynağı 2011 tarihli bir yarışmadan geliyorumuş
http://www.peterjbentley.com/heartchallenge/index.html 
İki ayrı şekilde kaydedilmiş ses dosyaları var
ilki "iStethoscope Pro" isimli bir iphone uygulaması kullanılarak kaydedilmiş sesler


Kalanlar  "DigiScope" marka bir dijital steteskop ile alınmış



Ses dosyalarının uzunlukları farklı tahmin edeceğiniz gibi ses dosyalarının çoğuda Normal seslerden oluşuyor.
Önce ses dosyalarımızı test ve eğitim olarak iki guruba ayırıyoruz.
Eğitim %80
Test %20

 Bu ayrımdan sonra ses dosyalarımızı 0.5 saniyelik kaydırmayla 2 saniyelik kısımlara bölüyoruz. ve giriş verisi olarak bunu kullanıyoruz.Yani giriş verimiz 2 saniyelik ses sinyali. Elimizdeki ses dosyalarına göre konuşursak  ( sample rate 22050 )  44100 lük vektörü giriş olarak kullanıyoruz.


Veri dosyalarımızı oluşturduktan sonra tek boyutlu evrişim katmanları kullanan bir ağ tasarladık ve bir sınıflandırıcı eğittik.

  • Opimizasyon metodu : Adam
  • Toplam parametre sayısı :  1,366,865
  • Eğitim Epoch sayısı : 29 - earlystop ile -
 Eğitim grafiği


Modelin başarısı  eğitim için kullandığımız datalarla %95 in üzerinde

Eğitim için kullanmadığımız datalarla yaptığımız  test ve sonuçlarıda şöyle gösterelim


ortalama %73 -75 arası bir başarı görünüyor.

Başarının düşük olması ve  artımamız gerektiği bir gerçek elbette. Ama sadece ham ses sinyali vererek. Bir dönüşüm -fft mel vs gibi - yapmadan bir sınıflandırıcı eğitilebilmeside zannımca çok önemli bir özellik.

Fırsat bulabilirde bu çalışmaya tekrar dönebilirmiyiz bilemiyorum ama. Bu çalışmaya devam isteyenlere ilk önce ses sinyalinde kalp atış kısımlarının ayrıştırılması sonrasında bu çalışmanın yapılmasının başarıyı oldukça yükselteceğini düşünüyoruz.

Her türlü görüş ve önerilerinizi bekleriz.

Pazar, Temmuz 08, 2018

EKG Kalp Atışı Sınıflandırması 6

Sonuçların Analizi ;


Kalp atışı sinyalinin sınıflandırılması amacıyla bu yazımıza kadar 9 metodu kullandık. Yukarıda gördüğünüz grafiği bu sonuçları kullanarak oluşturduk.
Tabloyu da görelim sayılar daha net gözüksün


Tablodan görüldüğü üzere, Derin öğrenme için uyguladığımız 3 ağ tipinden, Conv1d ve LSTM sırayla ilk iki sıraya yerleştiler.  İlk sıradaki Evrişimli yapay sinir ağı, her 3 ölçüt e  - precision,     recall, f1-score - görede  en iyi sonuca ulaştı. Derin öğrenmenin  bu iki modelini Boosting metodları takip ediyor. Sırayla Light GBM, Xgboost, CatBoost , üçüncü , dördüncü ve beşinciliğe yerleşiyorlar. Hemde pratik anlamda ulaştıkları sonuçlar bir birlerinden pek farklı değil. Üstelik 'F' tipi sinyal için derin öğrenme metodlarından daha iyi bir sonuca ulaşmış. Sinyal sınıflarının f1-skor değerlerine göre grafiğine bakalım















Bu bize gösteriyorki, illa derin öğrenme gibi bir müşkülata girmeye gerek yok. Boosting metodlarıda pek güzel işimizi görebilir.

Son olarak En başarılı iki metod olan Conv1D ve LSTM sonuçlarını birleştirince - Ensemble -, bir gıdım daha iyileşme oluyor.

 Classification Report
             precision    recall  f1-score   support

          N      0.990     0.997     0.993     18118
          S      0.933     0.804     0.864       556
          V      0.973     0.954     0.963      1448
          F      0.856     0.735     0.791       162
          Q      0.997     0.987     0.992      1608

avg / total      0.987     0.987     0.987     21892
Elbette bunlar bizim ulaşabildiğimiz sonuçlar.  3. yazımızda geçen metodolojiyi çok daha sistematik ve derinlemesine uygulanırsa sonuçların bir nebze daha iyi olabileceğini düşünüyorum. İlk yazılarımızda bahsetmiştik veri kümemiz sınıf  bazında dengesiz. Buna dair sınıf bazında ağırlıklar yada özel hata fonksiyonları - loss - denenebilir.

Karşılaştırma ;


Veri setini hazırlayanların, yazdığı makalede paylaşılan , sonuç tablosu şöyle ;

Görüldüğü gibi , makaleye göre daha başarılı  sonuçlara ulaşmışız.  Tabloda geçen diğer çalışmaların aynı veri seti üzerinde yapılmadığından karşılaştırmanın çok sağlıklı olmayacağını düşünüyorum.

Son olarak "müşteri her zaman haklıdır" düsturunca.

"Bir çalışma yaptık , Doktorlardan daha iyi kalp rahatsızlığını tespit ediyor !!! "  
mealinde gaflet içinde bir cümle ASLA kurmuyoruz.
Doğrusunun, çalışmanın uygulanabilirliğini, konunun UZMANLARIYLA - yani doktorlarla - görüşerek yapılması gerektiğini söylüyoruz.

Bunca Yazıyı sabırla okuduysanız tebrik ediyoruz. Her türlü eleştiri , görüş ve önerilerinizi bekleriz.


Cumartesi, Temmuz 07, 2018

EKG Kalp Atışı Sınıflandırması 5

Derin Öğrenme

Evet son olarak günümüzün en popüler ve en güçlü yapay öğrenme metodu olan derin öğrenmeye geldi sıra. Malumunuz biz keras kütüphanesini kullanıyoruz. Bu problemi çözmek için 3 tane ağ tasarladık.  Hepsi için ortak kullanıdğımız parameterler şöyle
  • batch_size :  128
  • epochs :  120
  • optimizer :  adam

 Dense ;

İlki klasik yapay sinir ağı diyebileceğimiz, keras daki "Dense" katmanlarıyla oluşturulmuş bir ağ. Sklearn deki MLP nin benzeri bir çözüm diyebiliriz. Farklılığına gelirsek burda biz bunu keras kütüphanesini kullanarak uyguladık, ve 'Dropout' denen katmanlarda ilave ettik.


Eğitim grafiğimiz


Sonucumuz
  Classification Report
             precision    recall  f1-score   support

          N      0.983     0.995     0.989     18118
          S      0.916     0.664     0.770       556
          V      0.951     0.941     0.946      1448
          F      0.911     0.698     0.790       162
          Q      0.986     0.978     0.982      1608

avg / total      0.979     0.980     0.979     21892

Conv1D;

İkinci olarak Tek boyutlu evrişim katmanlarının kullanıldığı VGG tipi bir ağ tasarladık. Kısaca iki evrişim katmanı sonrasında boyut küçültme - bakınız pooling -  şeklinde tarif edilebilecek bir yapı.
Ağ yapımız böyle



Eğitim Grafiğimiz



 Sonucumuz
 Classification Report
             precision    recall  f1-score   support

          N      0.990     0.996     0.993     18118
          S      0.895     0.809     0.850       556
          V      0.971     0.950     0.960      1448
          F      0.826     0.735     0.778       162
          Q      0.998     0.986     0.992      1608

avg / total      0.985     0.986     0.986     21892

LSTM;

Son olarak Özyinelemeli Sinir Ağları - RNN - denen ağ yapısının en bilinen tipi olan LSTM  kullanıldı.  Bu tip ağlarda vectörel biri giriş değil, zaman da değişen değerler öğrenilir. Dizilimden bir sonuca ulaşma tipine "many to one"  diyorlar.

The Unreasonable Effectiveness of Recurrent Neural Networks
 Andrej Karpathy nin yukardaki yazısından detaylara ulaşabilirsiniz. Konuyu dağıtmadan devam edelim

Ağ yapımız şöyle



Eğitim Grafiğimiz



Sonucumuz
 Classification Report
             precision    recall  f1-score   support

          N      0.986     0.997     0.991     18118
          S      0.915     0.755     0.828       556
          V      0.964     0.938     0.951      1448
          F      0.813     0.673     0.736       162
          Q      0.996     0.980     0.988      1608

avg / total      0.982     0.983     0.982     21892

Sonuçlar hakkındaki görüşlerimizi bir sonraki yazıya bırakıyoruz. Sadece bu yazımıza kadar denediğimiz metodlardan en başarılısı evrişimli yapay sinir ağını uyguladığımız oldu deyip bitiriyoruz. Her türlü görüş ve önerilerinizi bekleriz.

Çarşamba, Temmuz 04, 2018

EKG Kalp Atışı Sınıflandırması 4

Gradient Boosting Kütüphaneleri ile Sınıflandırma

Boosting ve gradient boosting genel algoritmalar. Yaygın olarak bilinen hali karar ağaçlarıyla çalışanı. Çok kaba bir özet geçersek. Zayıf sınıflandırıcılar olan küçük karar ağaçlarının birleştirilmesiyle  oluşturulmuş güçlü bir sınıflandırıcı oluşturulmaya çalışılıyor.



Gradient Boost 'un sklearnin içinde de var. Fakat biz harici kütüphaneler olana XGBoost, Light GBM ve CatBoost 'u burada kulanacağız

XGBoost :  İlk çıkan ve popüler olan kütüphane. Özellikle Kaggle yarışmalarında çok kullanılıyordu.
Tantım yazısı ;
XGBoost is an optimized distributed gradient boosting library designed to be highly efficient, flexible and portable. It implements machine learning algorithms under the Gradient Boosting framework. XGBoost provides a parallel tree boosting (also known as GBDT, GBM) that solve many data science problems in a fast and accurate way. The same code runs on major distributed environment (Hadoop, SGE, MPI) and can solve problems beyond billions of examples.

LightGBM : Microsoft 'un geliştirdiği açık kaynak kodlu bir kütüphane, Epey güçlü ve yaygınlaşmaya başladı.
Tanıtım yazısı;
 A fast, distributed, high performance gradient boosting (GBDT, GBRT, GBM or MART) framework based on decision tree algorithms, used for ranking, classification and many other machine learning tasks.

CatBoost : Yandex'in geliştirdiği açık kaynak kodlu bir kütüphane, Nispeten çok daha az biliniyor ama en az rakipleri kadar güçlü. Yaygınlaşmaya çalışıyor.
Tanıtım yazısı;
 CatBoost is an open-source gradient boosting on decision trees library with categorical features support out of the box for Python, R

 Konunun detayları hakkında bir kaç bağlantı verip geçiyoruz.

 Kullanımları 

 Sklearn tipi bir kullanımları var.  Sınıflandırıcı nesnenizi oluşturuyorsunuz. "fit" fonksiyonu ile eğitim , "predict" fonskisyonu ile tahmin yapıyorsunuz.

XGboost için   :  "XGBClassifier" sınıfı kullanılıyor


Sonuç :
             precision    recall  f1-score   support

          N      0.981     0.999     0.989     18118
          S      0.966     0.667     0.789       556
          V      0.977     0.921     0.948      1448
          F      0.894     0.728     0.803       162
          Q      0.994     0.965     0.979      1608

avg / total      0.980     0.981     0.980     21892


LightGBM  için : "LGBMClassifier" sınıfı kullanılıyor


Sonuç:
              precision    recall  f1-score   support

          N      0.982     0.999     0.990     18118
          S      0.974     0.683     0.803       556
          V      0.980     0.927     0.953      1448
          F      0.876     0.741     0.803       162
          Q      0.995     0.973     0.984      1608

avg / total      0.982     0.982     0.981     21892

CatBoost için : "CatBoostClassifier" sınıfı kullanılıyor.



Sonuç :
              precision    recall  f1-score   support

          N      0.982     0.997     0.989     18118
          S      0.931     0.680     0.786       556
          V      0.973     0.918     0.945      1448
          F      0.848     0.722     0.780       162
          Q      0.987     0.972     0.980      1608

avg / total      0.979     0.980     0.979     21892

Sonuçlar çok büyük farklılık göstermiyor.
Boosting kütüphaneleri ile yaptığımız denemelerin sonuçları böyl. Bir sonraki yazımızda kısmetse derin öğrenme ile aynı probleme çözüm bulmaya çalışacağız. Her türlü görüş ve önerilerinizi bekleriz.

Salı, Temmuz 03, 2018

EKG Kalp Atışı Sınıflandırması 3

Scikit-Learn ile Sınıflandırma

Scikit-Learn  Python 'un standart Yapay Öğrenme kütüphanesidir.  Kalp atışı sınıflandırma problemi için bu kütüphane ile başlayacağız. Bu kütüphane devasa bir kütüphane aklınıza gelen hemen her tür metod için sınıflar, fonksiyonlar eklenmiştir. Pek çok sınıflandırıcıda hali hazırda emrinize amade beklemedektedir


Yukardaki resim sınıflandırıcı metdolarını karşılaştırmak için yazılmış örnek kodun çıktısıdır.

Sınıflandırıcı için alt sınırımızdan bahsetmiştik geçenki yazımızda. Bütün örneklere normal dersek %82 başarılı çıkıyordu. Önce onu deneyelim


Bu basit ve sade tahmin sistemi bizim alt çizgimiz bu yöntemle ulaştığımız sonuçlardan daha iyi sonuca ulaşamayan, sınıflandırcı metodlarını bu problem için kullanmanın anlamı yok.

Verimiz hazır, sklearn 'ün bir sürü sınıflandırıcısı da elimizin altında. Bundan sonra izleyeceğimiz metodloji şöyle
  1. Sınıflandırıcı Nesnesini oluştur.
  2. Eğitim verisi ile modeli eğit - fit fonksiyonu -
  3. Eğitilmiş model ile doğrulama  verisinden tahmin yaptır - predict -
  4. Tahmin edilmiş değerlerle gerçek değerleri karşılaştır - classification_report fonksiyonu -
  5. Karşılaştırılımış sonuçlar yeterince iyi ise 8. maddeye git
  6. Karşılaştırılımış sonuçları daha iyi hale getirmesni umduğumuz parametre değişikliklerini yap
  7. Yeni parametrelerle 1. maddeye dön
  8. Eğitilmiş model ile test verisinden tahmin yaptır - predict -
  9.  Tahmin edilmiş değerlerle gerçek değerleri karşılaştır - classification_report fonksiyonu -
bu admlardan en muğlak olan 6. olan  daha iyi sonuca ulaştıracak parametre değişikliği.  Bunu yapabilmek için ilk etapta Sınıflandırıcı nasıl çalışır , parametreler ne anlama gelir, bilgi sahibi olmamız lazım. Bunlara ek olarak hangi tür verilerde hangi tip değişiklikler olumlu etkiliyor  gibi tecrübe de gerekiyor. İlki İçin okuyup araştıracaksınız. İkincisi için tecrübe edeceksiniz.

Başlayalım denemelere 3 tip sınıflandırıcı deneyeceğiz.

KNN -  K-En Yakın Komşuluk

 Genellikle KNN olan kısaltılmış adıyla bilinir. KNN genel anlamda hem sınıflandırma hem de regresyon için kullanılabilir. Sklearn de sınıflandırıcı olarak kullanmak için "KNeighborsClassifier" kullanılır. Metodda veriler vektörel olarak ifade edilir. Tahmin işlemi için verilen vektör K adet en yakın komşusunun durumuna göre cevaplanır. Eğer Sınıflandırma problemi ise, K adet komşunun sınıflarının oy çokluğudur. Eğer regresyon ise En Yakın K adet komşusunun değerlerinin ortalamasıdır.
Mesela aşağıdaki grafikte rengi belli olmayan noktanın sınıfı, kendisine en yakın K = 3 komşusunun
rengine göre seçilir.


2 komşusu kırmızı, bir komşusu mavi, sonuç kırmızıdır.


SVM – Destekleyici Vektör Makinesi

Support Vector Machines; Destekçi Vektör Makinesi diye tercüme edilse de Türkçe kaynakların pek çoğunda kısaltma ismiyle SVM olarak geçer. Çekirdek -kernel- fonksiyonu ile veriler hiper uzaya aktarılır, guruplar arası hiper düzlemler hesaplanır. Bu düzleme en yakın veriler - ki destek vektörleri denir - kullanılarak, düzlem guruplar arası en optimum konuma yerleştirilir.
Sınıflandırma  aşamasında da veri hiper uzaya aktarılır ve eğitim verisiyle oluşturulmuş hiper düzleme olan konumuna göre değerlendirilir.






Grafikle kafanızda canlandırmaya çalışalım. Kırmızı ve mavi iki ayrı sınıfa ait veriler ve uzayda şekildeki gibi görünsün. Bu iki gurubu ayrıştıran bir doğru bulalım. Fakat şöyle bir durum var; bu iki gurubu ayrıştıran sonsuz sayıda doğru bulunabilir. Bir kaç tanesini kesik çizgili olarak çizdik. SVM eğitimi ile doğrumuzu guruplar arası en optimum yere taşıyoruz. Grafikteki yeşil çizgi gibi. Doğru bir kez tespit edildikten sonra kullanımı kolaydır. Bulduğumuz doğrunun solunda kalanlar mavi, sağında kalanlar kırmızıdır.
Sklearn de  sınıflandırıcı olarak kullanmak için  "SVC" kullanılır.

Yapay Sinir Ağı

Klasik çok katmanlı Yapay Sinir Ağı. Sklearn de "Multi-layer Perceptron" diye geçiyor. Hem regresyon hem sınıflandırma için kullanılabiliyor. Sınıflandırma problemi için "MLPClassifier" kullanılıyor. Metodun çalışma sistemi için açıklama yazmayacağım, Çünkü eski yazılarımızda çok fazla işlediğimiz bir konu. Biraz zahmet olacak ama kusura bakmayın...

Sonuçlar

KNN

             precision    recall  f1-score   support

          N      0.979     0.995     0.987     18118
          S      0.882     0.671     0.762       556
          V      0.946     0.906     0.926      1448
          F      0.791     0.679     0.731       162
          Q      0.994     0.954     0.973      1608

avg / total      0.974     0.975     0.974     21892

SVM

             precision    recall  f1-score   support

          N      0.961     1.000     0.980     18118
          S      0.984     0.570     0.722       556
          V      0.987     0.772     0.866      1448
          F      0.854     0.648     0.737       162
          Q      0.999     0.917     0.957      1608

avg / total      0.966     0.965     0.962     21892

YSA

             precision    recall  f1-score   support

          N      0.980     0.995     0.987     18118
          S      0.886     0.631     0.737       556
          V      0.966     0.901     0.932      1448
          F      0.815     0.654     0.726       162
          Q      0.979     0.979     0.979      1608

avg / total      0.975     0.976     0.975     21892

Sklearn ile yaptığımız denemelerin sonuçları böyle bundan sonraki  aynı konulu yazılarımızda, Başka kütüphaneler  ve metodlarla denemeler yapmaya çalışacağız. Her türlü görüş ve önerilerinizi bekleriz.

Pazar, Temmuz 01, 2018

EKG Kalp Atışı Sınıflandırması 2

Veri kümesini okuma

Indirdiğimiz sıkıştırılmış dosyayı açtığımızda 4 tane csv  dosya çıkıyor. Bu dosyalardan ikis bizim kullanacağımız "MIT-BIH Arrhythmia" isimli veri kümesine ait. csv uzantılı dosyalar  metin tipinde ve değerler arasında genellikle 'virgülle ayrılmış dosyalardır. 
"mitbih_train.csv"  : 188 sutunlu son sutun etiket değeri ve 87554  örnek içeriyor
"mitbih_test.csv"  : 188 sutunlu son sutun etiket değeri ve 21892  örnek içeriyor
Veriler hazırda eğitim ve test için ayrılmış durumda ama biz ilave bir ayrım daha getireceğiz. Doğrulama - validation -  denen bu ayrılmış veri tıpkı test verisi gibi doğrudan eğitmde kullanılmaz. Fakat eğitim algoritmalarının hemen hemen her türünde ayarlamanız gereken parametreler vardır.  Hiper parametre denen bu değişkenlerin  değişimi ile aynı model aynı veri kümesi için çok değişik sonuçlar verebilir. Değişkenlerin en doğru değerlerinin tespiti için teorik bir formül yoktur. En iyi sonuca ulaşmak için genellikle denemeler yapılır. Deneme sonucunun iyi yada kötü olduğuna ancak eğitim de kullanılmamış verilere nasıl sonuçlar verdiğine bakarak karar verilir. İşte Doğrulama verisi diye geçen kısmın amacı budur.  Test verisiyle Doğrulama verisi aynı olamazmı. Olur hatta genelliklede öyle yapılır. Eğer yeterince fazla veriniz varsa ayrı ayrı olması daha doğru olur. Çünkü peyder pey hiperparametrelerle modelimizin performansını yükseltiriz. Ama farkında olmadan eğitim için kullanmadığımız veriden gelen bilgilerle düzeltmeler yapmış olabiliriz. Bu durumda test için ulaştığımız sonuçlara güvenemeyebiliriz.  Biz bu çalışmada bunu uygulamak amaçlı  3 e ayıracağız.
Eğitim verisinin %20 sini doğrulama verisi olarak ayırıyoruz. İlk aşamada kullanmayacağız ama sonra hiper parametre ayarlarında kullanmak üzere ayıracağız.

csv uzantılı dosyaları okumanın pek çok yolu vardır.  Biz numpy nin loadtxt fonksiyonunu kullanıyoruz ve sklearn 'ün train_test_split fonksiyonuyla doğrulama - validation  - kısmını ayırıyoruz.



Dataların dağılımlarına bakıyoruz. Hangi sınıfdan  ne kadar örnek var bunu görmek önemli.


Örnek verelim. Eğitim verimizdeki Normal örneklerin sayısı, eğitim veri sayımızın %82 kusuruna denk geliyor. Yani her örneğe doğru diyen bir sınıflandırma modeli toplamda %82 doğrulukta başarılıymış gibi görünür. Bunun ana sebebi veri kümesindeki dengesiz veri dağılımıdır. Ama gerçek hayatta da çoğunlukla bu tip dengesiz verilerle uğraşmak gerekiyor. Dengesiz veri kümesi problemi çok geniş burda geçiştirmenin anlamı yok. Eğer kısmet olursa bir başka yazıda yazarız inşallah.

Bu dağılımla tek başına doğruluk - accuracy -  değerinin bir şey ifade etmediğini başka ölçüm -metric - kıstaslarına bakmak gerektiğini anlıyoruz.



Çok sınıflı bir tahmin yapmaya çalışıyoruz. Yukardaki resim örneğindeki gibi İki hata durumumuz var;
"Hamile olmayana hamilesin" diyebiliriz.
Yada tersi "hamile olana hamile değilsin" denebilir.
Bunun dışındaki iki doğru seçenek var ;
"hamileye hamile"
"hamile olmayana hamile değilsin"
demek
Bu ana tanımlar sonrası bunlardan hesaplanan recall (duyarlılık) , precision (kesinlik) ve f1 skoru denen ölçütler var.  Bunları sklearn ün classification_report ile hesaplattırabiliyoruz. Teferruatlarına bakmak isterseniz internette, Ölçüt çeşitleri ve nasıl hesaplandıklar iyi ve kötü  yanları ile ilgili pek çok kaynak bulabilirsiniz.  Mesela bakınız;  "Sınıflandırma Modellerinde Başarı Kriterleri"


Yazı uzunluğu okunabilirlik limitini aşmak üzere,
Veri kümesi üzerinde çeşitli  Yapay Öğrenme metodlarının denenmesini bir dahaki yazımıza bırakıyoruz. Buraya kadar sabırla okuğunuz için teşekkürler.
Her türlü görüş ve önerilerinizi bekleriz.

Cumartesi, Haziran 30, 2018

EKG Kalp Atışı Sınıflandırması 1

Giriş :


Malumunuz Kalp en hayati organlarımızdan biri.  Ölüm sebeplerinin başlıcalarından biride kalp krizi. EKG de kalbin gidişatını doktorlara gösteren temel bir test. Hatta kardiyolojiye gidip selam verseniz. EKG çektir derler. Konuyu dağıtmadan, teferruatlı bilgi için konunun uzmanlarına ulaşın. deyip geçelim.

Bizim konuyla ilgimiz, EKG verileri ile sınıflandırma çalışması yapılması konusunda. Çok popüler bir test ve önemli olması sebebiyle, internette pek çok veriye ulaşmanız mümkün. Biz burdaki çalışmamızda, Kaggle da Shayan Fazeli tarafından yayınlanmış olan "HeartBeat" veri kümesini kullanacağız.

Bu veri kümesi;
"ECG Heartbeat Classification: A Deep Transferable Representation"
Mohammad Kachuee, Shayan Fazeli, Majid Sarrafzadeh
University of California, Los Angeles (UCLA)
Los Angeles, USA
arXiv preprint arXiv:1805.00794 (2018)

çalışmada kullanılmıştır.
Normalde Bir EKG test sonucu

şeklinde görnür.  Bu makalede Bu tip EKG ölçümü alınıp, Temizlenip, kalp atımlarına ayrılıp standartlaştırılmıştır.

 
Bölünmüş ve normalize edilmiş kalp atım siyaline gerekiyorsa sonuna sıfırlar doldurularak - padding- stanart bir uzuluğa - 187 - getirilmiştir.
Bu kalp atım siyalinin etiket değeri olarak 5 seçenek var
['N', 'S', 'V', 'F', 'Q']

yukarda bahsettiğimiz makalenin tablo 1 de bu sınıfların açıklaması olarak



yazılmıştır.  Aslında bu verileri  the MIT-BIH Arrhythmia Dataset alıp dönüştürmüşler.  Biz hazır temizlenmiş ve düzenlenmiş olduğu için tercih ettik. Sağlık alanında pek çok değişik veriye bu siteden ulaşabilirsiniz.
https://physionet.org/physiobank/database/
Eğer sağlık alanındaki çalışmalara ilgi duyuyorsanız. Uygulama yapmak istiyor ve veri kümesi arıyorsanız. Yukardaki siteyi inceleminizi tavsiye ederiz.

Verimize geri dönersek, 187 lik bir vectör şeklinde kalp atım sinyalimiz var. Bu sinyalin 5 sınıf içinden hangisine ait olduğunu tahmin edecek bir sistem geliştirmemiz gerekiyor.

Kaggle dan veri dosyasını indirip bir dizine açıyoruz. Veri kümesinde iki farklı veri kümesi var. Biz mitbih ile başlayan 5 sınıflı "MIT-BIH Arrhythmia" isimli veri kümesini  kullanacağız.
"mitbih_train.csv"  : 188 sutunlu son sutun etiket değeri ve 87554  örnek içeriyor
"mitbih_test.csv"  : 188 sutunlu son sutun etiket değeri ve 21892  örnek içeriyor
Elimizdeki veri kümesi üzerinde değişik metodlarla çalışma yapmak istiyoruz. Bu çalışmaları takip eden yazılarımıza bırakıyoruz.
Şimdilik anlatacaklarımız bu kadar. Bayda uzamış, buraya kadar sabırla okuğunuz için teşekkürler . Her türlü görüş ve önerilerinizi bekleriz.

Pazar, Haziran 29, 2014

İnsan Beyninin Şifresini Çözmek


İnsan beyni günümüzde pek çok alanda ve değişik şekillerde araştırma konusudur.  İşleyişinin çözülmesi ve anlaşılabilmesi pek çok yeniliğe ön ayak olacaktır.



İnsan Beyni Nöron denilen sinir hücereerinin oluşturduğu bir ağ yapısıdır. Ve sürekli bir elektriksel iletşim halindedir.  Beyindeki bu elektriksel faaliyet dışarıdan değişik şekillerde ölçülerek, işleyşi hakkında fikir edinilmeye çalışıyor.

Şöyle örnekliyelim Çok kompleks bir fabrikanın faaliyetlerini ve işleyişlerini bina dışından çıkan sesi dinleyerek anlamaya uğraşıyoruz.

Olay bütün bütünde umutsuz değil. Beynin değişik bölümlerinin olduğunu ve dinleyeceğimiz alanı seçmemizede yardımcı oluyor.


Pazar, Ocak 27, 2013

Yapay Sinir Ağları ile EEG Sınıflandırma

EEG, ElektroEnsefaloGrafi'nin kısaltmasıdır. Beynimiz çok düşük şiddette sürekli eletkrik akımı üretir ve dalgaları düzenli bir şekilde yayar, EEG bu sinyalin  kaydedilmesi işlemidir.

EEG sinyallerinin işlenmesi ve üzerinden bilgi çıkarılmasının pek çok uygulama alanı var. İlk etapta çeşitli hastalık teşhisleri için ;
 Elektroensefalografi (EEG), epilepsili hastaları ve şüphe oluşturan nöbet bozuklukları olan hastaları incelemekte kullanılan önemli bir tetkiktir. 

Bir başka alan, Brain Computer Interface  yani Beyin Bilgisayar Arabirimi çalışmaları için  Bu alanında

 oyun oynamaktan tutunda

yapay organ kontrolüne kadar  sayılmayacak kadar uygulama imkanı var.

Cumartesi, Şubat 05, 2011

Yapay Zeka Tıbbın Hizmetinde 5 ( Fetal Cardiotocograms )

Bir  Yapay Zeka Tıbbın hizmetinde yazısıyla yine karşınızdayız. İşin açıkçası içindeki tabirler tıbbi terimler olduğundan tercüme etmeğe kalkışmadım. Zaten bizim için sadece Yapay Sinir Ağları ile sınıflandırma işlemiydi


2126 fetal cardiotocograms (CTGs) were automatically processed and the respective diagnostic features measured. The CTGs were also classified by three expert obstetricians and a consensus classification label assigned to each of them. Classification was both with respect to a morphologic pattern (A, B, C. ...) and to a fetal state (N, S, P). Therefore the dataset can be used either for 10-class or 3-class experiments.

Attribute Information:

LB - FHR baseline (beats per minute)
AC - # of accelerations per second
FM - # of fetal movements per second
UC - # of uterine contractions per second
DL - # of light decelerations per second
DS - # of severe decelerations per second
DP - # of prolongued decelerations per second
ASTV - percentage of time with abnormal short term variability
MSTV - mean value of short term variability
ALTV - percentage of time with abnormal long term variability
MLTV - mean value of long term variability
Width - width of FHR histogram
Min - minimum of FHR histogram
Max - Maximum of FHR histogram
Nmax - # of histogram peaks
Nzeros - # of histogram zeros
Mode - histogram mode
Mean - histogram mean
Median - histogram median
Variance - histogram variance
Tendency - histogram tendency
CLASS - FHR pattern class code (1 to 10)
NSP - fetal state class code (N=normal; S=suspect; P=pathologic)
 Orjinal verinin 2 çeşit çıktısı var. İlkinde 10 çeşit FHR tipinden hangisi olduğu, ikincisinde ise üç çeşit Fetal State için (N=normal; S=suspect; P=pathologic) bir sınıflandırma var. Biz Örneğimiz için ikincisini kullandık.
Bütün YSA işlemleri FannTool ile yapıldı. Bir Önceki örneğimizdeki gibi program yazmadık sonuçalrı Excell Dosyasındaki "Full Sonuç-Eğitim" ve "Full Sonuç-Test" sayfalarında görebilirsiniz

Eğitim Verileri için Başarı Oranı :  % 98,72  (  1488 Örnekden  1469 Doğru )
Test Verileri için  Başarı Oranı   :  % 94.2  ( 638 Örnekden 601 Doğru  )
Dosyalar İndirmek İçin :  CTG.zip
Not :  "Yapay Zeka Tıbbın Hizmetinde" serisinin önceki yazıları 1 2 3 4

Pazar, Nisan 04, 2010

Yapay Zeka Tıbbın Hizmetinde 4 ( Acute Inflammations )


FANN 'ın C# ile kullanımını göstermek için uygun bir fırsat bekliyorduk. Ve şimdi karşınızdayız
Acute Inflammations veri setini kullandık. Veriler bir uzman sistem için oluşturulmuş ama biz YSA kullancağız.


Konunun detayını aynen aktarıyorum. ( Zaten iyi olmayan ingilizcemle birde Hiç bilmediğim Tıp alınandaki yazıyı çevrime cüretini gösteremedim anlayacağınız )

The main idea of this data set is to prepare the algorithm of the expert system, which will perform the presumptive diagnosis of two diseases of urinary system. It will be the example of diagnosing of the acute inflammations of urinary bladder and acute nephritises. For better understanding of the problem let us consider definitions of both diseases given by medics. Acute inflammation of urinary bladder is characterised by sudden occurrence of pains in the abdomen region and the urination in form of constant urine pushing, micturition pains and sometimes lack of urine keeping. Temperature of the body is rising, however most often not above 38C. The excreted urine is turbid and sometimes bloody. At proper treatment, symptoms decay usually within several days. However, there is inclination to returns. At persons with acute inflammation of urinary bladder, we should expect that the illness will turn into protracted form.

Acute nephritis of renal pelvis origin occurs considerably more often at women than at men. It begins with sudden fever, which reaches, and sometimes exceeds 40C. The fever is accompanied by shivers and one- or both-side lumbar pains, which are sometimes very strong. Symptoms of acute inflammation of urinary bladder appear very often. Quite not infrequently there are nausea and vomiting and spread pains of whole abdomen.  The data was created by a medical expert as a data set to test the expert system, which will perform the presumptive diagnosis of two diseases of urinary system. The basis for rules detection was Rough Sets Theory. Each instance represents an potential patient
Attribute Information:

a1 Temperature of patient { 35C-42C }
a2 Occurrence of nausea { yes, no }
a3 Lumbar pain { yes, no }
a4 Urine pushing (continuous need for urination) { yes, no }
a5 Micturition pains { yes, no }
a6 Burning of urethra, itch, swelling of urethra outlet { yes, no }
d1 decision: Inflammation of urinary bladder { yes, no }
d2 decision: Nephritis of renal pelvis origin { yes, no }


 Yapılan işlem diğerlerinden farklı değil aslında. Yinede soracağınız bir şey olursa biz buralardayız. YSA eğitimi için yine FannTool 'u kullandık. ve sonuçda Eğitilen YSA oldukça iyi oldu. Başarısı hem test hemde Eğtim verileri için % 100.

C# kısmında Basit bir GUI tasarlayıp Giriş değerlerini Kullanıcadan alıp Eğitilmiş YSA'yı bu giriş değerleriyle çalıştırmak. Ve tabii ki sonuçlarıda göstermek.


Indirmek için :   Acute_Inflammations

Not :
  • Artık Ben C# kullanıyorum FANN'ı nasıl kullanabilirim ? sorusununda cevabını vermiş oluyoruz. 
  • Böyle el alemin yayınladığı veriler yerine Sizin verilerinizide  kullanılabilir, Mümkün mertebe yardımcı olmaya çalışırız duyrulur...
  • "Yapay Zeka Tıbbın Hizmetinde" serisinin önceki yazıları 1 2 3

Cumartesi, Mayıs 23, 2009

YSA ile Kan Bağışı tahmini

UC Irvine Machine Learning Repository sitesinden indirdiğimiz bir gurub veriyi kullanıyoruz

Blood Transfusion Service Center Data Set

Veriler Tayvanın Hsin-Chu şehrinde bir kan bankasının veri tabanından çıkarılımış. verilerimiz nelerden oluşutuğuna şöyle bir bakarsak

R (Recency - months since last donation),
Yani En son bağışı üzerinden geçen süre ay olarak
F (Frequency - total number of donation),
Yani kaç kez bağış yaptığı
M (Monetary - total blood donated in c.c.),
Yani bağış yaptığı kan miktarı
T (Time - months since first donation),
Yani İlk bağışından bu zamana kadar geçen süre ( ay olarak )


Bunları YSA mızın giriş değerleri olarak kullanıyoruz.

Çıkış değeri ise o ay kişilerin kan bağışı yapıp ( 1 ) yapmadıkları ( 0 )
yani YSAmız 4 giriş 1 çıkış yapısında

Ham verilerimizi alıp Open Ofis programımıza atıyoruz. Sonra bu verileri YSA nın kullanabileceğei aralığa çekiyoruz ( scale ) sonra Toplam 748 verinin 448 ini eğitim 300 nü test için kullanmak üzere iki parçaya ayırıp. Verileri Kaydediyoruz.
Favori YSA Eğitim programımız olan FannTool'u açıp Verilerimizi yükleyip YSA mızın dizaynını yapıp Güzeeelce eğitiyoruz.


Eğittiğimiz YSA nı "Blood-ovt.net" diye kaydediyoruz. Yine FannTool ile Kaydettiğimiz YSA nı çalıştırıp sonuçlarını inceliyoruz.
YSA'mız Eğitim verileriyle % 94.2 lik bir başarılı tahmin sayısına ulaşıyor ( 448 kişden 422 kişinin bağış yapıp yapmayacağını doğru tahmin ediyor. )
ama Test verileriyle ulaşılan sonuç hiçde iç açıcı değil. YSA'mız Test verileriyle % 67 lik bir doğru tahmine ancak ulaşabiliyor ( 300 kişden 201 kişinin bağış yapıp yapmayacağını doğru tahmin ediyor. ) Hiçte parlak bir oran değil.

Aynı verilerle ve Tekar bir eğitim işine girişiyoruz. Bu sefer daha optimum bir şekilde eğitiyoruz ve eğitimi biraz kısa tutuyoruz.

Eğittiğimiz YSA nı "Blood-opt.net" diye kaydediyoruz. Yine FannTool ile Kaydettiğimiz YSA nı çalıştırıp sonuçlarını inceliyoruz.
YSA'mız Eğitim verileriyle % 79,69 lik bir başarılı tahmin sayısına ulaşıyor ( 448 kişden 357 kişinin bağış yapıp yapmayacağını doğru tahmin ediyor. ) hiçte fean bir tahmin oranı değil.Bir de test sonuçlarına bakıyoruz. YSA'mız Test verileriyle % 82 lik bir doğru tahmine ulaşabiliyor ( 300 kişden 246 kişinin bağış yapıp yapmayacağını doğru tahmin ediyor. ) Bence gayet güzel bir sonuç.

Pek tabii Sizde denemeler yapabilirsiniz. verileri ve diğer dosyalara bakıp inceleyebilmeniz için hepsini bir arada veriyoruz
Download : Kan bağış Tahimini

Peki bu bize ne öğretti.
* YSA'yı sadece Eğitim verisi sonuçlarına göre değerlendirmek mümkün değildir. Muhakkak test edmek lazımdır

* YSA Eğtiminiz Ezberci olmasın :)

şimdilik bu kadar söyleyelim İnşallah Bir başka zamandetaylı anlatmaya çalışırız

Konumuza dönersek Bütün bunlardan fiyakalı bir makale için malzeme çıkabilir. İyi de bütün bunlar makale, tez, ödev ... içinmiydi. Yani Başka bir işimize yaramazmı bu YSA ?

Evet Pek ala bu konuda program yazılabilir. Kan bağışı merkezi bu programın sayesinde bir sonraki ay için yapılacak kan bağışlarını hatta Kan guruplarıyla birlikte tahmin edebilir.
Yapmamız gereken tek şey verileri ona göre düzenleyip FannTool ile Eğittiğimiz YSA'yı yazdığımız program içinden çalıştırmak. Ve bunun için C / C++ bilmenize de gerek yok. FANN kütüphanesinin pek çok dil için arabirimi ( Bindings ) var.

Pazar, Mayıs 10, 2009

Tıbbi görüntü İşleme ve ITK


Bir vesileyle Tıbbi görüntü İşlemeyle ilgili konulara bakınca gördümki. Tıbbi görünlülerin kendilerine has özel form ( DICOM mesela ) ve kullanımları var. Mesela bir tomografi aslında 3 boyutlu bir hacim ve gerektiğinde istenilen yerden kesit alınabilmesi gerekiyor. Bu durumda tek başına OpenCv ile birşeyler yapabilmek pek mümkün değil.

İşte ITK yani "Insight Toolkit" bu işler için yazılmış açık kaynak kodlu* cross-platform devasa bir kütüphane. Devasa diye boşuna demiyorum, kütüphaneyi derlemek saatler alıyor. Açık kaynak kodun Kodlaması C++ ile yapılmış. Lisans sistemi de BSD yani ticari uygulamalarınızda da rahatlıkla kullanabilirsiniz. Yalnız alıştığımız şekilde değilde CMake ile build sistemi oluşturulmuş. İlk başta biraz tuhaf gelsede biraz cebelleşerek proje dosyalarını oluşturmanız mümkün.

Kütüphanenin pekçok şeyi yapabiliyor olmasına rağmen görselleştirme ve Grafik Kullanıcı Arabirimi ile ilgili bir kısmı yok. ITK Görselleştirme için VTK yı öneriyor. Pek tabiiki GKA olarakda biz FLTK yı öneriyoruz. Ekran görüntüsünden de anlayabileceğiniz gibi. FLTK ile ITK 'yı kullanan ilk biz olmayacağız. ( unutmadan bir de vtkFLTK diye bir şey var ) Pek tabii ki matlab içinde birşeyler var MATITK

Kütüphane gerçekten çok büyük ve herhalde öğrenmek için epey bir emek ve zaman sarf etmek gerek. Yinede İlk fırsatta giriş niteliğinde bir örnek hazırlmak istiyorum**.


*
Açık Kaynak Kodun önemini bir kez daha görüyoruz. Başka türlü nasıl 13 Milyon Dolarlık bir kütüphaneyi kullanmaya imkanınız olabilirdiki ?
** FannTool 1.0 ile uğraşıyorum bunun dışında yapacak işler çok zaman ve zemin yok tembellik had safhada kısmet artık...

Cumartesi, Mart 01, 2008

Yapay Zeka Tıbbın Hizmetinde 2

İlk yazımızdaki programı indirip inceleyen - şu an itibarıyla 4 kişi - ÇOK! sayıda insandan biriyseniz Programın YSA yı uygulayan kısımının Heasapla fonksiyonun içinde olduğu ve Normalizasyon kısımlarını saymaksak üç beş satırdan oluştuğunu görmüşsünüzdür. Peki bu işler bu kadar kolaymı ?
cevap veriyorum Hayır. İsterseniz o üç beş satırı yazabilmek için neler yapmamız gerektiğine bir bakalım.

YSA ya bir şeyler öğretebilmek için eğitim gerekli, Eğitim içinse veri.
Sınıflandırma yapmamız için etkili olan faktörler tespit edilir - Giriş değişkenleri - Sonuçta bu faktörlere göre bir sınıflara ulaşırız -Çıkış değerleri - İşte Bu giriş ve çıkış değerleri YSA nın giriş ve çıkış değerleri oluyor.
Peki YSA verileri doğrudan verebilirmiyiz ?
Malesef veremeyiz. YSA da katmanlar arasında veri iletişimi bir çeşit aktivasyon fonksiyonundan geçerek sağlanır. Bu fonksiyonlarda tipine göre (0 - 1 ) yada (-1 1) aralığında sonuçlar verir. Bu durumda bizim verilerinizi bu aralıklara çekmemiz lazım. Peki Bu normalizasyon işlemini nasıl yapacağız. Değişkenin en küçük (min) ve en büyük (max) değerleri tespit edilir ve bir aralık hesaplanır
range = max-min
Biz bu uygulamamızda ( 0 - 1) aralığını kullandığımızdan normalizasyon formülümüz şöyle oluyor.
Norm(x)= (x-min)/range
ufak bir tavsiyede bulanayım değişkenin veri kümesinden tespit ettiğimiz min max değerlerini aralığı hafifçe açacak şekilde genişletirseniz daha iyi olur. bu arada sizede ufak bir ev ödev i! (-1 - 1) aralığında normalizasyon için gereken formülüde siz bulun.

Giriş değişkeni eğer mantıksal bir değişkense, (doğru-yanlış) gibi sadece iki değeri içeriyorsa normalizasyonu gayet kolay değerin biri 0 diğeri 1 olarak YSA ya bildirilir.

Peki değişken eğer sayısal değilse ne yapacağız mesela bizim örneğimizde "chest pain type"
göğüs ağrısı tipi diye bir değişken var ve bu değişken {angina, abnang, notang, asympt} gibi 4
değişik tipten oluşuyor. Bu durumda yapacağımız şey bu tip değişkenleri mantıksal değişkenlere
bölmek yani chest pain type değişkenini 4 adet mantıksal alana yayıyoruz eğer ağrı tipi
angina ise 1 0 0 0 yok notang ise 0 0 1 0 gibi.
Şimdi gelelim verilerimize verilerin aslı aşağıdaki gibi bir matriste tutuluyor

60, male, asympt, 140, 293, fal, hyp, 170, fal, 1.2, flat, 2, rev, sick.
37, male, notang, 130, 250, fal, norm, 187, fal, 3.5, down, 0, norm, buff.
64, male, angina, 110, 211, fal, hyp, 144, true, 1.8, flat, 0, norm, buff.

bu matriste 14 sütün var ilk 13 ü giriş değişkenleri son sütün çıkış değişkeni. fakat biz bu
değişkenleri YSA ya aktarabilmek için normalize ederken sütün sayımız 25 e çıkıyor nasıl mı oluyor bakınız


ANN Dizaynı

| Inputs
| ------------------------
| -- 1. age : 1 sütun
| -- 2. sex : 1 sütun
| -- 3. chest pain type (4 values) : 4 sütun
| -- 4. resting blood pressure : 1 sütun
| -- 5. serum cholestoral in mg/dl : 1 sütun
| -- 6. fasting blood sugar > 120 mg/dl : 1 sütun
| -- 7. resting electrocardiographic results (values 0,1,2) : 3 sütun
| -- 8. maximum heart rate achieved : 1 sütun
| -- 9. exercise induced angina : 1 sütun
| -- 10. oldpeak = ST depression induced by exercise relative to rest : 1 sütun
| -- 11. the slope of the peak exercise ST segment : 3 sütun
| -- 12. number of major vessels (0-3) colored by flourosopy : 4 sütun
| -- 13. thal: ( normal, fixed defect,reversable defect) : 3 sütun
25 giriş

| Outputs
| ------------------------
| Absence (1) or presence (2) of heart disease 1 sütun

1 Çıkış

evet Elimizdeki 180 adet veriyi bin bir meşakkatle normalize ettiktten sonra ikiye ayırıyoruz.
155 adedi eğitim için 25 adedi test için. ve verileri FANN kütüphanesinin standartına uygun olarak kaydediyoruz. - FANN kullanımı yazılarım -

Bundan sonrasını FannTool'u kullanarak yapacağız. FannTool'u çalıştırın ve Eğitim için Training
Data File olaraka "heart_train_data.dat" yükleyin Artık Keyfinize ve tecrübelerinize göre eğitim denemelerinini yapabilrsiniz.
ilk etapta saklı katman sayısı (# of Layer) ve bu katmanlardaki hücre sayılarını (Hid Layer 1 ...) ayarlaya bilirsiniz.
İsterseniz Eğitim metodunu (Detect Optimum Training Algorithm) ve Aktivasyon foksiyonlarını
(Detect Optimum Activation Functions ) sizin için seçmesini istiyebilirsiniz.

Artık Train -> Normal diyerek YSA eğitimini başlata bilirsiniz. Eğer Belirlediğiniz hata değerine yada altına ulaşıldığında Eğitilmiş YSA yı kaydetmek için sizden bir dosya ismi istenir. Bir isim verip kaydedin .net uzantılı olarak kaydetmeniniz iyi olur.

İşimiz bittmi ? ellbette hayır. Biz boşunamı test datası oluşturduk. Testing Data File olarak test dosyamızı yüklüyoruz. Test ANN düğmesine basıyoruz. Bizeden eğitilmiş YSA dosyası isteniyor kaydettiğimiz .net dosyasını seçiyoruz. Sonuçta bize test verileriyle ulaşılan bir MSE (ortalama hata ) değeri hesaplanır.
Bu değer eğer çok yüksekse. Bizim YSA eğitimi iyi olmamış demektir. Tabiri caiz ise YSA mız Eğitim verilerini ezberlemiştir. Muhtemel sebeplerine gelirsek Düşük veri sayısı veya yüksek hücre sayısı veya istenen hata değerinin çok düşüklüğü....
Ama istenen ezberleme değil genellemedir. Böyle durumlarda eğitimi değişik kombinasyonları deyerek tekrarlamak gerekir.
Eğitimin bir diğer metoduda Train->Cascade dir bu metodda YSA nın Saklı katmanlarını kendisi dinamik olarak belirler. Siz sadece kullanabileceği maksimum hücre sayısını belirtebilirsiniz. Bu değeri de FannTool Saklı katmanlardaki hücre sayılarını giriş ve çıkış hücre sayılarına ekleyerek hesaplar.

Bütün bunlardan sonra Eğitimizi tamamlayıp testimizi yapıp sonucunda tatminkar hata değerine ulaştıktan sonra yapılacak şey basit bir arabirim yazmaktırki onuda ilk yazımızda verdik.

Sizinde gördüğünüğüz gibi üç beş satırın arkasında epey bir emek var. İnşallah FannTool 'un ilerki versiyonlarında Veri işlemeyi nispeten kolaylaştıran bir kısımı da eklemeyi planlıyorum.
Artık nasip...

Salı, Şubat 26, 2008

Yapay Zeka Tıbbın Hizmetinde 1

İsmine bakıpta büyük beklentileriniz olmasın. Yapılan iş basit! bir sınıflandırma işi. Daha önceki tecrübe verilerini kullanarak kişilerin kalp hastası yada sağıklı olduğuna karar veriliyor.
Öncelikle veriler bulunuyor. YSA ile kullanmak için normalize ediliyor. FannTool ile değişik metodlarla deneye yanıla uygun bir YSA ya ulaştıktan sonrası kolay. Yazıyoruz basit bir kullanıcı arabirimi işte karşınızda Heart.zip
Eğer isteyen olursa yada vakit bulabilirsem Linux versiyonunuda yayınlarım. Zaten FLTK ve FANN kullanıldığında kod taşınabilir, siz de derleyebilirsiniz. Giriş verilerinin isimlerini çevirmedim çünkü ne manaya geldiğini bilmediğim tıbbi terimler de var. Yarı ingilzce yarı türkçe olmasındansa bu şekli daha doğru buldum.
Son bir not : Türkiyede niye böyle uygulamalar için hazırlanmış veri tabanları yok ? Eğer varsa neden duyrusu iyi bir şekilde yapılmıyor ? Eğer böyle veritabanları hazırlanırsa tutupta "Cleveland Clinic Foundation" yerine kendi veritabanlarımız kullanabilirdik. Güzide üniversitelerimizdeki güzide hocalarımızdan ısrarla istiyoruz.