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ık | Aktivite |
|---|---|
| 15 °C | Ev |
| 18 °C | Ev |
| 22 °C | Yürüyüş |
| 25 °C | Bisiklet |
| 30 °C | Yü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 → EvKurallar 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üzmeYeni değer:
24 °Colduğ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:
Daha önceki değerlerle arasındaki farkı hesapla.
En küçük farkı bul.
En yakın verinin sonucunu kullan.
Örneğin:
Yeni sıcaklık = 24 °CMevcut sıcaklıklarımız:
15, 18, 22, 25, 30Uzaklıkları hesaplayalım:
| Sıcaklık | 24'e uzaklık |
|---|---|
| 15 | 9 |
| 18 | 6 |
| 22 | 2 |
| 25 | 1 |
| 30 | 6 |
En küçük uzaklık:
1En yakın sıcaklık:
25 °C25 °C'nin aktivitesi:
BisikletDolayı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.
| İndeks | Sıcaklık | Aktivite |
|---|---|---|
| 0 | 18 | Ev |
| 1 | 22 | Yürüyüş |
| 2 | 25 | Bisiklet |
| 3 | 30 | Yüzme |
| 4 | 15 | Ev |
Örneğin:
sicaklik[2]sonucu:
25iken:
aktivite[2]sonucu:
Bisikletolur.
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: 24girildiğinde:
yeni = 24olur.
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:
1olur.
Aynı şekilde:
abs(18 - 24)sonucu:
6olur.
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:
3sonucunu 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 → 9En küçük uzaklık:
1olduğu için:
25seçilir.
Dolayısıyla:
en_yakin = 25olur.
11. index() ile İlişkili Aktiviteyi Bulma
Şimdi elimizde:
en_yakin = 25var.
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ç:
Bisikletolur.
12. Programın Tam Çalışması
Kullanıcı:
24girdiğ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: Bisikletgö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 = 1durumunu gösteriyoruz.
15. K = 3 Olsaydı Ne Olurdu?
Şimdi daha gerçekçi bir KNN örneği düşünelim.
Yeni sıcaklık:
24 °Colsun.
En yakın üç değer:
25 → Bisiklet
22 → Yürüyüş
30 → Yüzmeolsun.
Burada K:
K = 3olur.
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üş → 1olduğ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 → AktiviteAncak gerçek hayatta aktivite önerirken yalnızca sıcaklık yeterli olmayabilir.
Örneğin:
Sıcaklık
Nem
Yağış
Rüzgâr
Saatgibi özellikleri de kullanabiliriz.
Verilerimiz şöyle olabilir:
| Sıcaklık | Nem | Yağış | Aktivite |
|---|---|---|---|
| 18 | 70 | Var | Ev |
| 22 | 55 | Yok | Yürüyüş |
| 25 | 50 | Yok | Bisiklet |
| 30 | 40 | Yok | Yüzme |
| 15 | 80 | Var | Ev |
Artık problem:
Birden fazla özellik
↓
Benzer verileri bul
↓
En yakın komşuları belirle
↓
Aktivite tahmin ethaline 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:
Aktiviteetikettir.
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 |
|---|---|
| Veri | Sıcaklık ve aktiviteler |
| Eğitim verisi | Daha önce bildiğimiz sıcaklıklar |
| Özellik | Sıcaklık |
| Etiket | Aktivite |
| Yeni veri | Kullanıcının girdiği sıcaklık |
| Uzaklık | Sıcaklık farkı |
| Komşu | Benzer sıcaklık |
| Tahmin | Önerilen aktivite |
| Algoritma | En 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 YAPBu 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ı:
18girerse sonuç ne olur?
Soru 2
Kullanıcı:
27girerse 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ğış: 0girildiğ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: Bisiklet23. 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üzmegibi 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ıtve 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-learnkü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 modeliBu 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
Yorum Gönder