Python ile Yapay Zekâ (Makine Öğrenmesi - Python ile KNN Algoritmasının Kodlanması) #5

LEOHUNTERA

Üye
31 Ara 2018
79
3
Python ile KNN Algoritmasının Kodlanması

Bu konumuz da, Makine Öğrenmesi Algoritmalarından olan KNN Algoritmasının, Python dili ile kodlanması işlemini gerçekleştireceğiz. Eğer KNN Algoritmasının teorik temellerine hâkim değilseniz, buradan KNN Algoritmasının teorik temellerini anlattığımız konuya giderek inceleme yaptıktan sonra kodlama aşamasına dönebilirsiniz.

Makine Öğrenmesi Algoritmalarını gerçekleştirebilmek için daha öncede bahsettiğimiz gibi, bir veri setine ihtiyaç duymaktayız.

Ne Yapacağız?

KNN Algoritmasını kodlama aşamasında, çalışacağımız proje çeşitli belirtilere göre, bir kişinin kalp hastası olup olmadığının belirlenmesine yöneliktir. Daha da açıklayıcı olmak gerekirse, bir kişinin cinsiyeti, yaşı, göğüs bölgesinde ağrı olup olmadığı, kan basıncı gibi verilere bakarak, bu kişinin kalp hastası olup olmadığının belirlenmesidir.

Veri Seti

Kafanızda daha da netleşmesi için Veri setimizin bir kısmı şu şekildedir;

Kod:
[COLOR="Orange"]age, ***, cp, trestbps, chol, fbs, restecg, thalach, exang, oldpeak, slope, ca, thal, [COLOR="Cyan"]target[/COLOR][/COLOR]
63,    1,   3,     145,    233,   1,      0,       150,      0,        2.3,       0,      0,   1,     1
37,    1,   2,     130,    250,   0,      1,       187,      0,        3.5,       0,      0,   2,     1
41,    0,   1,     130,    204,   0,      0,       172,      0,        1.4,       2,      0,   2,     1
56,    1,   1,     120,    236,   0,      1,       178,      0,        0.8,       2,      0,   2,     1
45,    1,   3,     110,    264,   0,      1,       132,      0,        1.2,       1,      0,   3,     0
68,    1,   0,     144,    193,   1,      1,       141,      0,        3.4,       1,      2,   3,     0
57,    1,   0,     130,    131,   0,      1,       115,      1,        1.2,       1,      1,   3,     0
57,    0,   1,     130,    236,   0,      0,       174,      0,        0,          1,      1,   2,     0

Şimdi veri setimizin niteliklerine değinelim;

Veri setimiz içerisinde 14 tane nitelik mevcuttur. Bu niteliklerden 13 tanesi Sistemimize girdi olarak sağlayacağımız verilerdir. Target niteliği ise bu girdilerin analiz edilmesi sonucunda elde edilmesini istediğimiz veridir.

Eğer buraya kadar anlamakta güçlük çekiyorsanız, temel konuları okuduktan sonra, bu konuya dönmelisiniz.

Bu aşamaya kadar her şey yolundaysa hangi niteliğimizin neye karşılık geldiğine göz atalım;
Kod:
[COLOR="Orange"]age: [/COLOR]Yaş
[COLOR="Orange"]***: [/COLOR]Cinsiyet (1 = Erkek, 0 = Kadın)
[COLOR="Orange"]cp: [/COLOR]Göğüs ağrısı tipi (0,1,2,3)
[COLOR="Orange"]trestbps: [/COLOR]Dinlenme kan basıncı (hastaneye girişte mm Hg cinsinden)
[COLOR="Orange"]chol: [/COLOR]Serum kolestoral mg/dl cinsinden
[COLOR="Orange"]fbs: [/COLOR](açlık kan şekeri> 120 mg/dl) (1 = doğru; 0 = yanlış)
[COLOR="Orange"]restecg: [/COLOR]Elektrokardiyografik sonuçların dinlenmesi
[COLOR="Orange"]thalach: [/COLOR]Elde edilen maksimum kalp atış hızı
[COLOR="Orange"]exang: [/COLOR]Egzersize bağlı anjin (1 = evet; 0 = hayır)
[COLOR="Orange"]oldpeak: [/COLOR]Dinlenmeye göre egzersiz ile indüklenen ST depresyonu
[COLOR="Orange"]slope: [/COLOR]Tepe egzersizi ST segmentinin eğimi
[COLOR="Orange"]ca: [/COLOR]Floroskopi ile renklendirilmiş ana damarların (0-3) sayısı
[COLOR="Orange"]thal: [/COLOR]3 = normal; 6 = sabit hata; 7 = tersinir kusur
[COLOR="Cyan"]target: [/COLOR]1 veya 0 (1 = Kalp hastası, 0 = Kalp hastası değil)

Veri setindeki niteliklerin herbirini anlamanıza gerek yok, ben de bazı niteliklerin neye karşılık geldiğini bilmiyorum. En iyisi bu işi Doktorlara bırakmak. Sadece genel olarak bir proje içerisinde veri niteliklerinin nelere karşılık geldiğini anlamaya çalışarak, kafanızda genel bir şema çizin.

Genel olarak veri setimizi ve niteliklerimizi tanıdığımıza ve projemizin nasıl bir proje olacağını kafamızda şekillendirdikten sonra bu bilgilerimizi kullanarak kodlama aşamasına geçelim.

Veri setinin tamamına ve detaylı açıklamalara buradan ulaşabilirsiniz.

Python ile KNN Algoritmasının Kodlanması

Kod:
[font=monospace][color=#408080][i]# Veriyi biçimlendirmek ve bazı belirli hesaplamalar yapabilmek[/i][/color]
[color=#408080][i]# için gerekli kütüphaneler içe aktarılıyor.[/i][/color]
[color=#008000][b]import[/b][/color] [color=#0000FF][b]pandas[/b][/color] [color=#008000][b]as[/b][/color] [color=#0000FF][b]pd[/b][/color]
[color=#008000][b]import[/b][/color] [color=#0000FF][b]numpy[/b][/color] [color=#008000][b]as[/b][/color] [color=#0000FF][b]np[/b][/color]
[color=#008000][b]import[/b][/color] [color=#0000FF][b]math[/b][/color]
[color=#008000][b]import[/b][/color] [color=#0000FF][b]operator[/b][/color]

[color=#408080][i]# Eğitim verileri ve test için ayrılmış verilerin bulunduğu,[/i][/color]
[color=#408080][i]# dosyaların path'leri kullanım kolaylığı olması için değişkene[/i][/color]
[color=#408080][i]# aktarılıyor.[/i][/color]
egitim_dosya [color=#666666]=[/color] [color=#BA2121]'./heart.csv'[/color]
test_dosya [color=#666666]=[/color] [color=#BA2121]'./test.csv'[/color]

[color=#408080][i]# KNN Algoritmasının gerçekleştiği ana fonksiyon[/i][/color]
[color=#408080][i]# egitim_verileri, içerisinde veri nitelikleri ve target değerleri[/i][/color]
[color=#408080][i]# olan eğitim için kullanacağımız verilerdir.[/i][/color]
[color=#408080][i]# test_verileri, egitim verileri içerisinden bir kısmını ayırdığımız[/i][/color]
[color=#408080][i]# verilerdir. Test verilerine ihtiyaç duymamızın sebebi, Algoritmamızın[/i][/color]
[color=#408080][i]# yeni gelen veriler üzerindeki çalışma başarımını ölçmektir.[/i][/color]
[color=#408080][i]# gercek_sonuclar ise test için ayırdığımız test_verileri nin gerçekte sahip[/i][/color]
[color=#408080][i]# olduğu target değerleridir.[/i][/color]


[color=#008000][b]def[/b][/color] [color=#0000FF]knn[/color](k, egitim_verileri, test_verileri, gercek_sonuclar):

    test_sonuclar [color=#666666]=[/color] []  [color=#408080][i]# test için ayırdığımız verilerimizin sonuçlarının[/i][/color]
    [color=#408080][i]# ekleneceği dizi[/i][/color]

    [color=#408080][i]# test_verileri içerisindeki her bir verinin ait olduğu sınıf bulunuyor...[/i][/color]
    [color=#008000][b]for[/b][/color] test_veri [color=#AA22FF][b]in[/b][/color] test_verileri:
        [color=#408080][i]# sonuc_bul fonksiyonuyla, her bir test_verimizin, eğitim verilerimiz[/i][/color]
        [color=#408080][i]# içerisinden en benzer k tanesine göre ait olduğu sınıf bulunuyor.[/i][/color]
        [color=#408080][i]# Sınıftan kasıt (target = 0, target = 1) durumudur. (Kalp hastalığı[/i][/color]
        [color=#408080][i]# yok, Kalp hastalığı var)[/i][/color]
        sonuc [color=#666666]=[/color] sonuc_bul(test_veri, egitim_verileri, k)
        test_sonuclar[color=#666666].[/color]append(sonuc)

    [color=#408080][i]# test verilerimizin Knn Algoritmamızın işlenmesi sonucu elde edilen sonuçlar ile[/i][/color]
    [color=#408080][i]# gerçek sonuçlarının karşılaştırılması[/i][/color]
    basarim [color=#666666]=[/color] basarim_hesapla(test_sonuclar, gercek_sonuclar)

    [color=#008000][b]print[/b][/color](f[color=#BA2121]"Başarım Oranı : {basarim}"[/color])

[color=#408080][i]# Excel dosyamızdan verilerimiz yükleniyor...[/i][/color]


[color=#008000][b]def[/b][/color] [color=#0000FF]veri_yukle[/color](path):
    veriler [color=#666666]=[/color] pd[color=#666666].[/color]read_csv(path)
    [color=#008000][b]return[/b][/color] veriler

[color=#408080][i]# Yüklenen verileri DataFrame formatından dizi formatına çeviriyoruz.[/i][/color]
[color=#408080][i]# Bu fonksiyona gönderilen Heart değeri, target değerinin dahil edilip, edilmeyeceğini[/i][/color]
[color=#408080][i]# belirliyor.[/i][/color]


[color=#008000][b]def[/b][/color] [color=#0000FF]dizi_cevir[/color](DataFrame, Heart):
    dizi [color=#666666]=[/color] []
    [color=#008000][b]if[/b][/color](Heart):
        [color=#008000][b]for[/b][/color] index, satir [color=#AA22FF][b]in[/b][/color] DataFrame[color=#666666].[/color]iterrows():
                [color=#408080][i]# target niteliği dahil ediliyor...[/i][/color]
            dizi_satir [color=#666666]=[/color] [[color=#008000]round[/color](satir[i], [color=#666666]3[/color]) [color=#008000][b]for[/b][/color] i [color=#AA22FF][b]in[/b][/color] [color=#008000]range[/color]([color=#666666]14[/color])]
            dizi[color=#666666].[/color]append(dizi_satir)
    [color=#008000][b]else[/b][/color]:
        [color=#008000][b]for[/b][/color] index, satir [color=#AA22FF][b]in[/b][/color] DataFrame[color=#666666].[/color]iterrows():
                [color=#408080][i]# target niteliği dahil edilmiyor, 13. niteliğe kadar olan[/i][/color]
                [color=#408080][i]# veriler alınıyor.[/i][/color]
            dizi_satir [color=#666666]=[/color] [[color=#008000]round[/color](satir[i], [color=#666666]3[/color]) [color=#008000][b]for[/b][/color] i [color=#AA22FF][b]in[/b][/color] [color=#008000]range[/color]([color=#666666]13[/color])]
            dizi[color=#666666].[/color]append(dizi_satir)
    [color=#008000][b]return[/b][/color] dizi

[color=#408080][i]# Veri setimizde başarım hesabını yapabilmek için test verilerinin[/i][/color]
[color=#408080][i]# gerçekte olan değerleri alınıyor.[/i][/color]


[color=#008000][b]def[/b][/color] [color=#0000FF]gercek_sonuc_yukle[/color](path):
    veriler [color=#666666]=[/color] pd[color=#666666].[/color]read_csv(path)
    [color=#408080][i]# sadece target niteliğinin değerleri alınıyor.[/i][/color]
    direction_veri [color=#666666]=[/color] veriler[[color=#BA2121]'target'[/color]][color=#666666].[/color]values
    [color=#008000][b]return[/b][/color] direction_veri

[color=#408080][i]# Bir test verisinin bütün eğitim verilerine olan uzaklıkları hesaplanıyor...[/i][/color]


[color=#008000][b]def[/b][/color] [color=#0000FF]mesafe_bul[/color](test_veri, egitim_verileri):
    komsu_mesafeler [color=#666666]=[/color] []
    [color=#008000][b]for[/b][/color] egitim_veri [color=#AA22FF][b]in[/b][/color] egitim_verileri:
        [color=#408080][i]# test verisinin her bir eğitim verisine olan öklid mesafesi bulunuyor.[/i][/color]
        mesafe [color=#666666]=[/color] oklid_hesapla(test_veri, egitim_veri)
        komsu_mesafeler[color=#666666].[/color]append((egitim_veri, mesafe))
    [color=#008000][b]return[/b][/color] komsu_mesafeler

[color=#408080][i]# Öklid mesafesi hesaplanıyor...[/i][/color]


[color=#008000][b]def[/b][/color] [color=#0000FF]oklid_hesapla[/color](veri1, veri2):
    uzunluk [color=#666666]=[/color] [color=#008000]len[/color](veri1)
    mesafe [color=#666666]=[/color] [color=#666666]0[/color]
    [color=#008000][b]for[/b][/color] i [color=#AA22FF][b]in[/b][/color] [color=#008000]range[/color](uzunluk):
        mesafe [color=#666666]+=[/color] [color=#008000]pow[/color]((veri1[i] [color=#666666]-[/color] veri2[i]), [color=#666666]2[/color])
    [color=#008000][b]return[/b][/color] math[color=#666666].[/color]sqrt(mesafe)

[color=#408080][i]# En yakın k tane komşu bulunuyor...[/i][/color]
[color=#408080][i]# komsular parametresi, eğitim verilerinin nitelik değerlerini[/i][/color]
[color=#408080][i]# ve test_verisine olan uzaklığı içeriyor.[/i][/color]


[color=#008000][b]def[/b][/color] [color=#0000FF]yakin_komsular_bul[/color](komsular, k):
    yakin_komsular [color=#666666]=[/color] []
    [color=#408080][i]# komsular dizisinin 1. indisinde mesafeler yer aldığı için,[/i][/color]
    [color=#408080][i]# mesafelere göre küçükten büyüğe sıralama yapılıyor.[/i][/color]
    komsular[color=#666666].[/color]sort(key[color=#666666]=[/color]operator[color=#666666].[/color]itemgetter([color=#666666]1[/color]))
    [color=#008000][b]for[/b][/color] x [color=#AA22FF][b]in[/b][/color] [color=#008000]range[/color](k):
        [color=#408080][i]# En yakın k tane komşu alınıyor...[/i][/color]
        yakin_komsular[color=#666666].[/color]append(komsular[x][[color=#666666]0[/color]])
    [color=#008000][b]return[/b][/color] yakin_komsular

[color=#408080][i]# Seçilen en yakın k tane komşunun hangi sınıfa dahil olduğu bulunarak,[/i][/color]
[color=#408080][i]# Bu k tane komşu içerisinde en çok hangi sınıf mevcutsa, test Algoritmamıza[/i][/color]
[color=#408080][i]# göre hesaplanmış sınıfı da o sınıf oluyor.[/i][/color]


[color=#008000][b]def[/b][/color] [color=#0000FF]uygun_sonuc[/color](komsular):
    [color=#008000]dict[/color] [color=#666666]=[/color] {}
    [color=#008000][b]for[/b][/color] komsu [color=#AA22FF][b]in[/b][/color] komsular:
        [color=#408080][i]# en yakın k tane komşu içerisindeki her bir komşunun dahil olduğu[/i][/color]
        [color=#408080][i]# sınıf komsu[-1] ile bulunarak sayılıyor.[/i][/color]
        [color=#008000][b]if[/b][/color](komsu[[color=#666666]-[/color][color=#666666]1[/color]] [color=#AA22FF][b]in[/b][/color] [color=#008000]dict[/color]):
            [color=#008000]dict[/color][komsu[[color=#666666]-[/color][color=#666666]1[/color]]] [color=#666666]+=[/color] [color=#666666]1[/color]
        [color=#008000][b]else[/b][/color]:
            [color=#008000]dict[/color][komsu[[color=#666666]-[/color][color=#666666]1[/color]]] [color=#666666]=[/color] [color=#666666]1[/color]

    [color=#408080][i]# dict sözlüğü, test verimize en yakın k tane veri içerisindeki sınıfların sayısıdır.[/i][/color]
    [color=#408080][i]# Sınıfların sayısına göre, dict tersten(büyükten küçüğe) sıralanıyor.[/i][/color]
    sort [color=#666666]=[/color] [color=#008000]sorted[/color]([color=#008000]dict[/color][color=#666666].[/color]items(), key[color=#666666]=[/color]operator[color=#666666].[/color]itemgetter([color=#666666]1[/color]), reverse[color=#666666]=[/color][color=#008000]True[/color])
    [color=#408080][i]# En yakın k tane veri içerisinde en çok ait olunan sınıf döndürülüyor...[/i][/color]
    [color=#008000][b]return[/b][/color] sort[[color=#666666]0[/color]][[color=#666666]0[/color]]

[color=#408080][i]# Sonuc_bul fonksiyonuyla test_verisinin, eğitim_verilerine göre uzaklıkları hesaplanarak[/i][/color]
[color=#408080][i]# En benzer k tane veriye göre sınıfı bulunuyor.[/i][/color]
[color=#408080][i]# Eğitim verilerinin sonuç değerini de içerdiğini unutmayın.[/i][/color]
[color=#408080][i]# Eğitim verilerinin dahil olduğu sınıflara göre test_verisinin sınıfı[/i][/color]
[color=#408080][i]# belirlenir.[/i][/color]


[color=#008000][b]def[/b][/color] [color=#0000FF]sonuc_bul[/color](test_veri, egitim_verileri, k):
    komsular [color=#666666]=[/color] mesafe_bul(test_veri, egitim_verileri)
    yakin_komsular [color=#666666]=[/color] yakin_komsular_bul(komsular, k)
    sonuc [color=#666666]=[/color] uygun_sonuc(yakin_komsular)
    [color=#008000][b]return[/b][/color] sonuc

[color=#408080][i]# Test verilerimize KNN Algoritmamızın uygulanmasıyla elde edilen sonuçlar ile[/i][/color]
[color=#408080][i]# test verilerimizin gerçek değerleri karşılaştırılarak, Algoritmamızın ne oranda[/i][/color]
[color=#408080][i]# başarılı çalıştığı hesaplanıyor.[/i][/color]


[color=#008000][b]def[/b][/color] [color=#0000FF]basarim_hesapla[/color](test, gercek):
    length [color=#666666]=[/color] [color=#008000]len[/color](test)
    basarim [color=#666666]=[/color] [color=#666666]0[/color]
    [color=#008000][b]for[/b][/color] i [color=#AA22FF][b]in[/b][/color] [color=#008000]range[/color](length):
        [color=#008000][b]if[/b][/color](test[i] [color=#666666]==[/color] gercek[i]):
            basarim [color=#666666]+=[/color] [color=#666666]1[/color]

    basarim [color=#666666]=[/color] (basarim [color=#666666]/[/color] [color=#008000]float[/color](length)) [color=#666666]*[/color] [color=#666666]100.0[/color]

    [color=#008000][b]return[/b][/color] basarim

[color=#408080][i]# MAX-MIN normalleştirme işlemi yapılıyor. Veri hazırlama aşamasında[/i][/color]
[color=#408080][i]# bu normalleştirme türüne değinmiştik.[/i][/color]


[color=#008000][b]def[/b][/color] [color=#0000FF]normalization[/color](veri):
    [color=#008000][b]for[/b][/color] i [color=#AA22FF][b]in[/b][/color] [color=#008000]range[/color]([color=#008000]len[/color](veri[[color=#666666]0[/color]])):
        [color=#008000]max[/color] [color=#666666]=[/color] veri[[color=#666666]0[/color]][i]
        [color=#008000]min[/color] [color=#666666]=[/color] veri[[color=#666666]0[/color]][i]
        [color=#008000][b]for[/b][/color] j [color=#AA22FF][b]in[/b][/color] [color=#008000]range[/color]([color=#008000]len[/color](veri)):
            [color=#008000][b]if[/b][/color](veri[j][i] [color=#666666]>[/color] [color=#008000]max[/color]):
                [color=#008000]max[/color] [color=#666666]=[/color] veri[j][i]
            [color=#008000][b]elif[/b][/color](veri[j][i] [color=#666666]<[/color] [color=#008000]min[/color]):
                [color=#008000]min[/color] [color=#666666]=[/color] veri[j][i]
        [color=#008000][b]for[/b][/color] j [color=#AA22FF][b]in[/b][/color] [color=#008000]range[/color]([color=#008000]len[/color](veri)):
            veri[j][i] [color=#666666]=[/color] (veri[j][i] [color=#666666]-[/color] [color=#008000]min[/color]) [color=#666666]/[/color] ([color=#008000]max[/color] [color=#666666]-[/color] [color=#008000]min[/color])
    [color=#008000][b]return[/b][/color] veri


[color=#008000][b]def[/b][/color] [color=#0000FF]main[/color]():
    [color=#408080][i]# Test verimiz excel dosyasından yükleniyor...[/i][/color]
    test_verileri [color=#666666]=[/color] veri_yukle(test_dosya)
    [color=#408080][i]# DataFrame olarak elde ettiğimiz verilerimizi[/i][/color]
    test_dizi [color=#666666]=[/color] dizi_cevir(test_verileri, Heart[color=#666666]=[/color][color=#008000]False[/color])
    [color=#408080][i]# Kolaylıkla işleyebilmek için dizi formatına çeviriyoruz.[/i][/color]

    [color=#408080][i]# Eğitim verileri, excel dosyasından yükleniyor...[/i][/color]
    egitim_verileri [color=#666666]=[/color] veri_yukle(egitim_dosya)
    [color=#408080][i]# Verileri kolayca işleyebilmek için dizi formatına çeviriyoruz.[/i][/color]
    egitim_dizi [color=#666666]=[/color] dizi_cevir(egitim_verileri, Heart[color=#666666]=[/color][color=#008000]True[/color])

    [color=#408080][i]# Eğitim verimizde tutarlılık ve dengeyi sağlayabilmek için normalization[/i][/color]
    [color=#408080][i]# uyguluyoruz.[/i][/color]
    normalization(egitim_dizi)
    [color=#408080][i]# Test verimizde tutarlılık ve dengeyi sağlayabilmek için normalization[/i][/color]
    [color=#408080][i]# uyguluyoruz.[/i][/color]
    normalization(test_dizi)

    [color=#408080][i]# Başarım hesabını yapabilmek için test verilerinin gerçek sonuç[/i][/color]
    [color=#408080][i]# değerlerini yüklüyoruz.[/i][/color]
    gercek_sonuclar [color=#666666]=[/color] gercek_sonuc_yukle(test_dosya)

    knn([color=#666666]5[/color], egitim_dizi, test_dizi, gercek_sonuclar)
    [color=#408080][i]# eğitim aşamasında kaç tane benzer verinin dikkate alınması gerektiğini[/i][/color]
    [color=#408080][i]# k değeri ile belirtiyoruz. k = 5 seçildi. En yakın 5 veri dikkate alınacak.[/i][/color]
    [color=#408080][i]# Niteliklerine göre hangi sınıfa dahil olduklarını bulacağımız[/i][/color]
    [color=#408080][i]# test_verisi, ve bu verilerin dahil oldukları sınıfları bulmak için benzerlik[/i][/color]
    [color=#408080][i]# hesabında kullandığımız egitim_verisi parametre olarak gönderilmektedir.[/i][/color]
    [color=#408080][i]# Bu değerlerin yanısıra test_verilerinin Algoritmamıza göre başarımının ölçülmesi[/i][/color]
    [color=#408080][i]# için bu verilerin gerçek değerleri gönderilmektedir.[/i][/color]


[color=#008000][b]if[/b][/color] [color=#19177C]__name__[/color] [color=#666666]==[/color] [color=#BA2121]"__main__"[/color]:
    main()
[/font]

Sonuç olarak çıktımız şu şekilde olmaktadır;
Kod:
Başarım Oranı : 100.0

Her zaman, başarım oranı %100 çıkmayabilir, burada dikkat edilmesi gereken ve önemli olan nokta hangi veri seti ile neyin çıkarımının yapıldığıdır. Bazı veri setlerinde %80 lik bir başarı kabul edilebilirken, bazılarında kabul görmeyebilir.

Normalleştirme ile ilgili önemli bir konuda bu örnek için bazı niteliklerin sahip oldukları değerlerin aralarındaki fark ve dolayısıyla uzaklıkları fazla iken bazı verilerin uzaklıkları görece az olmaktadır. Bu istenmeyen bir durumdur. Bunun sebebi, KNN Algoritmamızın uzaklığı fazla olan değerleri daha fazla işin içerisine katarak, daha küçük bir aralığa yayılmış verileri görmezden gelmesine neden olabilir. Bunu engellemek için veriler tutarlı bir hâle getirilerek aralıkların büyüklükleri bütün nitelikler için aynı ölçüde olmalıdır. Burada önemli olan görece (aynı nitelikteki verilerin birbirlerine göre uzaklıkları) uzaklıklardır.

Verileri normalleştirmeden Algoritmamızı uygularsak, buradaki çıktımız şu şekilde olmaktadır;
Kod:
Başarım Oranı : 65.04

Gördüğünüz gibi, normalleştirme başarım oranımıza ciddi oranda etki ediyor. Bu bağlamda veri hazırlama aşamasının, Makine Öğrenmesi Sürecinin en önemli aşaması olduğunu söyleyebiliriz. Bu aşamada yapılabilecek herhangi bir tutarsızlık veya dengesizlik, başarımı doğrudan etkileme potansiyeline sahiptir.
 
Son düzenleme:
Üst

Turkhackteam.org internet sitesi 5651 sayılı kanun’un 2. maddesinin 1. fıkrasının m) bendi ile aynı kanunun 5. maddesi kapsamında "Yer Sağlayıcı" konumundadır. İçerikler ön onay olmaksızın tamamen kullanıcılar tarafından oluşturulmaktadır. Turkhackteam.org; Yer sağlayıcı olarak, kullanıcılar tarafından oluşturulan içeriği ya da hukuka aykırı paylaşımı kontrol etmekle ya da araştırmakla yükümlü değildir. Türkhackteam saldırı timleri Türk sitelerine hiçbir zararlı faaliyette bulunmaz. Türkhackteam üyelerinin yaptığı bireysel hack faaliyetlerinden Türkhackteam sorumlu değildir. Sitelerinize Türkhackteam ismi kullanılarak hack faaliyetinde bulunulursa, site-sunucu erişim loglarından bu faaliyeti gerçekleştiren ip adresini tespit edip diğer kanıtlarla birlikte savcılığa suç duyurusunda bulununuz.