Veri Setini University California Irvine nin ilgili sayfasından
http://archive.ics.uci.edu/ml/datasets/Heart+Disease
indirdik. Bu sayfadaki verilerden biz "Cleveland Clinic Foundation" tarafından oluşturulanları kullandık.
Bu syafada görebileceğiniz gibi bu verilerle pek çok çalışma yapılmıştır
Bizde YSA ile bir çalışma yapalım istedik.
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.
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 seçilir.
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 kategoriden 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 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.
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, Test içinde "heart_test_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.
Ezberci bir eğitime düşmemek için (
Overtraining Caution System ) seçeneğini açıp eğitim esnasında test verilerinin hata durumlarını takip edebilirsiniz.
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.
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.
Ulaştığımız sonuçlar şöyle
Eğitim verileri İçin % 91.61 ( 142 Doğru 13 Yanlış )
Test Verileri İçin % 92 ( 23 Doğru 2 Yanlış )
Eğitimizi tamamlayıp testimizi yaptık ve sonucunda
tatminkar hata değerine ulaştık. Bütün
bunlardan sonrayapılacak şey bir
arabirim yazmaktır.
Onuda yazdık, İndirmek ( Download ) için :
Hearth
Program Tanı için gereken verileri alıp Eğitilmiş YSA ya verileri verip sonucu ondan istiyor ve size gösteriyor. yani kısaca Koroner Arter Hastalığı Tanısı işlemini gerçekleştiriyor.