9.12.10

UML Kullanmanın Avantajları

File:UML Diagrams.jpg
UML büyük projelerde kesinlikle kullanılması gereken bir modelleme dilidir.  
(Bakın: UML Nedir?

Bu dilin oldukça kapsamlı olduğunu ve bir yazılım projesinde gerekecek her modellemeyi bünyesinde barındırdığını ayrıca belirtmek isterim.  UML kullanmanın faydalarını aşağıdaki gibi sıralayabiliriz:



  • Tasarım ve analiz UML ile yapıldıktan sonra ve mantıksal hatalar ayıklandıktan sonra kodlama işi oldukça kolaylaşacaktır.
  • Takım çalışması yapmak kolaylaşacaktır.
  • Ekipte meydana gelecek değişiklikte yeni gelenlere projenin anlatılması daha rahat olacaktır.
  • Proje başkalarına devredilirken diyagramlar devralanın projeyi rahatlıkla anlamasını sağlayacaktır.
  • Olası tüm senaryolar baştan belirlendiği için programın tutarlılığı artar.
  • Tekrar kullanılabilecek kodların sayısı artar. Bu da maliyeti düşürür. 

Bir sonraki yazımda UML diyagramlarından da bahsetmek istiyorum, özellikle de favori diyagramım olan user case diyagramlarından. Projelerinizde UML kullanırsanız asla pişman olmazsınız, ancak dikkat etmeniz gereken bir nokta var: UML kullanmış olmak için kullanılmamalıdır, sağlayacağı fayda harcatacağı emekten daha az olmamalıdır.  Örneğin çok küçük bir yazılım projesinde gereksiz diyagramlar kullanıldığında bu vakit ve emek kaybına yol açabilir. Amaç kaliteli yazılım geliştirmektir, UML ise sadece araçtır, bunu unutmayalım. 

6.12.10

K-NN Algoritması

Arkadaşlar bitirme projesinde bu algoritmayı kullandık, aşağıdaki yazı da bitirme projemin ara raporunda kullandığım, son raporda da kullanacağım bir yazıdır, Oktay Hoca'dan proje alan arkadaşların yazıyı raporlarında kullanmamasını rica ediyorum. 

Bu algoritmayı C#'da kodladık, ileride kısaca kodları da paylaşmak istiyorum. Umarım faydalı olur..
K-NN (En Yakın Komşuluk) Algoritması

KNN, eğitimli öğrenme algoritmasıdır ve amacı, yeni bir örnek geldiğinde varolan öğrenme verisi üzerinde sınıflandırma yapmaktır. Algoritma, yeni bir örnek geldiğinde, onun en yakın K komşusuna bakarak örneğin sınıfına karar verir. [1]

Bu algoritma ile yeni bir vektörü sınıflandırabilmek için doküman vektörü ve eğitim dokümanları vektörleri kullanılır. Tüm eğitim dökümanları ve kategorisi belirlenecek olan doküman vektörel olarak ifade edildikten sonra bu vektörler K-NN algoritması ile karşılaştırılırlar. 

Kategorisi belirlenmek istenen metnin vektörü, öğrenme kümesindeki metinlerin vektörleri ile karşılaştırılır. 

K-NN algoritmasında terim ağırlıklandırma için 3 çeşit yöntem kullanılabilir.
1-Bit ağırlıklandırma yöntemi,
2-Frekans ağırlıklandırma yöntemi,
3-Tf-IDF ağırlıklandırma yöntemi.

Algoritma En yakın komşuluk prensibine dayanır. Tüm dokümanlar vektörel olarak temsil edilir. Sorgu dokümanı ile diğer dokümanlar arasındaki cosinüs benzerliği hesaplanır. Benzerlik oranı 1’e en yakın olan n tane vektörün kategorisinden çok olanı dokümana atanır.
Uygulamada K-NN algoritmasının kullanılmasındaki nedenler aşağıdaki gibi sıralanabilir:
Uygulanabilirliği basit bir algoritma olması.
Gürültülü eğitim dokümanlarına karşı dirençli olması.
Eğitim dokümanları sayısı fazla ise etkili olması
Bu metot ölçeklendirilebilir bir metottur ve çok geniş veritabanları üzerinde de uygulanabilir.[4]

Her bir kelime vektörel uzayda bir boyuta karşılık gelmektedir. Her bir metin bu sayede vektörel uzayda ifade edilebilmektedir. K-NN algoritması ile vektörel uzayda bu metinlerin birbirlerine ne kadar benzedikleri tespit edilebilir. Bir başka ifadeyle birbirine en yakın metinler bulunabilir.

 Şekil 1  İki Boyutlu Vektör Uzayı

Yukarıdaki şekilde iki kelimeden oluşan bir ortak sözlüğe sahip dört metnin vektörel uzayda ifadesi gösterilmiştir. Eğer sözlük üç kelimeden oluşsaydı grafiğimiz de üç boyutlu olacaktı. Burada d1, d2 ve d3 eğitim dokümanlarımızdan oluşan vektörler, q ise sınıfını bulmak istediğimiz dökümanın vektörüdür.

Q dökümanının d1, d2 ve d3 eğitim dokümanlarından hangisine daha fazla benzediğini bulmak için aralarındaki açının cosinüs değerine bakılır. Aralarındaki açı ne kadar küçükse elde edilen cos(açı) değeri o kadar 1’e yakın olacaktır. Elde edilen değerin 1’e yakın olması, iki dökümanın birbirine ne kadar benzediğini ifade eder. 

Örneğin yukarıdaki örnekte q ile d2 arasındaki açı en küçüktür. Bu nedenle de q dökümanının en yakın olduğu doküman d2 dökümanıdır. Aralarındaki açının cosinüs degeri de 1’e yakın bir değer olarak karşımıza çıkmaktadır.

K-NN algoritmasında temel olarak aşağıdaki adımlar gerçekleştirilir:
1. K değerinin belirlenmesi.
2. Tüm öğrenme örnekleri ile olan uzaklığının hesaplanması.
3. Minimum uzaklıkğa göre sıralama işleminin yapılması.
4. Ait oldukları sınıf değerlerinin bulunması.
5. Değeri baskın olan sınıfın seçilmesi.

Burada k değerinin belirlenmesi, bize en yakın kaç vektöre bakılması gerektiğini ifade etmektedir. Örneğin k değerimiz 3 olsun. Bu durumda öğrenme kümesindeki dökümanlardan en yakın 3 tanesi alınarak dökümanın hangi sınıfa ait olduğuna karar verilir. Örneğin aşağıdaki gibi iki boyutlu kordinat sistemine yerleştirilmiş örneklerimiz olsun.

 
Şekil 2 Örnekler[2]

Yukarıdaki örneklerden maviye mi yoksa kırmızıya mı benzediğini tespit etmemiz gereken bir de yeşil örneğimiz olsun.

 
Şekil 3 Örnekler ve Sınıflandırılacak Veri[2]

K değerimizi 3 aldığımızdan yeşil örneğe en yakın olan 3 örneğe bakarız. K değeri 4 olsaydı en yakın 4 örneğe bakacaktık.

 
Şekil 4 En Yakın Üç Komşu[2]

En yakın 3 örnekten 2 tanesi kırmızı olduğundan yeşil örnek için de kırmızı sınıfına aittir diyebiliriz.

K-NN algoritmasında benzerlik hesabı aşağıdaki formülden yararlanılarak yapılabilir.

Denklem 1: K-NN Denklemi[4]
 

Yukarıdaki formülde: Wij terimin doküman içerisindeki ağırlığı, di eğitim dokümanı vektörüdür. q ise kategorisi bulunması istenen vektördür.

Kaynaklar

1.     http://ab.org.tr/ab08/bildiri/71.pdf (Erişim Tarihi: Kasım 2010)
3.     P. Hall; B. U. Park; R. J. Samworth (2008). "Choice of neighbor order in nearest-neighbor classification".
4.   http://www.metinmadenciligi.com/kaynaklar/mm1.pdf (Erişim Tarihi: Kasım 2010)


5.12.10

Hadis Veritabanı


Hadis Programı başlıklı yazımda bahsettiğim hadis veritabanını aşağıdaki linkten indirebilirsiniz. Veritabanını www.muhaddis.org adresinden txt formatında aldım, aşağıdan indirebileceğiniz dosyada bu txt orjinal formatı da var. Bir de txt formatı access formatına çevirdim, bunu da dosyaya ekledim.

Bu veri tabanı Kütüb-i Sitte hadislerini içermektedir. Veritabanında hadis metninin yanında, fasıl, konu, ravi gibi bilgilerin bulunduğu alanlar da mevcuttur.


Kütüb-i Sitte: Altı Kitap anlamına gelmektedir. Altı sahih hadis kitabı, hadis kitapları içinde en sahihleri olarak kabul edilir. Bunlar: Buhârî ve Müslim'in el-Câmiu's-Sahih'leri ile Ebu Davud, Tirmizi, Nesâî ve ibn Mâce'nin Sünen'leridir. Hadis tasnifinin altın çağı olan Hicrî üçüncü yüzyılda hazırlanmıştır. Mümkün mertebe sahih hadisleri içerirler. 


Hadis ilimleri ile ilgili bir yazıyı buradan okuyabilirsiniz.

Hadis Veritabanını(access ve txt formatlarında) buradan indirebilirsiniz. (Hadis Veritabanı indir.)

Google'da hadis veritabanı olarak aratıldığında insanların veritabanına daha rahat ulaşabilmeleri için bu şekilde bir yazıyla siteme eklemek istedim, umarım faydalı olur, hayırlara vesile olur.



Related Posts Plugin for WordPress, Blogger...