Günümüzde makine öğrenimi (ML) denildiğinde akla gelen ilk şeyler genellikle scikit-learn, TensorFlow veya PyTorch gibi devasa kütüphaneler oluyor. Bu araçlar inanılmaz derecede güçlü ve verimli; ancak çoğu zaman bu kütüphanelerin “arka planında” neler olup bittiği, bir fonksiyon çağrısının altında yatan matematiksel gerçekler siyah bir kutu (black box) olarak kalıyor.
Peki, bu kütüphanelerin hiçbiri olmadan, sadece Python’un standart kütüphanesini kullanarak bir yapay sinir ağı veya bir Rastgele Orman (Random Forest) modeli kurabilir miyiz?
Cevap: Evet.
Bu yazıda, NumPy veya scikit-learn gibi harici hiçbir bağımlılık olmadan, tamamen “Saf Python” (Pure Python) ile sıfırdan implemente edilen 17 klasik makine öğrenimi algoritmasını inceleyeceğiz.
Neden Sıfırdan Implementasyon?
Sadece bir API’yi çağırmakla, o algoritmanın nasıl çalıştığını kodlamak arasında uçurum vardır. Bu projenin temel amacı, bir geliştiricinin veya veri bilimcinin şu yetkinlikleri kazanmasını sağlamaktır:
- Matematiksel Sezgi: Ortalama Kare Hata (MSE) nasıl minimize edilir? Sigmoid fonksiyonu olasılıkları nasıl dönüştürür?
- Optimizasyon Mantığı: Gradyan İnişi (Gradient Descent) nasıl çalışır ve ağırlıklar her adımda nasıl güncellenir?
- Veri Yapıları ve Algoritmalar: Bir karar ağacı bellekte nasıl saklanır? Matris çarpımları listelerle nasıl optimize edilir?
Projenin Kapsamı: Hangi Algoritmalar Var?
Proje, makine öğreniminin temel taşlarını kapsayan geniş bir yelpazeye sahip. Algoritmaları şu şekilde kategorize edebiliriz:
1. Regresyon ve Temel Tahminleme
- Doğrusal Regresyon (Linear Regression): Gradyan inişi ile en uygun doğruyu bulma.
- Gradyan Artırımlı Regresör (Gradient Boosting): Hataları düzeltmek için ardışık ağaçlar kurma.
2. Sınıflandırma (Classification)
- Lojistik Regresyon (Logistic Regression): İkili sınıflandırmanın temel taşı.
- K-En Yakın Komşu (KNN): Mesafe tabanlı, “tembel” öğrenme yaklaşımı.
- Karar Ağaçları (Decision Trees): Gini saflığı ile veriyi özyinelemeli olarak bölme.
- Gauss Naif Bayes (Naive Bayes): Olasılık temelli hızlı sınıflandırma.
- Yapay Sinir Ağları (Neural Networks): Backpropagation (Geri Yayılım) ile eğitilen gizli katmanlı yapı.
- Rastgele Orman (Random Forest): Bootstrapping ve özellik örnekleme ile ağaç topluluğu.
- Destek Vektör Makineleri (SVM): Maksimum marj ile sınıfları ayırma.
- XGBoost: İkinci dereceden Taylor yaklaşımı ile optimize edilmiş yüksek performanslı boosting.
3. Kümeleme ve Boyut İndirgeme (Unsupervised Learning)
- K-Ortalamalar (K-Means): Merkezcil tabanlı otomatik gruplandırma.
- DBSCAN: Yoğunluk tabanlı kümeleme (gürültüleri tespit edebilen).
- Temel Bileşen Analizi (PCA): Varyansı maksimize ederek boyutu düşürme.
- Lineer Diskriminant Analizi (LDA): Sınıf ayrımını maksimize eden projeksiyonlar.
- t-SNE: Yüksek boyutlu veriyi görselleştirmek için yerel yapıları koruyan non-lineer indirgeme.
4. İleri Seviye ve Sıralı Modeller
- Gizli Markov Modelleri (HMM): Gizli durum geçişleri olan zaman serileri ve sıralı verilerin modellenmesi.
- Topluluk Yöntemleri (Ensemble): Voting ve Stacking ile farklı modellerin gücünü birleştirme.
Teknik Detaylar ve Mimari Yaklaşımlar
Saf Python ile çalışırken karşılaşılan performans ve karmaşıklık sorunlarını aşmak için projede bazı kritik tasarım desenleri uygulanmıştır:
- Düz Düğüm Dizileri: Karar ağaçlarında her düğüm için ayrı bir nesne oluşturmak yerine, özellikler ve eşikler paralel listelerde tutularak bellek yönetimi optimize edilmiştir.
- Log-Uzay Hesaplamaları: Olasılıkların çarpımı sırasında meydana gelen “underflow” (sayısal sıfırlanma) problemini önlemek için tüm olasılık hesaplamaları logaritmik uzayda yürütülmüştür.
- Power Iteration: Tam bir özdeğer çözücü yazmak yerine, PCA ve LDA gibi algoritmalarda baskın özvektörü bulmak için hızlı ve etkili olan “Power Iteration” yöntemi kullanılmıştır.
- Normalizasyon Sözleşmesi: Gradyan tabanlı modellerin yakınsamasını hızlandırmak için veriler [0, 1] aralığına normalize edilip işlem sonrası tekrar eski haline (denormalize) getirilmektedir.
Nasıl Çalıştırılır?
Proje tamamen bağımsız dosyalardan oluşur. Herhangi bir kütüphane kurmanıza gerek yoktur. Sadece Python’un yüklü olması yeterlidir.
Tüm algoritmaları sırayla çalıştırmak ve sonuçlarını görmek için şu basit bash komutunu kullanabilirsiniz:
for f in *.py; do
echo "=== Running $f ==="
python "$f"
echo
done
Sonuç
Makine öğrenimini sadece kullanmak değil, onu inşa etmek, algoritmanın ruhunu anlamanın tek yoludur. Bu proje, karmaşık görünen modellerin aslında temel matematiksel prensipler üzerine kurulu olduğunu kanıtlıyor. Kendi modelinizi sıfırdan yazmak, size sadece kodlama yeteneği değil, aynı zamanda problem çözme derinliği de kazandırır.
Ahmet Aksoy
Not: Bu yazıda incelediğimiz kodu ve benzer projelerin kaynak kodlarını https://github.com/ahmetax/practical-python-examples adresinde bulabilirsiniz.
Python, Makine Öğrenimi, Veri Bilimi, Algoritmalar, Yazılım Geliştirme, Yapay Zeka, Pure Python