Yapay Sinir Ağı ile XOR Kapısı (PIC Assembly)

ÖZET

Bu çalışmada, bir mikrodenetleyiciye yapay sinir ağını gerçekleyebilmesini sağlayacak bir program yazılması amaçlanmıştır. Hazırlanan yapay sinir ağı, program içerisine gömülü olan XOR doğruluk tablosuna göre eğitilir ve mikrodenetleyicinin giriş portlarından alınan giriş verilerini kullanarak çıkış üretir. Çalışmada, öğrenme metodu için geri yayılım metodu, aktivasyon fonksiyonu için basamak fonksiyonu, ağırlık güncellemeleri için Hebbian Kuralı kullanılmıştır. Geliştirilen uygulama, PIC Assembly dili ile PIC16F84 mikrodenetleyicisi için kodlanmıştır. Uygulama, öğrenme işlemini başarı ile gerçekleştirerek, denenen tüm giriş verileri için doğru sonuçlar üretmiştir.

1.GİRİŞ

XOR (özel veya) problemi sahip olduğu doğrusal olmayan yapı sayesinde sınıflama ve modelleme algoritmalarının test edilmesi ve başarılarının ölçülmesinde önemli bir ölçüttür. Çalışma XOR kapısının yanında farklı birçok amaçla da kullanılabilir. Çalışma bir sisteme dahil edilip, sistem ve mikrodenetleyiciye paralel veri girişi sağlanabilir. Giriş verilerini alarak eğitilen mikrodenetleyici, daha sonra kendi çıkış verileri ile sistemin çıkış verilerini karşılaştırabilir. Verilerin doğru olmaması gibi durumlarda sistemdeki hataları gidermede kullanılabilir.

Çalışmada yapay sinir ağı, 1 giriş, 1 ara ve 1 çıkış katmanlarından oluşur. Giriş katmanı ise 2 nöron ve 1 bias olmak üzere 3 giriş, 3 ara nöron ve 1 çıkış nöronundan oluşur. Giriş nöronu dışındaki nöronlar için bir aktivasyon fonksiyonu vardır. Her nörondan diğer nörona giden bir bağlantı bulunur ve bu bağlantının bir ağırlığı vardır. Her bir giriş ile ona ait ağırlık değeri çarpımlarının toplanmasına toplama işlevi denir. Nöronların değerleri aktivasyon fonksiyonu ile belirlenir. Çıkış nöronunda elde edilen değer ile hedef değer farklı ise geri yayılımlı olarak ağırlıklar tekrar hesaplanır ve öğrenme gerçekleştirilir. Öğrenme işlemi için çalışmada Hebbian Kuralı uygulanmıştır. Böylece her bağlantıdaki ağırlık güncellenerek baştan hesaplanır ve işlem hedef sonuca ulaşana kadar devam eder. Uygulamadaki hedef sonuçlar için XOR kapısının doğruluk tablosu kullanılmıştır.

XOR kapısından gerçekleştirilmeden önce ilk olarak tek nöronlu yapay sinir ağı gerçekleştirilmiştir. Giriş verisi rastgele bir ağırlık ile çarpılıp, belli bir eşik değerden geçirilmiş ve çıkış değeri elde edilmiştir. İkinci aşama olarak AND kapısı gerçekleştirilmiştir. AND mantık kapısının seçilmesinin nedeni, yapay sinir ağı ile öğrenmenin  kolay bir şekilde gerçekleşebilmesidir. AND kapısının kolay olmasını sağlayan durum, bir doğru ile kolaylıkla sınırlandırılabilmesidir. Bunun dışında AND kapısı için bias değerine ihtiyaç duyulmaz, böylece giriş sayısı değişmez ve daha az ağırlık değeri ile işlem gerçekleştirilir. XOR kapısından önce bu iki aşama tamamlanmıştır.

Uygulama sonuçları Tüm farklı giriş verileri, mikrodenetleyiciye aktarılıp elde edilen çıkış verileri doğruluk tablosu ile karşılaştırıldığında tüm sonuçların doğru olduğu gözlemlenmiştir.

Okumaya devam et “Yapay Sinir Ağı ile XOR Kapısı (PIC Assembly)”

Yapay Sinir Ağı ile AND Kapısı (PIC Assembly)

Bu çalışmada, bir mikrodenetleyiciye yapay sinir ağını gerçekleyebilmesini sağlayacak bir program yazılması amaçlanmıştır. Hazırlanan yapay sinir ağı, program içerisine 48. satırda bulunan hsonuc (Hedef Sonuç) isimli değişkene göre eğitilir ve program kodunun 44 ve 46. satırlarından alınan giriş verilerini kullanarak çıkış üretir. Çalışmada, öğrenme metodu için geri yayılım metodu, aktivasyon fonksiyonu için basamak fonksiyonu, ağırlık güncellemeleri için Hebbian Kuralı kullanılmıştır. Geliştirilen uygulama, PIC Assembly dili ile PIC16F84 mikrodenetleyicisi için kodlanmıştır. Uygulama, öğrenme işlemini başarı ile gerçekleştirerek, denenen tüm giriş verileri için doğru sonuçlar üretmiştir.

Çalışmada yapay sinir ağı, 1 giriş, 1 ara ve 1 çıkış katmanlarından oluşur. Giriş katmanı ise 2 nöron ve 1 bias olmak üzere 3 giriş, 3 ara nöron ve 1 çıkış nöronundan oluşur. Giriş nöronu dışındaki nöronlar için bir aktivasyon fonksiyonu vardır. Her nörondan diğer nörona giden bir bağlantı bulunur ve bu bağlantının bir ağırlığı vardır. Her bir giriş ile ona ait ağırlık değeri çarpımlarının toplanmasına toplama işlevi denir. Nöronların değerleri aktivasyon fonksiyonu ile belirlenir. Çıkış nöronunda elde edilen değer ile hedef değer farklı ise geri yayılımlı olarak ağırlıklar tekrar hesaplanır ve öğrenme gerçekleştirilir. Öğrenme işlemi için çalışmada Hebbian Kuralı uygulanmıştır. Böylece her bağlantıdaki ağırlık güncellenerek baştan hesaplanır ve işlem hedef sonuca ulaşana kadar devam eder.

Okumaya devam et “Yapay Sinir Ağı ile AND Kapısı (PIC Assembly)”

Destek Vektör Makineleri ve Çok Katmanlı Algılayıcılar ile Göğüs Kanseri Teşhisi

Projenin Kodları

Raporu indir

1. Çalışmanın Özeti

Bu çalışmada, göğüs kanseri öznitelik vektörlerinin, destek vektör makineleri ve yapay sinir ağları(çok katmanlı algılayıcı) ile sınıflandırılmasına dayalı bir gögüs kanseri teşhisi yapılmaktadır. Teşhis için kullanılan yapay sinir ağları çok katmanlı algılayıcılar(Multi Layer Perceptron)’dır. Destek vektör makinaları(Support Vector Machine ) SVM-Lineer, SVM-Polinomsal ve SVM-Radyal Tabanlı modellerdir. Sınıflandırma işleminde kullanılacak olan gögüs kanseri verileri Wisconsin Diagnostic Breast Cancer (WDBC)  datasetidir. Oluşturulan veri formatı WEKA paket programında uygulanmıştır. Çalışmada doğru teşhis başarısı, MLP’de %97.90, SVM-Lineer‘de %95.44  SVM-Polinomsal’da %72.24 ve  SVM-Radyal Tabanlı’da %62.75 olarak ölçülerek en yüksek başarı %97.90 ile MLP(Çok Katmanlı Algılayıcılar) öğrenme yöntemi ile ölçülmüştür. Bu yöntemin ROC eğrisi altında kalan alan değeri 0.9931 olarak hesaplanmıştır.

2. Uygulama

2.1.Veri ve Kütüphanelerin Hazırlanışı

2.1.1. Veri Seti

Çalışmanın gögüs kanseri verileri Wisconsin Diagnostic Breast Cancer (WDBC)  dataseti ile değerlendirilmiştir. Dataset(http://archive.ics.uci.edu/ml/datasets/Breast+Cancer+Wisconsin+(Diagnostic)) adresinden indirilip Notepad++ programı yardımı ile datasette bulunan sütunlar ile öznitelik sayısı tespit edilmiştir. Her satırdaki verilerin ilk değeri incelediğinde toplam 2 sınıfın bulunduğu M ile ifade edilen sınıfın malignant yani kötü huylu, B ile ifade edilen sınıfında benign yani iyi huylu anlamına geldiği anlaşılıp, programla düzenlerek WEKA paket programında kullanılabilmesi için arff dosya tipine dönüştürülmüştür. Öznitelik sayısı 30 dir. Bu özniteliklerden bazıları; her bir hücre çekirdeği için, yarıçapı, doku, çevre, alan, düzgünlük, kompaktlık, konkavite, içbükey noktaları, simetri, fraktal boyutu gibi özniteliklerdir. Gögüs kanseri verisi 569 tanedir. Bu verilerden 212 tanesi sonuç olarak kötü huylu, 357 tanesi de iyi huylu olan kanser türüdür.

2.1.2.Kütüphanelerin Hazırlanışı

MLP(Çok Katmanlı Algılayıcılar) ögrenme yöntemi kütüphanesi WEKA paket programında hazır bulunmaktadır. SVM(Destek vektor makineleri) kütüphanesi (http://www.csie.ntu.edu.tw/~cjlin/libsvm/) adresinden indirilip WEKA’nın kurulu olduğu yere yerleştirilmiştir. Bu aşamadan sonra ortam değişkenlerine yeni bir sistem değişkeni olan CLASSPATH ve değişken değeri olarakta libsvm kütüphanesinin konumu yazılarak eklenmiştir. Böylece WEKA’da SVM-Lineer, SVM-Polinomsal ve SVM-Radyal Tabanlı modeller kullanılır hale getirilmiştir. Okumaya devam et “Destek Vektör Makineleri ve Çok Katmanlı Algılayıcılar ile Göğüs Kanseri Teşhisi”

Genetik Algoritma Parametreleri

Genetik algoritmanın performansını etkileyen önemli etmenlerden biri kontrol parametrelerinin belirlenmesidir. Kontrol parametrelerinin seçimi problem tiplerine göre farklılık göstermektedir. Farklı problem ve kodlama türlerine göre en uygun kontrol parametrelerin belirlenmesi için birçok çalışma yapılmıştır. Aşağıda GA kontrol parametreleri olan popülasyon büyüklüğü, çaprazlama olasılığı, mutasyon olasılığı, kuşak farkı, seçim yöntemi ve fonksiyon ölçeklemesi açıklanmaktadır.

1.Popülasyon Büyüklüğü

Genetik algoritmanın ilk adımı başlangıç popülasyonunun oluşturulmasıdır. Başlangıç popülasyonunu oluşturan bireylerin uygunluk değerleri GA performansını etkileyen unsurlardan biridir. Popülasyon oluşturan bireylerin sayısı küçük seçildiğinde iterasyonlar daha hızlı olacak ancak algoritmanın yerel optimuma takılma şansı artacaktır. Popülasyonun çok büyük seçilmesi çözüm kalitesini arttıracak ancak algoritmanın adımları daha uzun zaman alacaktır. Goldberg 1985’de, yalnızca kromozom uzunluğuna bağlı bir popülasyon büyüklüğü hesaplama yöntemi önermiştir. Golderg birçok araştırmacının popülasyon büyüklüğünü 30-200 aralığında seçtiğini belirtmiştir. Popülasyon büyüklüğünü kromozom uzunluklarını dikkate alarak belirlenmesinde seçilen yöntemlerden biri n kromozom uzunluğu olmak üzere popülasyon büyüklüğünün [n, 2n] arasında seçilmesidir. Popülasyon büyüklüğünün küçük bir değer olarak belirlenmeye çalışılmasının başlıca nedeni GA’nın diğer meta-sezgisel yöntemlerle çözüm süresi olarak rekabetçi olabilmesidir.

Okumaya devam et “Genetik Algoritma Parametreleri”

Genetik Algoritma Süreci

Çözülmek üzere tanımlı bir problem verilmesi ve aday çözümlerin birer bit dizisi ile temsil edilmesi halinde, GA şu şekilde çalışır:
1.  N adet kromozom (problem için aday çözümler) içeren rastgele oluşturulmuş bir topluluk ile başla.
2.  Topluluktaki her  x kromozomu için  f(x) uygunluk değerini hesapla.
3.  Aşağıdaki adımları birey  n (topluluk büyüklüğü) oluşturuluncaya kadar tekrarla.
a.  Güncel topluluktan, yüksek uygunluk değerinin seçilme ihtimalini arttırdığını göz önünde bulundurarak, iki ebeveyn kromozom seç. Seçilim, aynı kromozomun birden çok defa ebeveyn olarak seçilmesine olanak verecek şekilde yapılır.
b.  Pc olasılığı (“çaprazlama olasılığı” ya da “çaprazlama oranı”) ile seçilen çifti iki yeni birey
oluşturmak üzere rastgele belirlenen bir noktadan çaprazla. Eğer çaprazlama gerçekleşmezse
ebeveynlerinin birebir kopyası olan iki çocuk oluştur.
c.  Pm olasılığı (“mutasyon olasılığı” ya da “mutasyon oranı”) ile, oluşan iki çocuğu tüm veya bazı locuslarında
mutasyona uğrat.
d.  Sonuçta elde edilen kromozomları yeni topluluğa ekle.
4.  Önceki topluluğu yeni topluluk ile değiştir.
5.  Sonlandırma koşulu sağlandıysa mevcut topluluktaki en iyi çözümü döndür, sağlanmadıysa 2. adıma dön.

1.Kromozomların Kodlanması

Bir problemin çözümünde Genetik Algoritmalar kullanılacaksa çözümün ilk adımı kromozomların nasıl kodlanacağına karar vermektir. Kodlama yaklaşımı çözümün başarısına doğrudan etki eder ve problemin
türüne ve özelliklerine göre farklılık gösterir.

Okumaya devam et “Genetik Algoritma Süreci”

Genetik Algoritma Temel Kavramlar

Genetik Algoritmalar, daha iyi çözümlere yavaş yavaş bir yaklaşım sağlayan geniş bir problem uzayı boyunca yönlendirilmiş rastgele bir araştırmaya imkan sağlar. Temel avantajı optimize edilmeye çalışılan problemin doğasıyla ilgili herhangi bir bilgiye ihtiyaç göstermemeleridir.

Evrimsel Algoritmalar: Çözüm uzayı içerisinde belirli kurallar dahilinde rastsal arama yapan algoritmalardır. Evrimsel algoritmaların (EA) probleme özgü bilgilere ihtiyacı diğer yöntemlere göre daha azdır.

Kodlama: Probleme ait potansiyel çözümler parametreler kümesi olarak sembolize edilir. Gen olarak da bilinen bu parametreler değerler dizgisi biçimini oluşturacak şekilde birleştirilir. Holland bu dizgelerin en verimli şeklinin ikilik sistemde olduğunu belirtmiştir.

Kromozom: Bir bireyin tam ifadesidir.

Gen: Bir kromozom içerisindeki tek bir özelliktir. Dikkat edilmesi gereken husus bir çocuğun kromozomu genlerden oluşur ve bu genler rastlantı olarak ebeveynlerinden aktarılır. Okumaya devam et “Genetik Algoritma Temel Kavramlar”

Tek Nöronlu Yapay Sinir Ağı ve Proteus İsis Simülasyonu (16f84)

Bu slayt gösterisi için JavaScript gerekir.

Bu yazıda PIC assembly ile kodlanmış tek nörona sahip bir yapay sinir ağı oluşturulup, Proteus İsis programında simülasyonla gösterildi. Programda hedeflenen durum, giriş değeri 1 verilirse 0 sonucunu üreten, 0 verilirse 1 sonucunu üreten YSA oluşturmak. Tek nöronlu yapay sinir ağının özelliği, nörona giren giriş değerini belli bir ağırlık değeri ile çarpıp, eşik değere göre sonuç üretmektir. Örnek olarak giriş değeri olarak 0 değeri verilip ve bu değer 1 değerine sahip ağırlıkla çarpıldıktan sonra elde edilen sonuç olan sıfır değerini 0’a eşit ve küçük olan eşik değerle kıyaslansın. Sonuç olan 0 değeri ile eşik değerin kıyaslanması sonucunda true yani 1 değeri elde edilecektir. Çünkü sonuç 0 ve eşik değerde sıfıra eşit ve küçük olduğu için dönüş true olacaktır. Aynı durum için giriş değeri 1 olduğunda dönüş değeri 0 olacaktır. Böylece program için hedeflenen durum gerçekleşti.

Okumaya devam et “Tek Nöronlu Yapay Sinir Ağı ve Proteus İsis Simülasyonu (16f84)”

Naive Bayes ile Spor Metinleri Sınıflandırma

Projenin Kodları

Tüm projeyi İNDİR: Program Raporu ve Kodu

1. Çalışmanın Özeti

Bu çalışmada, spor metinlerine ait olan öznitelik vektörlerinin Naive Bayes ile sınıflandırılmasına dayalı bir spor metni tahmini yapılmaktadır. Çalışmada veri seti farklı kullanılarak sınıflandırmanın başarısı incelenmiştir. Farklı kullanımdan kasıt, veri setinin eğitim ve test amaçlı olarak kullanılan verilerin sayısının değiştirilmesidir. Çalışmada bulunan spor metinleri futbol, basketbol, tenis olmak üzere üç sınıf seçilmiştir. Elde edilen özellik vektörünün başarısı, Naive Bayes sınıflandırma yöntemi ile en yüksek %80 olarak alınmıştır.

Günümüzdeki gelişmeler veri birikiminin artmasına neden olmaktadır. Bu artışla istenilen verilere ulaşabilmek için metinlerin sınıflandırılması ihtiyacı doğurmuştur. Metin sınıflandırma, o metnin özelliklerine bakarak önceden belirlenmiş belli sayıda kategorilerden hangisine dahil olacağını belirlemektir. Metin sınıflandırma bilgi alma, bilgi çıkarma, döküman filtreleme, otomatik olarak metadata elde etme ve web sayfalarını hiyerarşik olarak düzenleme gibi pek çok alanda önemli rol oynamaktadır. Bu çalışmada içerisinde üç farklı kategoride 60 adet dökümandan oluşan bir veri seti kullanılmıştır.Makine öğrenmesi yöntemlerinden Naive Bayes kullanılarak bir metnin türünün belirlenmesi gerçekleştirilmiştir.

Okumaya devam et “Naive Bayes ile Spor Metinleri Sınıflandırma”

Ödüllü Programlama Sorusu ve Çözümü (C#) (Yazılım yeni başlayan için algoritma geliştirme)

Bu soru TBD Genç Ankara Şubesinin hazırladığı 2011 Şubat ayı programlama yarışmasının sorusuydu. Soruyu doğru cevaplandıranlar arasından iki kişiye kitap hediye edildi. Şanslı olanlardan birisi de bendim. Soru şöyleydi:

TBD Genç Ankara – Ödüllü Programlama Sorusu 12
(Bu soru TBD Genç Ankara Şubat 2011 bülteninde yayımlanmıştır.)
Soru 12: Uzun İp

Problem

Elinizde 100 metrelik düz ve iki uçlu bir ip var ve bu ip birkaç ipin birleştirilmesinden oluşturulmuş. Sizden bu kaynak noktalarından herhangi rastgele ikisini çözdüğünüzde oluşacak en büyük parçanın verilen bir A sayısından büyük veya eşit olma ihtimalini bulmanız isteniyor.

Girdisindede size ipin kaç tane kaynak noktası olduğu N, kaynak noktalarının ipin sol ucundan kaç metre uzakta olduğu ve A sayısının verileceği, çıktısında sadece ihtimalin ondalık gösterimini yazacak bir konsol uygulaması yazmanız isteniyor.

Açıklayıcı olması açısından, istenen sonuç, N kaynak noktasından herhangi (birbirinden farklı) ikisi çözüldüğünde oluşan parçalardan en büyüğünün uzunluğunun A’dan büyük veya eşit olma olasılığının ondalık gösterimidir. Lütfen girdi ve çıktı biçimini ve kısıtlamaları dikkatli okuyunuz.

Okumaya devam et “Ödüllü Programlama Sorusu ve Çözümü (C#) (Yazılım yeni başlayan için algoritma geliştirme)”

Pişti Oyunu Konsol (JAVA)

Pişti Oyunu Tanımı ve Şartları

Projenin Kodları

Tüm projeyi İNDİR: Program Raporu ve Kodu

Bir deste 52 karttan oluşmaktadır.

  1. 4 çeşit (çeşit) kart bulunmaktadır: Kupa (♥), Karo (♦), Maça (♠) ve Sinek (♣).
  2. Her çeşitten 13 kart bulunmaktadır (1 veya A, 2, 3 …, 10, J, Q, K). Bu değerler kartın numarası olarak adlandırılır.
  3. J (Joker), Q (Kraliçe) ve K (Kral) için sırasıyla 11, 12 ve 13 kullanabilirsiniz.

Oyuncu ve bilgisayar ellerinde 4 kart bulundurur. Oyun, oyuncu ve bilgisayarın sırasıyla yere bir kart bırakmaları şeklindedir. Yere kart bırakma işlemi oynama olarak adlandırılır. Kart K oyuncu O tarafından oynandığında aşağıdaki 3 durumdan biri ortaya çıkar:

  1. Yerde sadece 1 kart bulunmaktadır. Bu kartı T olarak adlandıralım. Eğer C ile T aynı sayıya eşitse, oyuncu P pişti yapmış olur ve 10 puan kazanır. Oyuncu P yeri temizleyerek C ve T kartlarını kasasına koyar. Bu noktada yer boş durumdadır.
  2. Yerde birden fazla kart vardır. Yerde en üstte bulanan kartı T olarak adlandıralım. Eğer C ile T aynı sayıya eşitse oyuncu P yeri temizleyerek yerdeki tüm kartları kasasına koyar.
  3. Yerdeki kart sayısı ne olursa olsun, eğer C kartı Joker kartına veya yerde bulunan kartların en üstündekine eşit değilse, C kartı yerde kalır ve en üstteki kart olur. Kimse yeri temizlemez.

Oyun sonunda pişti puanlarına ek olarak; her oyuncu, kasasındaki pişti olmayan her kart için 1 puan kazanır. En çok puanı toplayan oyuncu kazanır.

Her pişti oyunu aşağıdaki şekilde devam eder: Okumaya devam et “Pişti Oyunu Konsol (JAVA)”