Makine Öğrenmesine Geçiş: Basit En Yakın Komşu Örneği

1. Giriş

Yapay zekâ ve makine öğrenmesini öğrenmeye başlayan öğrencilerin karşılaştığı en önemli sorulardan biri şudur:

“Bilgisayar bir veriye bakarak nasıl tahminde bulunabilir?”

Örneğin bir bilgisayara şu bilgileri verdiğimizi düşünelim:

SıcaklıkAktivite
15 °CEv
18 °CEv
22 °CYürüyüş
25 °CBisiklet
30 °CYüzme

Bilgisayar daha sonra:

“24 °C sıcaklıkta hangi aktivite önerilmeli?”

sorusuyla karşılaşırsa ne yapabilir?

24 °C'ye en yakın sıcaklığı bulabilir.

24 °C için:

  • 18 °C → fark 6

  • 22 °C → fark 2

  • 25 °C → fark 1

  • 30 °C → fark 6

  • 15 °C → fark 9

En yakın değer 25 °C olduğuna göre bilgisayar:

Bisiklet

önerisini yapabilir.

Bu basit fikir, makine öğrenmesindeki önemli algoritmalardan biri olan K-En Yakın Komşu (K-Nearest Neighbors – KNN) algoritmasını anlamaya giriş için oldukça güzel bir örnektir.


2. Geleneksel Programlama Nasıl Çalışır?

Öncelikle geleneksel programlama mantığını hatırlayalım.

Geleneksel programlamada genellikle:

VERİ + KURALLAR
      ↓
   PROGRAM
      ↓
    SONUÇ

mantığı vardır.

Örneğin:

sicaklik = 30

if sicaklik >= 30:
    print("Yüzme")
elif sicaklik >= 25:
    print("Bisiklet")
elif sicaklik >= 20:
    print("Yürüyüş")
else:
    print("Ev")

Burada programcı kuralları kendisi yazmıştır.

Bilgisayar yalnızca bizim belirlediğimiz kuralları uygular.

Örneğin:

30 °C → Yüzme
25 °C → Bisiklet
22 °C → Yürüyüş
18 °C → Ev

Kurallar programın içinde açıkça bulunmaktadır.


3. Peki Makine Öğrenmesinde Ne Değişiyor?

Makine öğrenmesinde yaklaşım farklıdır.

Bilgisayara bütün kuralları tek tek yazmak yerine örnekler/veriler verilir.

Basitleştirilmiş olarak:

VERİLER
   ↓
MAKİNE ÖĞRENMESİ ALGORİTMASI
   ↓
MODEL
   ↓
TAHMİN

Örneğin elimizde şu veriler olsun:

15 °C → Ev
18 °C → Ev
22 °C → Yürüyüş
25 °C → Bisiklet
30 °C → Yüzme

Yeni değer:

24 °C

olduğunda sistem daha önceki verilere bakarak bir tahminde bulunabilir.

Buradaki temel fikir:

Benzer veriler genellikle benzer sonuçlara sahiptir.


4. En Yakın Komşu Mantığı

Şimdi çok basit bir yöntem düşünelim.

Yeni bir değer geldiğinde:

  1. Daha önceki değerlerle arasındaki farkı hesapla.

  2. En küçük farkı bul.

  3. En yakın verinin sonucunu kullan.

Örneğin:

Yeni sıcaklık = 24 °C

Mevcut sıcaklıklarımız:

15, 18, 22, 25, 30

Uzaklıkları hesaplayalım:

Sıcaklık24'e uzaklık
159
186
222
251
306

En küçük uzaklık:

1

En yakın sıcaklık:

25 °C

25 °C'nin aktivitesi:

Bisiklet

Dolayısıyla tahminimiz:

24 °C → Bisiklet

olur.


5. Python ile En Yakın Komşu

Şimdi bu mantığı Python ile gerçekleştirelim.

sicaklik = [18, 22, 25, 30, 15]
aktivite = ["Ev", "Yürüyüş", "Bisiklet", "Yüzme", "Ev"]

yeni = int(input("Sıcaklık giriniz: "))

en_yakin = min(sicaklik, key=lambda x: abs(x-yeni))

index = sicaklik.index(en_yakin)

print("Önerilen aktivite:", aktivite[index])

Bu programın amacı:

Kullanıcının girdiği sıcaklığa en yakın sıcaklığı bulmak ve o sıcaklığa karşılık gelen aktiviteyi önermektir.


6. Kodun Adım Adım İncelenmesi

6.1. Eğitim verilerimizi oluşturuyoruz

sicaklik = [18, 22, 25, 30, 15]

Bu listede daha önce bildiğimiz sıcaklık değerleri bulunmaktadır.

İkinci listede ise bu sıcaklıklara karşılık gelen aktiviteler bulunmaktadır:

aktivite = ["Ev", "Yürüyüş", "Bisiklet", "Yüzme", "Ev"]

Listelerin sıraları birbiriyle ilişkilidir.

İndeksSıcaklıkAktivite
018Ev
122Yürüyüş
225Bisiklet
330Yüzme
415Ev

Örneğin:

sicaklik[2]

sonucu:

25

iken:

aktivite[2]

sonucu:

Bisiklet

olur.


7. Kullanıcıdan Yeni Veri Alma

yeni = int(input("Sıcaklık giriniz: "))

Kullanıcıdan yeni bir sıcaklık değeri alınır.

Örneğin:

Sıcaklık giriniz: 24

girildiğinde:

yeni = 24

olur.

Buradaki int() fonksiyonu, kullanıcıdan alınan metni tam sayıya dönüştürür.


8. abs() ile Uzaklık Hesaplama

Kodumuzun önemli bölümlerinden biri:

abs(x-yeni)

ifadesidir.

abs() fonksiyonu mutlak değer alır.

Örneğin:

abs(25 - 24)

sonucu:

1

olur.

Aynı şekilde:

abs(18 - 24)

sonucu:

6

olur.

Bu sayede sıcaklıkların yeni sıcaklığa ne kadar yakın olduğunu hesaplayabiliriz.


9. lambda Fonksiyonu

Şu ifadeye bakalım:

lambda x: abs(x-yeni)

Burada küçük bir anonim fonksiyon oluşturulmuştur.

Bunu daha uzun şekilde şöyle yazabilirdik:

def uzaklik(x):
    return abs(x-yeni)

Sonra:

min(sicaklik, key=uzaklik)

şeklinde kullanabilirdik.

Dolayısıyla:

lambda x: abs(x-yeni)

ifadesini öğrencilerimize şu şekilde açıklayabiliriz:

“Verilen x değerinin yeni sıcaklığa olan uzaklığını hesaplayan küçük bir fonksiyon.”


10. min() ve key Kullanımı

En önemli satır:

en_yakin = min(sicaklik, key=lambda x: abs(x-yeni))

Burada min() fonksiyonu normal kullanımından biraz farklıdır.

Normalde:

sayilar = [10, 5, 20, 3]

print(min(sayilar))

yazarsak:

3

sonucunu alırız.

Ancak bizim istediğimiz:

Yeni sıcaklığa en yakın sıcaklığı bulmak.

Bu nedenle:

key=lambda x: abs(x-yeni)

kullanıyoruz.

Python her sıcaklık için uzaklığı hesaplar:

18 → 6
22 → 2
25 → 1
30 → 6
15 → 9

En küçük uzaklık:

1

olduğu için:

25

seçilir.

Dolayısıyla:

en_yakin = 25

olur.


11. index() ile İlişkili Aktiviteyi Bulma

Şimdi elimizde:

en_yakin = 25

var.

25'in sicaklik listesindeki indeksini buluyoruz:

index = sicaklik.index(en_yakin)

Sonuç:

index = 2

Çünkü:

18 → 0
22 → 1
25 → 2
30 → 3
15 → 4

şeklindedir.

Daha sonra:

aktivite[index]

yazıyoruz.

Yani:

aktivite[2]

Sonuç:

Bisiklet

olur.


12. Programın Tam Çalışması

Kullanıcı:

24

girdiğinde programın arka planda yaptığı işlem yaklaşık olarak şöyledir:

Yeni sıcaklık
     │
     ▼
    24
     │
     ▼
Eski sıcaklıklarla karşılaştır
     │
     ├── 18 → fark 6
     ├── 22 → fark 2
     ├── 25 → fark 1
     ├── 30 → fark 6
     └── 15 → fark 9
     │
     ▼
En küçük fark = 1
     │
     ▼
En yakın sıcaklık = 25
     │
     ▼
25'in indeksi = 2
     │
     ▼
aktivite[2]
     │
     ▼
"Bisiklet"

Ekranda:

Sıcaklık giriniz: 24
Önerilen aktivite: Bisiklet

görülür.


13. Burada Yapay Zekâ Var mı?

Burada dikkat edilmesi gereken önemli bir nokta vardır.

Bu programı doğrudan:

“Bu bir makine öğrenmesi modelidir.”

şeklinde tanımlamak doğru olmaz.

Çünkü burada henüz bir model eğitilmiyor.

Biz sadece basit bir algoritmayla en yakın veriyi buluyoruz.

Ancak bu örnek, KNN algoritmasının temel mantığını anlamak için çok uygun bir köprü oluşturur.

Öğrenci açısından:

Basit Python
     ↓
Uzaklık hesaplama
     ↓
En yakın veriyi bulma
     ↓
KNN mantığı
     ↓
Makine öğrenmesi

şeklinde bir öğrenme yolu oluşturabiliriz.


14. KNN Nedir?

KNN:

K-Nearest Neighbors

ifadesinin kısaltmasıdır.

Türkçesi:

K-En Yakın Komşu

olarak çevrilebilir.

KNN'nin temel düşüncesi:

Yeni bir veri geldiğinde, ona en yakın olan eğitim verilerine bak ve onların bilgilerini kullanarak karar ver.

Buradaki K, kaç komşunun dikkate alınacağını ifade eder.

Bizim örneğimizde yalnızca 1 komşuya bakıyoruz.

Dolayısıyla aslında:

K = 1

durumunu gösteriyoruz.


15. K = 3 Olsaydı Ne Olurdu?

Şimdi daha gerçekçi bir KNN örneği düşünelim.

Yeni sıcaklık:

24 °C

olsun.

En yakın üç değer:

25 → Bisiklet
22 → Yürüyüş
30 → Yüzme

olsun.

Burada K:

K = 3

olur.

KNN sınıflandırmada genellikle en yakın komşuların çoğunluk kararına bakılır.

Örneğin:

25 → Bisiklet
23 → Bisiklet
26 → Yürüyüş

gibi üç komşumuz olsaydı:

Bisiklet → 2
Yürüyüş → 1

olduğu için tahmin:

Bisiklet

olabilirdi.


16. KNN'yi Günlük Hayattan Düşünelim

KNN mantığını günlük hayattan bir örnekle anlayabiliriz.

Yeni bir öğrenci okula geldi.

Öğrencinin:

  • yaşının,

  • çalışma süresinin,

  • sınav puanlarının

başka öğrencilere benzediğini düşünelim.

Yeni öğrencinin hangi başarı grubunda olduğunu tahmin etmek istiyoruz.

Bunun için:

“Bu öğrenciye en çok benzeyen öğrenciler kimler?”

sorusunu sorabiliriz.

Örneğin en yakın 5 öğrenci:

Başarılı
Başarılı
Başarılı
Orta
Başarılı

ise çoğunluk:

Başarılı

olduğu için yeni öğrenciyi başarılı sınıfına dahil edebiliriz.

Bu, KNN'nin temel fikridir.


17. Sıcaklık Örneğimizi Biraz Daha Geliştirelim

Başlangıçta yalnızca sıcaklığı kullandık:

Sıcaklık → Aktivite

Ancak gerçek hayatta aktivite önerirken yalnızca sıcaklık yeterli olmayabilir.

Örneğin:

Sıcaklık
Nem
Yağış
Rüzgâr
Saat

gibi özellikleri de kullanabiliriz.

Verilerimiz şöyle olabilir:

SıcaklıkNemYağışAktivite
1870VarEv
2255YokYürüyüş
2550YokBisiklet
3040YokYüzme
1580VarEv

Artık problem:

Birden fazla özellik
        ↓
Benzer verileri bul
        ↓
En yakın komşuları belirle
        ↓
Aktivite tahmin et

haline gelir.

Bu, makine öğrenmesine çok daha yakın bir yapıdır.


18. Özellik ve Etiket Kavramları

Makine öğrenmesinde önemli iki kavram vardır:

Özellik (Feature)

Tahmin yapmak için kullanılan verilerdir.

Örneğin:

Sıcaklık
Nem
Yağış

birer özellik olabilir.

Etiket (Label)

Tahmin etmek istediğimiz sonuçtur.

Örneğimizde:

Aktivite

etikettir.

Dolayısıyla:

Özellikler                  Etiket
──────────                  ──────
Sıcaklık                     Aktivite
Nem
Yağış

şeklinde düşünebiliriz.


19. Makine Öğrenmesi Terminolojisine Geçiş

Bu küçük örnek bize birçok önemli kavramı öğretmektedir.

KavramÖrneğimizde
VeriSıcaklık ve aktiviteler
Eğitim verisiDaha önce bildiğimiz sıcaklıklar
ÖzellikSıcaklık
EtiketAktivite
Yeni veriKullanıcının girdiği sıcaklık
UzaklıkSıcaklık farkı
KomşuBenzer sıcaklık
TahminÖnerilen aktivite
AlgoritmaEn yakın komşu mantığı

Bu kavramlar daha sonra gerçek makine öğrenmesi uygulamalarında karşımıza çıkacaktır.


20. Öğrencinin Akılda Tutması Gereken Temel Mantık

Bu örnekte öğrencinin öncelikle şu mantığı anlaması yeterlidir:

YENİ VERİ
   ↓
ESKİ VERİLERLE KARŞILAŞTIR
   ↓
UZAKLIKLARI HESAPLA
   ↓
EN YAKIN VERİLERİ BUL
   ↓
ONLARIN SONUÇLARINA BAK
   ↓
TAHMİN YAP

Bu düşünce:

“Benzer olanlar birbirine yakınsa, yeni verinin sonucu da yakın komşularının sonuçlarına benzeyebilir.”

şeklinde özetlenebilir.


21. Mini Uygulama

Öğrencilere aşağıdaki programı verelim:

sicaklik = [10, 15, 20, 25, 30]
aktivite = ["Ev", "Ev", "Yürüyüş", "Bisiklet", "Yüzme"]

yeni = int(input("Sıcaklık: "))

en_yakin = min(
    sicaklik,
    key=lambda x: abs(x - yeni)
)

index = sicaklik.index(en_yakin)

print("En yakın sıcaklık:", en_yakin)
print("Önerilen aktivite:", aktivite[index])

Öğrencilere sorulabilecek sorular

Soru 1

Kullanıcı:

18

girerse sonuç ne olur?

Soru 2

Kullanıcı:

27

girerse hangi aktivite önerilir?

Soru 3

Aşağıdaki satır ne işe yarıyor?

abs(x - yeni)

Soru 4

Aşağıdaki kodun görevi nedir?

sicaklik.index(en_yakin)

Soru 5

lambda yerine normal bir def fonksiyonu kullanabilir misiniz?


22. Öğrenci Görevi

Programı aşağıdaki şekilde geliştirin:

Sıcaklık
Nem
Yağış

bilgilerini kullanıcıdan alacak şekilde bir program tasarlayın.

Örneğin:

Sıcaklık: 24
Nem: 55
Yağış: 0

girildiğinde sistem:

Önerilen aktivite: Bisiklet

şeklinde bir sonuç üretsin.

Bonus Görev

Programın sonunda yalnızca aktiviteyi değil, kullanılan en yakın veriyi de gösterin:

En yakın sıcaklık: 25
Önerilen aktivite: Bisiklet

23. Sınıf İçi Tartışma

Öğrencilere şu soruyu yöneltin:

“Bir bilgisayar yeni bir verinin sonucunu tahmin ederken neden daha önceki benzer verilere bakabilir?”

Ardından şu sorularla tartışmayı derinleştirin:

  • Benzerlik nasıl ölçülebilir?

  • İki veri arasındaki uzaklık nasıl hesaplanabilir?

  • Her zaman en yakın tek veriye bakmak doğru mudur?

  • Neden birden fazla komşuya bakmak daha güvenilir olabilir?

  • K değerini çok küçük veya çok büyük seçersek ne olur?

  • İnsanlar da karar verirken benzer deneyimlerden yararlanıyor olabilir mi?


24. Yapay Zekâ ile Bağlantı

Bu örnek aslında öğrenciyi şu düşünceye hazırlamaktadır:

Yapay zekâ ve makine öğrenmesi sadece karmaşık matematiksel işlemlerden ibaret değildir. Temelinde veriler arasındaki ilişkileri ve benzerlikleri kullanarak karar verme fikri bulunabilir.

Başlangıçta:

18 °C → Ev
22 °C → Yürüyüş
25 °C → Bisiklet
30 °C → Yüzme

gibi küçük bir veri kümesiyle çalışıyoruz.

Daha sonra veri sayısını artırabiliriz:

10.000 kayıt
100.000 kayıt
1.000.000 kayıt

ve daha fazla özellik kullanabiliriz.

Böylece basit bir Python programından gerçek makine öğrenmesi uygulamalarına doğru ilerleyebiliriz.


25. Sonuç

Bu örnekte gerçek bir makine öğrenmesi kütüphanesi kullanmadık.

Örneğin:

scikit-learn

kütüphanesine ihtiyaç duymadık.

Bunun yerine KNN'nin arkasındaki temel fikri sıfırdan ve basit Python kodlarıyla anlamaya çalıştık.

Öğrencinin bu aşamada anlaması gereken en önemli fikir şudur:

Yeni bir veri geldiğinde, daha önceki verilere bakarak ona en çok benzeyen örnekleri bulabilir ve bu örneklerin sonuçlarından yararlanarak tahminde bulunabiliriz.

Bu düşünce bizi:

Python
  ↓
Veri
  ↓
Benzerlik
  ↓
Uzaklık
  ↓
En Yakın Komşu
  ↓
KNN
  ↓
Makine Öğrenmesi
  ↓
Yapay Zekâ

yolculuğuna götürür.


Kısa Özet

KNN – K-En Yakın Komşu

  • Yeni bir veri alır.

  • Eğitim verileriyle karşılaştırır.

  • Veriler arasındaki uzaklığı hesaplar.

  • En yakın komşuları bulur.

  • Komşuların sonuçlarını kullanır.

  • Yeni veri için tahminde bulunur.

Basit örneğimizde:

24 °C
   ↓
18, 22, 25, 30, 15 ile karşılaştır
   ↓
En yakın = 25 °C
   ↓
25 °C'nin aktivitesi = Bisiklet
   ↓
TAHMİN = BİSİKLET

Öğrenme Yol Haritası

Bu örnekten sonra öğrenciler için doğal ilerleme şu şekilde olabilir:

1. Python listeleri
        ↓
2. Uzaklık hesaplama
        ↓
3. Lambda fonksiyonları
        ↓
4. En yakın komşu mantığı
        ↓
5. KNN
        ↓
6. Özellik ve etiket
        ↓
7. Eğitim ve test verisi
        ↓
8. scikit-learn
        ↓
9. Gerçek makine öğrenmesi modeli

Bu nedenle “En Yakın Komşu” örneği, Python ile yapay zekâ arasındaki köprüyü kurmak için oldukça uygun bir başlangıç etkinliğidir.

İsterseniz bunu bir sonraki aşamada “KNN Algoritması: Python ve Scikit-learn ile Gerçek Makine Öğrenmesi Uygulaması” başlıklı ikinci makaleye dönüştürüp, KNeighborsClassifier, eğitim/test verisi, doğruluk (accuracy) ve grafiklerle devam ettirebiliriz.

Yorumlar

Bu blogdaki popüler yayınlar

Pardus Üzerine Django Kurulumu

Mini Lab Uygulamaları (Python Temelleri)

Python ile Web Geliştirme: Django App Oluşturma