İSTANBUL TEKNİK ÜNİVERSİTESİ FEN EDEBİYAT FAKÜLTESİ MATEMATİK MÜHENDİSLİĞİ PROGRAMI K-MEANS KÜMELEME VE K-NN SINIFLANDIRMA ALGORİTMALARININ ÖĞRENCİ NOTLARI VE HASTALIK VERİLERİNE UYGULANMASI BİTİRME ÖDEVİ Hilal ÖZKAN 090080049 Tez Danışmanı: Yar. Doç. Dr. Ahmet KIRIŞ OCAK 2013 ÖNSÖZ Bu çalışmayı hazırlarken her türlü yardımı ve desteği fazlasıyla sağlayan, hiçbir şekilde esirgemeyen saygıdeğer hocam Sayın Yar. Doç. Dr. Ahmet KIRIŞ’a, Sayın Dekanımız Prof. Dr. Emanullah HIZEL’e, üniversite hayatımda bana yol gösteren Sayın Hocalarım Dr. Sait KOFOĞLU, Yar. Doç. Dr. Mehmet Ali KARACA, Yar. Doç. Dr. Recep KORKMAZ ve Dr. Eti MİZRAHİ’ye, bana daima destek olan, güç veren sevgili arkadaşım E. Merve KARADAĞ’a, yaşantım boyunca her zaman olduğu gibi bu zorlu süreçte de yanımda olan, bana sevgi, güven ve her türlü maddi manevi desteği veren annem Psk. Filiz ÖZKAN’a, babam Doç. Dr. Ömer ÖZKAN’a ve sadece odamı değil çok şeyimi paylaştığım canım kardeşim Z. Reyhan ÖZKAN’a en içten teşekkürlerimi sunarım. Hilal ÖZKAN Ocak, 2013 OCAK 2013 ii İÇİNDEKİLER Sayfa ÖZET 1 1. GİRİŞ 2 2. K-MEANS KÜMELEME ALGORİTMASI 3 2.1. Tanım ve Tarihçe 3 2.2. K-means Algoritmasının Adımları 4 2.3. Algoritmanın Akış Şeması 5 2.4. k Sayısının Kümelemeye Etkisi 6 2.5. Uzaklık Ölçütleri 7 2.5.1. Öklid Uzaklık Ölçütü 7 2.5.2. Manhattan Uzaklık Ölçütü 7 2.5.3. Minkowski Uzaklık Ölçütü 8 2.5. Uygulama Alanları 8 3. K-NN SINIFLANDIRMA ALGORİTMASI 3.1. Tanım ve Tarihçe 9 9 3.2. K-NN Algoritmasının Adımları 10 3.3. k Sayısının Sınıflandırmaya Etkisi 12 3.4. Uygulama Alanları 13 4. UYGULAMA: ÖĞRENCİ HARF NOTLARININ BELİRLENMESİ 14 5. UYGULAMA: KALP HASTALIĞI TEŞHİSİ 18 6. EKLER 22 6.1. K-means Algoritmasının Kodları 22 6.2. K-NN Algoritmasının Kodları 25 KAYNAKLAR 27 iii iv ÖZET Öğrenci harf notlarının belirlenmesi için farklı algoritmalar kullanılmaktadır. Sapması düşük algoritmaların daha etkili olduğunu ve adil sonuçlar ortaya koyduğunu söylemek mümkündür. Tıp alanında geçmiş teşhis ve tedavi kayıtları, gelecek çalışmalara ışık tutmaktadır. Bu doğrultuda geçmiş kayıtların bilgisayar programları tarafından analiz edilmesi etkili tedaviyi destekleyici bir unsur oluşturmaktadır. Bu çalışmada kümeleme algoritmalarından K-means algoritması ve sınıflandırma algoritmalarından K-NN algoritması anlatılmış, bu iki algoritma kullanılarak öğrenci harf notlarının belirlenmesi ve kalp hastalığının teşhisi için hazırlanan uygulamalar Mathematica programı ile gerçekleştirilmiştir. 1 1. GİRİŞ İnsanoğlu hayatta karsılaştığı zorlukları yenebilmek için önceki tecrübelerine, bilgi birikimlerine ihtiyaç duyar. Bu yüzden tarih boyunca bunları saklayacak ve gerektiğinde kullanmayı sağlayacak teknikler geliştirmeye çalışmıştır. İlk çağlarda mağara duvarlarına resim seklinde kaydettiği verileri, ilerleyen çağlarda kâğıdın icadı ile birlikte kitaplara dökmüştür. Geleneksel veri kaydetme aracı olan kâğıdın yerini gün geçtikçe hızlanan ve ucuzlayan elektronik kayıt ortamlarına bırakması ile birlikte, yeryüzünde çok büyük veri yığınları oluşmaya başlamıştır. Yaşadığımız her saniye bu yığınlara yenileri eklenmektedir. Veri kendi basına bir değer ifade etmez, bir amaca yönelik olarak işlendiğinde bilgiyi oluşturur. Yakın geleceğin, geçmişten çok fazla farklı olmayacağı varsayıldığında, geçmiş veriden çıkarılmış olan kurallar gelecekte de geçerli olacak ve ilerisi için doğru tahmin yapmayı sağlayacaktır [5]. Fakat her veriden bilgi sağlamak mümkün olmayabilir. Veriden bilgi edinebilmek yani “veriden öğrenmek” için bazı koşulların sağlanması gerekmektedir. Bunlar Bir örüntü mevcuttur. Matematiksel olarak ifade edilemiyordur. Örnek veri kümesi vardır. şeklinde sıralanabilir [20]. Bilginin edinilebilmesi için öncelikle üzerinde çalışılacak örnek veri kümesine ihtiyaç vardır. Fakat bu veri kümesi bir örüntü içermiyor, rastgele verilerden oluşuyorsa bir algoritma geliştirmek mümkün değildir. Matematiksel formüller ile kesin çözüme ulaşılan sorunlarda ise eski veriler kullanılarak bir çıkarımda bulunmaya gerek kalmaz. Bu bitirme projesinde harf notları ve kalp hastalığı verileri kullanılarak iki farklı uygulama geliştirilmiştir. İlk uygulama, üç farklı sınavdan aldıkları notlar belli olan öğrencilerin harf notlarını adil bir şekilde belirlemeye yöneliktir. İkinci uygulamada ise veri kümesi hasta ve sağlıklı olarak ikiye ayrılmış, daha sonrasında bir kişinin hangi grupta yer alacağı belirlemek amaçlanmıştır. 2 2. K-MEANS ALGORİTMASI 2.1 Tanım ve Tarihçe K-means algoritmasının ana fikri 1957’de Hugo Steinhaus tarafından ortaya atılsa da [3] “K-means” terim olarak ilk defa 1967 yılında James MacQueen tarafından kullanılmıştır [4]. 50 yıldan fazla bir süre önce ortaya çıkan en eski kümeleme algoritmalarından biri olmasına rağmen, K-means algoritması günümüzde kümeleme için kullanılan en yaygın gözetimsiz öğrenme yöntemlerinden biridir [6]. Algoritmasının temelinde n tane veriyi k tane birbirinden ayrık küme oluşturacak şekilde gruplara ayırmak yatar. K-means’in atama mekanizması her verinin sadece bir kümeye ait olabilmesine izin verir [8]. Birbirine yakın veriler aynı kümede yer alırken birbirinden uzak veriler farklı kümelerde yer alırlar. Algoritmanın amacı; gerçekleştirilen gruplama işleminin sonunda küme içi benzerlikleri maksimum, kümeler arası benzerlikleri ise minimum hale getirmektir. Küme benzerliği, kümenin ağırlık merkezi olarak kabul edilen bir nesne ile kümedeki diğer nesneler arasındaki uzaklıkların ortalama değeri ile ölçülmektedir [1-2]. Kümeleme, verilerin en yakın veya benzer oldukları küme merkezleri etrafına yerleştirilmesi ile gerçekleştirilir. Algoritmaya K-means adı verilmesinin sebebi, algoritmanın başlangıcında sabit bir küme sayısına ihtiyaç duyulmasıdır. k ile gösterilen küme sayısı, verilerin birbirlerine olan yakınlıklarına göre oluşacak grup sayısını ifade eder. Kümeleme işleminden önce bilinen k, kümeleme işlemi bitene kadar değeri değişmeyen sabit bir pozitif tam sayıdır [5]. K-means algoritmasının performansını k küme sayısı, başlangıç olarak seçilen küme merkezlerinin değerleri ve benzerlik ölçümü kriterleri etkiler [7]. Küme merkezlerinin değerlerine bağlı olarak, özelikle de bu değerlerin rastgele seçilmesi durumunda, bir ya da birden fazla küme boş kalabilir [9]. Ayrıca bu algoritma çakışan kümelerde iyi sonuç vermez. K-means’in dezavantajlarından biri de, sadece sayısal verilerde kullanılabilir olmasıdır. Algoritmayı kategorik verilere doğrudan uygulamak mümkün değildir. Kullanılması için kategorik verilerin sayısal verilere dönüştürülmesi gerekmektedir. 3 2.2 K-means Algoritmasının Adımları Kümeleme işlemine başlamadan önce, bütün verilerin sayısal değerlere dönüştürülmesi ve verinin kaç kümeye ayrılacağının yani k sayısının belirlenmesi gerekir. Algoritmanın ilk adımında, bu k adet kümenin merkezleri için sayılar atanır. Atanan bu ilk küme merkezlerinin değerleri rastgele olabileceği gibi, algoritmanın daha iyi bir sonuç vermesi açısından farklı yöntemlerle de seçilebilir. Bir sonraki adım ise, veride bulunan her elemanın ilk küme merkezlerine olan uzaklıklarını hesaplamaktır. Hesaplanan uzaklıklar sonucu, her eleman en yakın olduğu kümeye yerleştirilir. Oluşan kümelerdeki elemanların ortalaması alınır ve bu sayı yeni küme merkezi olarak belirlenir. Verideki her elemanın yeni küme merkezlerine olan uzaklıkları hesaplanır ve en yakın olduğu kümeye yerleştirilir. Bu işlem küme merkezleri değişmeyene ya da belirlenen çevrim sayısına ulaşılana kadar tekrarlanır. K-means algoritmasının işlem basamakları şu şekilde özetlenebilir: 1. Adım: İlk küme merkezleri belirlenir. Küme merkezleri rastgele seçilebilir ya da bu işlem için farklı bir yöntem belirlenir. 2. Adım: Her nesnenin seçilen merkez noktalara olan uzaklığı hesaplanır. Elde edilen sonuçlara göre tüm elemanlar k adet kümeden kendilerine en yakın olan kümeye yerleştirilir. 3. Adım: Oluşan kümelerin yeni merkez noktaları o kümedeki tüm elemanların ortalama değeri ile değiştirilir. 4. Adım: Merkez noktalar değişmeyene kadar ya da belirlenen çevrim sayısı tamamlanana kadar 2. ve 3. adımlar tekrarlanır. 4 2.3 Algoritmanın Akış Şeması Başla k tane küme merkezi belirle i=1 i. elemanı seç i. elemanı en yakın olduğu küme merkezine ata i= i+1 HAYIR Tüm elemanlar seçildi mi? EVET Kümelerin yeni merkez noktalarını o kümedeki tüm elemanların ortalama değeri ile değiştir Merkez noktaları sabit kaldı mı? / Belirlenen çevrim sayısına ulaşıldı mı? EVET Bitir 5 HAYIR 2.4 k Sayısının Kümelemeye Etkisi K-means algoritmasında kümeleme işleminden önce seçilen k sayısının önemi Şekil 2.1’de gösterilmiştir. Örnekteki verilerin dağılımı Şekil 2.1 (a)’da görülmektedir. k sayısının 2 seçilmesi durumunda kümeleme sonucu oluşacak kümeler Şekil 2.1 (b)’de gösterilmiş, küme merkezlerinin son halleri üçgen simgelerle temsil edilmiştir. Şekil 2.1 (c)’de ise k sayısının 3 seçilmesi sonucu ortaya çıkacak durum verilmiştir. Şekillerde açıkça görüldüğü gibi başlangıçta seçilen k sayısı kümeleme işleminin sonucunu değiştirmektedir. Şekil 2.1: K-means kümeleme algoritması K-means ve benzeri kümeleme algoritmaları k sayısının belirlenmesi konusunda bir çözüm sunmazlar. Ancak birçok durumda, özel bir k değerinin belirlenmesi gerekli olmaz. Analiz aşamasında k değerinin tespiti için ön çalışma yapılır. Tahmini bir değer kullanılarak kümeleme algoritması çalıştırılır ve alınan sonuçlar değerlendirilir. Değerlendirme sonucunda beklenen kümeleme görülmez ise, başka bir k değeri kullanılarak tekrar kümeleme algoritması çalıştırılır veya veriler üzerinde değişiklik yapılabilir. Algoritmanın her çalıştırılması sonrasında, ortaya çıkan kümelerin etkinliğini hesaplamak için, küme içindeki kayıtların arasındaki ortalama uzaklık ile kümeler arası ortalama uzaklık karşılaştırılır. Hesaplamada başka yöntemler de kullanılabilir. Bu yöntemler algoritmaya dâhil edilebilir. Ancak ele alınan uygulama açısından sonucun yararlılığının belirlenmesi için kümeler mutlaka daha öznel temelde değerlendirilmelidir [10]. 6 2.5 Uzaklık Ölçütleri Bir veri setinde yer alan birimlerin kümelenmesi işlemi bu birimlerin birbirleriyle olan benzerlikleri ya da birbirlerine olan uzaklıkları kullanılarak gerçekleştirilmektedir. Değişkenlerin kesikli ya da sürekli olmalarına ya da değişkenlerin nominal, ordinal, aralık ya da oransal ölçekte olmalarına göre hangi uzaklık ölçüsünün ya da hangi benzerlik ölçüsünün kullanılacağına karar verilir [11]. K-means kümeleme algoritmasında her elemanın küme merkezlerine uzaklığını ölçmek için farklı yöntemler kullanılabilir. En yaygın olarak kullanılan Öklid uzaklık ölçütüdür. Öklid uzaklık ölçütüne ek olarak, Manhattan uzaklık ölçütü ve Minkowski uzaklık ölçütü de sık kullanılan yöntemler arasındadır. Her uzaklık ölçütü şu şartları sağlar: d i, j 0 ; Uzaklık negatif olamaz. d i,i 0 ; Her elemanın kendisine olan uzaklığı sıfırdır. d i, j d j,i ; Uzaklık fonksiyonu simetriktir. d i, j d i, h + d h, j ; Üçgen Eşitsizliği: İki eleman arasındaki uzaklık bu iki elemanın üçüncü bir elemana olan uzaklıkları toplamından küçük olamaz. 2.5.1 Öklid Uzaklık Ölçütü Öklid uzaklığı ve Öklid uzaklığının karesi formülleri ile standartlaştırılmış verilerle değil, işlenmemiş verilerle hesaplama yapılır. Öklid uzaklıkları kümeleme analizine sıra dışı olabilecek yeni nesnelerin eklenmesinden etkilenmezler. Ancak boyutlar arasındaki ölçek farklılıkları Öklid uzaklıklarını önemli ölçüde etkilemektedir. Öklid uzaklık formülü en yaygın olarak kullanılan uzaklık hesaplama formülüdür. d i, j x i1 x j1 x i2 x j2 x ip x jp 2.5.2 Manhattan Uzaklık Ölçütü Manhattan uzaklığı boyutlar arasındaki ortalama farka eşittir. Bu ölçüt kullanıldığında farkın karesi alınmadığı için sıra dışılıkların etkisi azalır. Manhattan uzaklık ölçütü kullanılarak iki birim arasındaki uzaklık 7 d i, j x i1 x j1 x i2 x j2 x ip x jp formülü ile hesaplanır. Bu ölçü de birimler arasındaki mutlak uzaklık kullanılır. Manhattan uzaklık ölçütüne, “city block uzaklık ölçütü” adı da verilir. 2.5.3 Minkowski Uzaklık Ölçütü Minkowski uzaklık ölçüsü genel bir formüldür. Formülde yer alan m değerinin alacağı farklı değerlere göre yeni formüller türetir. Minkowski uzaklık ölçüsü kullanılarak iki birim arasındaki uzaklık m m d i, j x i1 x j1 x i2 x j2 m 1m x ip x jp formülü ile hesaplanır. Minkowski uzaklık ölçüsündeki m değeri büyük ve küçük farklara verilen ağırlığı değiştirir. m=1 değerini alırsa, formül, Manhattan uzaklık ölçütünün formülüne, m=2 değerini alırsak, formül Öklid uzaklık ölçütü formülüne dönüşür [11]. 2.6 Uygulama Alanları K-means kümeleme algoritmasının uygulama alanı oldukça geniştir. Bunlardan bazıları şu şekilde sıralanabilir: Pazarlama: Müşteri özelliklerini ve geçmiş alışveriş kayıtlarını içeren geniş bir veri havuzunda benzer tutumdaki müşterilerin tespiti Biyoloji: Özniteliklerinden yola çıkarak bitki ve hayvanların sınıflandırılması Sigorta: Yüksek ortalama talep maliyetine sahip sigorta poliçesi sahiplerinin belirlenmesi, sahtekarlıkların tespiti Şehir Planlama: Ev tiplerine bağlı olarak ev topluluklarının gruplanması, değer ve coğrafik yer Deprem Çalışmaları: Gözlemlenen deprem merkez üssüleri yardımıyla tehlikeli bölgelerin belirlenmesi [12] Medikal: Kalp hastalığı verilerinden yararlanarak kişinin kalp hastası ya da sağlıklı olarak gruplandırılması Eğitim: Sayısal not verileri kullanılarak öğrencinin harf notunun belirlenmesi. 8 3. K-NN ALGORİTMASI 3.1 Tanım ve Tarihçe ABD Hava Kuvvetleri Hava Hekimliği Okulu’nun 1951 yılındaki yayınlanmamış bir raporunda Fix ve Hodges tarafından patent tanıma alanında kullanılmak üzere parametrik olmayan bir yöntem tanıtılmış ve o zamandan itibaren bu yöntem KNearest Neighbor algoritması olarak adlandırılmıştır. K-Nearest Neighbor algoritması daha sonra 1967’de Cover ve Hart tarafından geliştirilmiştir. Geliştirilen sınıflandırma algoritması sayesinde, yeni kabul yaklaşımları (Hellman, 1970), Bayes hata oranının geliştirilmesi (Fukunaga & Hostetler, 1975), uzaklık ağırlıklı yaklaşımlar (Dudani, 1976; Bailey & Jain, 1978), esnek hesaplama yöntemleri (Bermejo & Cabestany, 2000) ve bulanık yöntemler (Jozwik, 1983; Keller et al, 1985) de dâhil pek çok yeni araştırma ortaya çıkmıştır [15]. Kısaca K-NN olarak ifade edilen K-Nearest Neighbor (K-En Yakın Komşu) sınıflandırma algoritmasının temelinde “birbirine yakın olan nesneler muhtemelen aynı kategoriye aittir” mantığı yatar. Algoritmanın amacı, yeni bir nesneyi özelliklerinden faydalanarak önceden sınıflandırılmış örnekler yardımıyla sınıflandırmaktır [19]. Hangi sınıfa ait olduğu bilinmeyen nesne sınama örneği, önceden sınıflandırılmış nesneler ise öğrenme örnekleri olarak adlandırılır. K-NN algoritmasında sınama örneğinin öğrenme örneklerine olan uzaklıkları hesaplanır ve en yakınındaki k adet örnek çoğunlukla hangi sınıfa aitse sınama örneğinin de o sınıfa ait olduğu düşünülür. Şekil 3.1 K-NN Sınıflandırma Algoritması [16] 9 Şekil 3.1’de K-NN algoritmasının mantığı görsel olarak ifade edilmiştir. Burada dikkat edilmesi gereken k sayısına bağlı olarak sınıflandırmanın farklı sonuçları olabileceğidir. Bu konudan k Sayısının Sınıflandırmaya Etkisi başlığı altında detaylı olarak bahsedilecektir. K-Nearest Neighbor algoritması kolay anlaşılabilir bir algoritma olduğu için uygulaması basittir. Sayısal veriler üzerinde uygulanması kategorik verilere oranla daha kolaydır. Ayrıca gürültüye sahip veriler için de olumlu sonuçlar ortaya koyar. Fakat algoritmada kullanılacak verilerin saklanması hafızada fazla yer kaplar. KNN’in bir diğer dezavantajı da yeni bir nesneyi sınıflandırırken diğer nesnelere olan uzaklığının hesaplanması ve karşılaştırılmasının zaman almasıdır. K-Nearest Neighbor algoritmasını kullanmanın avantajları ve dezavantajları şu şekilde özetlenebilir. Avantajları; Gürültüye sahip öğrenme verilerinde de güçlü sonuçlar ortaya koyması, Öğrenme verilerinin çok olması durumunda etkili sonuç vermesidir. Dezavantajları; k sayısının belirlenmesinin gerekliliği, Uzaklığa bağlı bir sınıflandırma yöntemi olduğu için hangi uzaklık ölçütünün kullanılacağına dair bir kesinlik olmaması, Sınama örneğinin öğrenme örneklerine olan uzaklıkları tek tek hesaplanacağı için hesaplama zamanının ve masrafının fazla olmasıdır [18]. 3.2 K-NN Algoritmasının Adımları Sınıflandırma işlemine başlamadan önce, bütün verilerin sayısal değerlere dönüştürülmesi ve en yakın kaç tane komşuya bakılacağının yani k sayısının belirlenmesi gerekir. Bir örneğin sınıflandırılması için sınıfı bilinen örnekler seçilir. Sınama örneğinin sınıfını belirlerken öğrenme örnekleri kümesindeki örneklere olan uzaklıkları hesaplanır ve en yakın k tane örnek seçilir. Uzaklık hesaplanırken Öklid, Manhattan, Minkowski gibi farklı uzaklık ölçütlerinden yararlanmak mümkündür fakat çoğunlukla Öklid uzaklık ölçütü kullanılır. Daha sonra, seçilen k tane örnek 10 arasında hangi sınıfa ait örnek sayısı en fazlaysa sınama örneği de bu sınıfa aittir denir. Şekil 3.2 K-NN ile Pozitif-Negatif Teşhisi[16] Şekil 3.2’de pozitif ve negatif olarak iki kümeye ayrılmış veri yardımıyla bilinmeyen nesnenin sınıflandırılmasına bir örnek verilmiştir. Nesnenin en yakın üç komşusu pozitif kümesinde yer aldığı için kendisinin de pozitif olduğu çıkarımında bulunulabilir. Öğrenme kümesindeki örnekler xi , sınama örneği xq ile gösterilmek üzere K-NN yöntemini, yakın olan örneklerin ağırlığını artırarak w 1 formülü ile d ( xq , xi ) 2 uzaklık ağırlıklı K-NN yöntemi haline getirmek de mümkündür. K-NN sınıflandırma algoritmasının işlem basamakları şu şekilde özetlenebilir: 1. Adım: Sınama örneğinin öğrenme örneklerine olan uzaklıkları hesaplanır. 2. Adım: En yakın olan k tane örnek seçilir. 3. Adım: Hangi sınıfa ait örnek sayısı en fazlaysa sınama örneği de bu sınıfa atanır. 11 3.3 k Sayısının Sınıflandırmaya Etkisi Şekil 3.3.1 k Sayısının Sınıflandırmaya Etkisi Şekil 3.3.1’de K-NN algoritmasının mantığı görsel olarak ifade edilmiştir. Şekil 3.3.1 (a)’da k sayısı 1 seçilerek en yakın bir komşu A sınıfına dâhil olduğu için sınıflandırılmak istenen nesnenin de A sınıfına ait olduğu sonucuna ulaşılmıştır. (b)’de ise k sayısı 3 seçildiğinde en yakın üç komşudan ikisinin B, birinin ise A grubuna dâhil olduğu görülmüş ve sınıflandırılmak istenen nesnenin B sınıfına ait olduğu sonucuna ulaşılmıştır. Şekil 3.3.2 K-NN ile Sınıflandırma Şekil 3.3.2’de görüldüğü gibi xq örneği; 1-en yakın komşuya göre (k=1) pozitif, 5-en yakın komşuya göre (k=5) negatif olarak sınıflandırılır [18]. 12 k sayısına bağlı olarak sınıflandırmanın farklı sonuçlar verebileceği bu örnekte de görülmüştür. 3.4 Uygulama Alanları K-Nearest Neighbor algoritmasının veri madenciliği, istatistiksel patern tanıma, görüntü işleme ve pek çok alanda kullanılan bir yöntemdir [19]. Algoritmanın bazı uygulamaları aşağıdaki gibidir. Kredi başvurusu değerlendirme Kredi kartı harcamasının sahtekârlık olup olmadığına karar verme Hastalık teşhisi Ses tanıma Karakter tanıma Gazete haberlerini konularına göre ayırma Kullanıcı davranışları belirleme [17] El yazısı tanıma Uydu görüntüsü tanısı EKG örüntülerinin incelenmesi [19]. 13 4. UYGULAMA: ÖĞRENCİ HARF NOTLARININ BELİRLENMESİ Bu bölümde öğrencilerin bir derste yapılan 3 farklı sınavdan aldığı notlardan bir veri oluşturulmuştur. Öğrencilerin bu 3 sınavdan aldıkları notlar baz alınarak K-means kümeleme algoritması yardımıyla yıl sonu başarı notları belirlenmiştir. Sonrasında ise K-NN algoritması yardımıyla başlangıçta kümelemeye dahil olmayan bir öğrencinin hangi harf notunu alacağı saptanmıştır. 250 öğrencinin 3 farklı sınav notlarından oluşan veri aşağıdaki gibidir. 14 İlk küme merkezlerini rastgele seçmek yerine algoritmanın verimliliğini artırmak için bir yol geliştirilmiştir. Öncelikle not listesinin uzunluğu hesaplanmış ve ardından kümelenecek eleman sayısı olan k = 8 (AA, BA, BB, CB, CC, DC, DD, FF) ‘e bölünmüştür. Bu bölüm sonucunda çıkan sayı tam sayıya yuvarlanmış ve notlar listesinde 8 küme oluşturulmuştur. Bu 8 kümenin ayrı ayrı aritmetik ortalamaları alınıp elde edilen sayılar ilk küme merkezleri olarak atanmıştır. 1. KUME MERKEZLERI = {{13.6613, 12.4194, 12.7581}, {20.3226, 18.8387, 18.3226}, {32.9032, 32.5806, 27.6129}, {42.4194, 44.871, 40.871}, {53.3871, 57.4516, 54.5484}, {63.8387, 68.7742, 65.5806}, {77.7742, 81.6129, 79.7742}, {83.8871, 85.8065, 84.8871}} Bu ortalamalara -yani ilk küme merkezlerine- göre, notlar listesinin tüm elemanlarının 8 ayrı küme merkezine olan uzaklıkları Öklid uzaklık ölçütü ile hesaplanmış ve notlar listesinin 3 sınav notlarından oluşan her bir elemanı, uzaklığının minimum olduğu kümeye dâhil edilmiştir. Burada göz önünde bulundurulması gereken nokta, 3 sınav notunun harf notuna etkisinin eşit kabul edilmiş olmasıdır. Sınav notlarına farklı ağırlıklar verilmek istenirse Öklid uzaklık ölçütünde d i, j w1 x i1 x j1 w 2 x i2 x j2 2 2 w p x ip x jp 2 formülü kullanılmalıdır. Burada geçen w i ( i 1,2,...,p ) değerleri her sınav notunun ağırlığını temsil etmektedir. Daha sonra oluşturulan her bir kümenin aritmetik ortalaması alınmış ve bu ortalamalar yeni küme merkezleri olarak atanmıştır. Sonraki aşamada her kümenin içi boşaltılmış, her elemanın yeni küme merkezlerine olan uzaklıkları tekrar hesaplanarak, uzaklığının minimum olduğu kümeye dâhil edilmiş ve tekrar yeni küme merkezleri oluşturulmuştur. Maksimum iterasyon sayısı 20 olarak belirlense de kümeleme işlemi 8. adımda tamamlanmıştır. En iyi sonucun küme merkezleri {{9.1764,10,14.852}, {45.292,45.292,50.682}, {25.363,19.045,20.09}, {48.642,80.571,18.071}, {33.945,35.189,27.702}, {56.857,57.964,71.964}, {73.771,72.171,67.571}, {87.641,90.359,87.692}} olarak bulunmuştur. Bu kümeleme sonucu oluşan sapma değeri 1396.20 olarak hesaplanmıştır. 15 Ancak K-means algoritması başlangıç ortalamalarına bağlı olarak farklı sonuçlar verebilmektedir. Daha iyi sonuçların elde edilebilmesi için başlangıç ortalamalarına kullanıcının belirlediği bir aralık dâhilinde keyfi ekleme-çıkarma yapılmıştır. Keyfi ekleme-çıkarma aralığı 10 olarak belirlenmiştir. Bu işlem 20 kez tekrarlanarak birbirinden farklı 20 başlangıç ortalaması elde edilmiştir. Bu işlemler sonrasında hangi başlangıç ortalamasının daha iyi sonuç verdiğini görebilmek adına her bir adımda standart sapmalar hesaplanmış ve standart sapma değeri en küçük olan kümeleme en iyi sonuç kabul edilmiştir. En iyi sonucun küme merkezleri {{16.784,17.224,22.171}, {19.495,18.585,14.624}, {23.422,29.176,25.438}, {43.675,41.434,36.697}, {60.280,49.827,48.152}, {62.05,66.455,73.571}, {76.201,79.61,83.104}, {83.464,90.045,76.983}} olarak bulunmuştur. Programda maksimum iterasyon sayısı 5 seçildiği için, bu başlangıç koşulları ile 5 iterasyon sonucunda oluşan sapma değeri 1334.31 olarak hesaplanmıştır. Bu sayı eski sapma değerinden düşük olduğu için algoritmanın verimliliğinin arttığı gözlemlenmiştir. Ayrıca Mathematica programının içerdiği FindClusters fonksiyonu ile de notlar verisi 8 kümeye ayrılmış, bu ayrışım sonucunda oluşan sapma değeri 1340.17 olarak hesaplanmıştır. K-means algoritmasının daha iyi bir sonuç verdiği görülmektedir. Program bir de FF harf notuna bir sınır getirilerek çalıştırılmıştır. {10, 12, 15} değerlerinin altında kalan notlar programda işleme sokulmamış, doğrudan FF olarak belirlenmiştir. Bu durumda ise en iyi sonucun küme merkezleri {{31.1,28.376,35.34}, {26.69,39.462,31.383}, {49.87,52.041,51.057}, {60.521,57.794,63.687}, {69.163,73.79,61.288}, {72.248,88.466,85.627}, {90.817,88.317,84.996}} olarak bulunmuştur. Bu kümeleme sonucu oluşan sapma değeri 978.38 olarak hesaplanmıştır. Buradan da görüldüğü gibi kümeleme işleminde kullanılacak veriye bir sınır getirmek algoritmanın verimliliğini artırmaktadır. Sonrasında kümelenmiş veri üzerinde K-NN algoritması ile veriye dahil olmayan birkaç öğrenci notunun hangi kümeye dahil olacağı hesaplanmıştır. İlk öğrencinin 16 sınav notları {75, 75, 60} olarak seçilmiş, en yakın olduğu 10 komşu ile BB harf notunu alacağı saptanmıştır. Bu işlem 3 farklı öğrenci için de yapılmıştır. Notları {50, 55, 30} olan öğrencinin BB, {68, 73, 80} olan öğrencinin BA, {80, 87, 92} olan öğrencinin ise AA notunu alması gerektiği hesaplanmıştır. Burada dikkat edilmesi gereken, algoritmanın son halinde 7 grup oluşturulmuş olması ve {10, 12, 15} notunun altında kalan FF harf notlu öğrencilerin kümelemeye dahil edilmemiş olmasıdır. K-NN ile öğrencinin harf notu saptanmaya başlanmadan önce FF grubuna dahil olup olmadığı kontrol edilmelidir. Aksi durumda algoritma yanlış sonuç verecektir. Bu uygulama sonucunda K-means kümeleme algoritmasının öğrenci harf notlarını belirlemek için kullanılabilecek etkili bir algoritma olduğu belirlenmiştir. 17 5. UYGULAMA: KALP HASTALIĞI TEŞHİSİ Kalp hastalığı dünyadaki başlıca ölüm sebeplerinden biridir. Dünya Sağlık Örgütü’nün raporuna göre kalp hastalığı, yüksek ve düşük gelirli ülkelerde önde gelen ölüm sebepleri arasında ilk sıradadır [13]. Geçmiş yıllara ait hasta verileri yardımıyla kalp hastalığının teşhisi için farklı verimliliklere sahip çeşitli algoritmalar geliştirilmiştir. Bu çalışmada öncelikle K-means kümeleme yöntemi yardımıyla kişiler hasta ve sağlıklı olmak üzere 2 gruba ayrılmış sonrasında K-NN sınıflandırma algoritması ile veride yer almayan başka bir kişinin kalp hastası olup olmadığı teşhis edilmiştir. Çalışmada kullanılan Cleveland Kalp Hastalığı Verisi (Cleveland Heart Disease Data - CHDD) California Üniversitesi Makine Öğrenimi Veri Havuzu’ndan (UCI Machine Learning Repository) alınmıştır. http://archive.ics.uci.edu/ml/datasets/Heart+Disease bağlantısından veriye ulaşılabilir. Veri kümesi 76 nitelik içermektedir fakat şimdiye kadar yapılan çalışmaların hepsinde bunlardan sadece 13’ü kullanılmıştır. Bu 13 niteliğin 4’ü sürekli, 9’u nominaldir. Kullanılan nitelikler aşağıdaki tablodaki gibidir. 1 YAŞ 2 CİNSİYET 3 4 5 6 7 8 9 10 11 12 13 1: ERKEK 0: KADIN 1: TİPİKAL ANJİN 2: ATİPİKAL ANJİN GÖĞÜS AĞRISI TİPİ 3: NON-ANJİNAL AĞRI 4: SEMPTOMSUZ DİNLENME HALİNDE KAN BASINCI (mm Hg) KOLESTROL 1: >120 AÇLIK KAN ŞEKERİ 0: <120 0: NORMAL DİNLENME HALİNDE 1: ST-T DALGASI ABNORMALİTESİ KARDİYOGRAFİK SONUÇ 2: SOL VENTRİKÜL HİPERTROFİSİ MAKSİMUM KALP ATIŞ HIZI 1: EVET EGZERSİZ SONUCU ANJİN 0: HAYIR DİNLENME SONRASI EGZERSİZ SONUCU ORTAYA ÇIKAN ST DEPRESSION DEĞERİ 1: YUKARI EĞİMLİ ST BÖLGESİ EĞİMİ 2: DÜZ 3: AŞAĞI EĞİMLİ FLOROSKOPİ İLE BOYANAN ANA DAMAR SAYISI (0-3) 3: NORMAL KAN RAHATSIZLIĞI 6: KRONİK 7: AKUT 18 Veride yer alan kalp hastası olma ya da olmama bilgisi ise algoritmanın doğruluğunu test etmek için kullanılmıştır. 14 KALP HASTALIĞI 0: DAMAR DARALMASI < %50 1: DAMAR DARALMASI > %50 Cleveland Kalp Hastalığı Verisi 303 satırdan oluşsa da 6 satır eksik bilgi içerdiği için çalışmada 297 satırdan yararlanılmıştır. 297 satırın 160’ı (%53.87’si) sağlıklı bireyleri, 137’si (%46.13’ü) ise çeşitli derecelerde kalp hastalığına sahip bireyleri içermektedir. Niteliklerin dağılımı mavi renk sağlıklı, kırmızı renk hasta bireyleri gösterecek şekilde aşağıda verilmiştir. Şekil 5.1 Cleveland Kalp Hastalığı Verisinde niteliklerin dağılımı [14] Uygulamaya başlamadan önce daha iyi bir sonuç vermesi için Cleveland Kalp Hastalığı Verisi normalize edilmiştir. Bireyler hastalıklı ve sağlıklı olarak ikiye ayrılacağı için k sayısı 2 olarak seçilmiştir. Öğrenci Harf Notlarının Belirlenmesi uygulamasında ilk küme merkezlerinin belirlenmesi için geliştirilen yöntem burada da kullanılmıştır. 1. KUME MERKEZLERI = 19 {{1.70904,1.51351,1.69215,1.69285,1.52656,1.25,1.25253,1.73721,1.25,1.26725,1.5 152,1.25,1.57143}, {2.80603,2.67568,2.79476,2.79524,2.68437,2.5,2.50169,2.82481,2.5,2.5115,2.6768, 2.5,2.71429}} olarak bulunmuştur. Daha iyi sonuçların elde edilebilmesi için başlangıç ortalamalarına kullanıcının belirlediği bir aralık dâhilinde keyfi ekleme-çıkarma yapılmıştır. Keyfi eklemeçıkarma aralığı 10 olarak belirlenmiştir. Bu işlem 20 kez tekrarlanarak birbirinden farklı 20 başlangıç ortalaması elde edilmiştir. Bu işlemler sonrasında hangi başlangıç ortalamasının daha iyi sonuç verdiğini görebilmek adına her bir adımda standart sapmalar hesaplanmış ve standart sapma değeri en küçük olan kümeleme en iyi sonuç kabul edilmiştir. En iyi sonucun küme merkezleri {{0.73254,0.83823,0.986766,0.868969,0.406885,0.846725,0.312739,0.822397,0.035 7823,0.656089,0.736774,0.129896,0.945556}, {0.516809,0.785961,0.434826,0.723922,0.837698,0.0643809,0.38759,0.578262,0.30 4528,0.180985,0.916345,0.778737,0.695027}} olarak bulunmuştur. Programda maksimum iterasyon sayısı 5 seçildiği için, bu başlangıç koşulları ile 5 iterasyon sonucunda oluşan sapma değeri 68.86 olarak hesaplanmıştır. Mathematica programının içerdiği FindClusters fonksiyonu ile de notlar verisi 2 kümeye ayrıldığında oluşan sapma değeri 73.20 olarak hesaplanmıştır. Yani bu uygulamada da K-means algoritmasının daha iyi bir sonuç verdiği gözlemlenmiştir. K-means algoritmasıyla sınıflandırılmış veri kullanılarak sınama verisi olarak seçilen {0.81, 1, 0.25, 0.72, 0.41, 1, 1, 0.74, 0, 0.37, 1, 0, 0.86} değerlerine sahip kişinin kalp hastası olup olmadığı K-Nearest Neighbor algoritması ile test edilmiştir. k sayısına 5, 20, 50, 100, 200 gibi farklı değerler atanarak program çalıştırılmış ve KNN algoritması kişiyi her seferinde sağlıklı olarak sınıflandırılmıştır. k sayısının seçimi, bazı durumlarda ise farklı sonuçlar verebilmektedir. Bir diğer uygulamada sınama verisi olarak {0.74, 0, 1, 0.65, 0.23, 0, 0, 0.57, 1, 0.19, 0.67, 0.33, 1} değerlerine sahip kişi seçilmiştir. k sayısı 169 seçildiğinde K-NN 20 algoritması kişiyi sağlıklı olarak, 168 seçildiğinde ise kişiyi hasta olarak sınıflandırmıştır. 21 6. EKLER 6.1 K-means Algoritmasının Kodları ortilkV[list_,kumesay_]:=Block[{el1,el2,el3,el4}, el1=Length[list]; el2=Sort[list]; el3=Floor[el1/kumesay]; Do[ el4[i]=Sum[el2[[j]],{j,(i-1) el3+1,i el3}]/Max[{el3,10^(-10)}]; ,{i,1,kumesay-1}]; el4[kumesay]=Min[Max[Sum[el2[[j]],{j,(kumesay-1) el3+1,el1}]/Max[{(el1(kumesay-1) el3),10^(-10)}],5],90]; Return[Table[N[el4[i]],{i,1,kumesay}]]] ortilkM[list_,kumesay_]:=Block[{el1,uz1,el2}, el1=Transpose[list]; uz1=Length[el1]; el2=Transpose[Table[ortilkV[el1[[i]],kumesay],{i,1,uz1}]]; el2[[kumesay]]=(el2[[kumesay-1]]+el2[[kumesay]])/2; el2[[1]]=(el2[[1]]+el2[[2]])/2; Return[el2]] UzBV[vec1_,vec2_]:=Block[{uz1,top,dis}, uz1=Length[vec1]; top=Sum[(vec1[[i]]-vec2[[i]])^2,{i,1,uz1}]; dis=N[Sqrt[top]]; Return[dis]] ayirM[list_,ortlist_]:=Block[{kumesay,el0,el1,el2,orts,el3,el4,el5,el6,ortn,send,sart}, kumesay=Length[ortlist]; el0=list; el1=Length[el0]; Do[el2[i]={},{i,1,kumesay}]; orts=ortlist; Do[el3=el0[[i]]; 22 el4=Table[UzBV[el3,orts[[j]]],{j,1,kumesay}]; el5=Min[el4]; el6=Position[el4,el5][[1,1]]; AppendTo[el2[el6],el3] ,{i,1,el1}]; Do[If[Length[el2[i]]==0,AppendTo[el2[i],el2[i+1][[1]]];el2[i+1]=Drop[el2[i+1], {1}]],{i,1,kumesay-1}]; If[Length[el2[kumesay]]==0,AppendTo[el2[kumesay],el2[kumesay1][[Length[el2[kumesay-1]]]]];el2[kumesay-1]=Drop[el2[kumesay1],{Length[el2[kumesay-1]]}]]; ortn=Table[N[Sum[el2[i][[j]],{j,1,Length[el2[i]]}]/Max[{Length[el2[i]],10^(10)}],4],{i,1,kumesay}]; send=Table[{el2[i],ortn[[i]]},{i,1,kumesay}]; Return[send]] sapmaM[list_]:=Block[{el0,uz0,el1,el2,el3,el4,uz1,sap,topsap}, el0=list; uz0=Length[el0]; Do[el1[i]=el0[[i]]; el2[i]=Length[el1[i]]; el3[i]=N[Sum[el1[i][[j]],{j,1,el2[i]}]/Max[{el2[i],10^(-10)}]]; el4[i]=Sqrt[Sum[(el1[i][[j]]-el3[i])^2,{j,1,el2[i]}]]; uz1=Length[el4[i]]; sap[i]=Sum[el4[i][[j]],{j,1,uz1}] ,{i,1,uz0}]; topsap=N[Sum[sap[i],{i,1,uz0}]]; Return[topsap]] kumelemeM[list_,kumesay_,ortl_,maxit_]:=Block[{el0,el1,sart,ort0,kumsap,kume,ku me1,i,orts}, el0=Sort[list]; el1=Length[el0]; sart=True; ort0=ortl; kume[0]=ayirM[el0,ort0]; i=0; While[sart, 23 kume1=Table[kume[i][[j,1]],{j,1,kumesay}]; kumsap[i]=sapmaM[kume1]; Print[StringForm["``. adim KUMELEME = `` \n SAPMA= `` ",i,kume[i],kumsap[i]]] ; orts[i]=Table[kume[i][[j,2]],{j,1,kumesay}]; kume[i+1]=ayirM[el0,orts[i]]; sart=kume[i+1]!= kume[i] && i<maxit; i=i+1]; Return[{kume[i],kumsap[i-1]}]] RANDKUMM[list_,kumesay_,randsay_,randara_,maxit_]:=Block[{el0,el1,uz1,el2,el 3,el4,el5,el6,el7,hata,minh,sonuc}, el0=list;hata=10^(10); el1=ortilkM[el0,kumesay]; el3=Transpose[el0]; uz1=Length[el3]; el2={el1}; Do[ Do[el4[i]=Min[el3[[i]]];el5[i]=Max[el3[[i]]],{i,1,uz1}]; Do[Do[el6[i,j]=Random[Real,{Max[{el4[j],el1[[i]]randara}],Min[{el5[j],el1[[i]]+randara}]}],{j,1,uz1}],{i,1,kumesay}]; el2=AppendTo[el2,Table[el6[i,j],{i,1,kumesay},{j,1,uz1}]] ,{i,1,randsay}]; Do[ Print[StringForm["``. BASLANGIC ORTALAMALARI =`` \n",i,el2[[i]]]]; el7[i]=kumelemeM[el0,kumesay,Sort[el2[[i]]],maxit]; If[el7[i][[2]]<hata,hata=el7[i][[2]];minh=i;sonuc=el7[i]],{i,1,randsay}]; Print[StringForm[" \n \n **** SONUC **** \n \n En iyi sonucun baslangic ortalamalari =`` \n \n Sapmasi=`` \n \n GRUPLAR ve ORTALAMALARI ",el2[[minh]],hata]]; Return[sonuc]] NOTKUMEM[list_,Fsinir_,kumesay_,randsay_,randara_,maxit_]:=Block[{el0,el1,el 2,uz1,el3,el4,sart}, el0=Sort[list]; el1=Length[el0]; 24 el2={};el3={}; uz1=Length[Fsinir]; Do[ el4=el0[[i]]; sart=True; Do[If[el4[[i]]<=Fsinir[[i]],sart=False],{i,1,uz1}]; If[sart,AppendTo[el2,el4],AppendTo[el3,el4]],{i,1,el1}]; Return[{el3,RANDKUMM[el2,kumesay-1,randsay,randara,maxit]}]] gruplarM=NOTKUMEM[notlarM,{10,12,15},8,20,10,5] 6.2 K-NN Algoritmasının Kodları UzBVY[vec1_,vec2_]:=Block[{uz1,top,dis}, uz1=Length[vec1]-1; top=Sum[(vec1[[i]]-vec2[[i]])^2,{i,1,uz1}]; dis=N[Sqrt[top]]; Return[dis]] KNM[gruplist_,new_,k_]:=Block[{el0,uz0,el1,el2,uz1,el3,el4,el5,uz2,uz3,el6,uz4,el7, el8}, el0=gruplist; uz0=Length[el0]; el1={}; Do[el2=el0[[i]]; uz1=Length[el2]; Do[el3=el2[[j]]; el4=Insert[el3,i,-1]; AppendTo[el1,el4],{j,1,uz1}],{i,1,uz0}]; el5=new; uz2=Length[el1]; uz3=Length[el1[[1]]]; Do[ el6=el1[[i]]; uz4[i]={UzBVY[el6,el5],el6[[uz3]]}; ,{i,1,uz2}]; 25 el7=Sort[Table[uz4[i],{i,1,uz2}]]; el8=Table[el7[[i]],{i,1,k}]; Return[el8]] grlistM=Table[gruplarM[[2,1,i,1]],{i,1,Length[gruplarM[[2,1]]]}] KNNM[knlist_,new_,k_]:=Block[{uz0,el0,sart,el1,el2,uz1,say,max,yer0,yer1,sinno}, uz0=k; el0=KNM[knlist,new,k]; sart=True; While[sart, el1=Table[el0[[i,2]],{i,1,uz0}]; el2=Union[el1]; uz1=Length[el2]; say=Table[Count[el1,el2[[i]]],{i,1,uz1}]; max=Max[say]; yer0=Position[say,max]; sart=Length[yer0]!=1; uz0=uz0-1]; yer1=yer0[[1,1]]; sinno=el2[[yer1]]; Return[sinno]] 26 KAYNAKLAR [1] Han J., Kamber M., 2001. Data Mining Concepts and Techniques, Morgan Kauffmann Publishers Inc. [2] Berkhin P., 2002. Survey of Clustering Data Mining Techniques, San Jose, California, USA, Accrue Software Inc. [3] Steinhaus, H., 1957. "Sur la division des corps matériels en parties".Bull. Acad. Polon. Sci. 4 (12): 801–804. [4] MacQueen, J. B., 1967. "Some Methods for classification and Analysis of Multivariate Observations". 1. Proceedings of 5th Berkeley Symposium on Mathematical Statistics and Probability. University of California Press. pp. 281–297. [5] Dinçer E., 2006. Veri Madenciliğinde K-means Algoritması ve Tıp Alanında Uygulanması, pp. 1, 55-64. [6] Jain, A.K., 2009. Data clustering: 50 years beyond K-means. Pattern Recognition Lett. [7] Kırmızıgül Çalışkan, S., Soğukpınar, İ. “KxKNN: K-means ve K En Yakın Komşu Yöntemleri ile Ağlarda Nüfuz Tespiti”, 2. Ağ ve Bilgi Güvenliği Sempozyumu, Girne, 16-18 Mayıs 2008. [8] Yıldız, K., Çamurcu, Y., Doğan, B. “Veri Madenciliğinde Temel Bileşenler Analizi ve Negatifsiz Matris Çarpanlarına Ayırma Tekniklerinin Karşılaştırmalı Analizi”, Akademik Bilişim Konferansı, Muğla, 10-12 Şubat 2010. [9] Naldi, M.C, Campello, R.J.G.B, Hruschka, E.R, Carvalho, A.C.P.L.F., 2009. Efficiency issues of evolutionary K-means. Applied Soft Computing. [10] Fırat, E., 2012. Öğrenci Harf Notlarının K-means Kümeleme Algoritması ile Belirlenmesi, p.16. [11] Url-1 <http://www.ist.yildiz.edu.tr/dersler/dersnotu/Kum-Analiz.doc>, alındığı tarih 23.12.2012. [12] Url-2 <http://home.dei.polimi.it/matteucc/Clustering/tutorial_html>, tarih 24.12.2012. alındığı [13] Shouman, M., Turner, T., Stocker, R. “Applying k-Nearest Neighbour in Diagnosing Heart Disease Patients” International Journal of Information and Education Technology, Vol. 2, No. 3, Haziran 2012. [14] Jain, T., 2012. Heart Disease Prediction Tool. Proje Sunumu. [15] Peterson, L.E., 2009. K-nearest neighbor. Scholarpedia, 4(2):1883. [16] Gündüz Öğüdücü, Ş., 2007. Veri Madenciliği Farklı Sınıflandırma Yöntemleri. Proje Sunumu. [17] Gündüz Öğüdücü, Ş., 2008. Veri Madenciliği Temel Sınıflandırma Yöntemleri. Proje Sunumu. [18] Albayrak, S., 2007. Sınıflama ve Kümeleme Yöntemleri. Proje Sunumu. [19] Teknomo, K., 2012. K Nearest Neighbors Tutorial. Online Edition. 27 [20] Abu-Mostafa, Y. S. “Learning From Data”, İTÜ Bilim, Sanat ve Teknoloji Seminerleri, İstanbul, 25 Aralık 2012. 28