AI & Machine Learning
Makine Öğrenmesi Nedir? Python ile Temel Kavramlar ve İlk Model
Makine öğrenmesi (ML), bilgisayarların açıkça programlanmadan verilerden öğrenmesini sağlayan yapay zeka dalıdır. Günümüzde öneri sistemlerinden otonom araçlara, doğal dil işlemeden tıbbi teşhise kadar pek çok alanda kullanılmaktadır. Bu rehberde makine öğrenmesinin temel kavramlarını, öğrenme türlerini ve Python ile pratik uygulamalarını inceleyeceğiz.
Makine Öğrenmesi Nedir?
Geleneksel yazılım geliştirmede kurallar elle tanımlanır: "Eğer X ise Y yap." Makine öğrenmesinde ise algoritmalar, verilerden kendi kurallarını çıkarır. Yeterli veri ve doğru algoritma ile sistem, daha önce görmediği örnekler üzerinde bile doğru tahminler yapabilir.
Temel İş Akışı
Bir makine öğrenmesi projesinin standart adımları şunlardır:
- Veri Toplama: Ham verinin elde edilmesi
- Veri Ön İşleme: Eksik verilerin doldurulması, normalizasyon, özellik mühendisliği
- Model Seçimi: Probleme uygun algoritmanın belirlenmesi
- Eğitim: Modelin eğitim verisi üzerinde öğrenmesi
- Değerlendirme: Test verisi üzerinde performans ölçümü
- Dağıtım: Modelin üretime alınması
Öğrenme Türleri
Denetimli Öğrenme (Supervised Learning)
Etiketli verilerle çalışır. Model, girdi-çıktı çiftlerinden öğrenir ve yeni girdiler için tahmin üretir.
- Sınıflandırma: E-posta spam/spam değil, hastalık var/yok
- Regresyon: Ev fiyat tahmini, sıcaklık tahmini
Denetimsiz Öğrenme (Unsupervised Learning)
Etiketsiz verilerle çalışır. Model, verideki gizli yapıları ve kalıpları keşfeder.
- Kümeleme: Müşteri segmentasyonu, belge gruplandırma
- Boyut İndirgeme: PCA ile yüksek boyutlu veriyi görselleştirme
Pekiştirmeli Öğrenme (Reinforcement Learning)
Bir ajan, çevresiyle etkileşerek ödül ve ceza mekanizmasıyla öğrenir. Oyun oynama, robot kontrolü ve kaynak optimizasyonu gibi alanlarda kullanılır.
Python ile Makine Öğrenmesi Temelleri
NumPy ile Veri Hazırlama
Makine öğrenmesinin temeli sayısal dizilerdir. NumPy, Python ML ekosisteminin temel taşıdır:
import numpy as np
# Özellik matrisi oluşturma (4 örnek, 3 özellik)
X = np.array([
[5.1, 3.5, 1.4],
[4.9, 3.0, 1.4],
[7.0, 3.2, 4.7],
[6.4, 3.2, 4.5]
])
# Etiket vektörü (0: setosa, 1: versicolor)
y = np.array([0, 0, 1, 1])
# Temel istatistikler
print(f"Ortalama: {X.mean(axis=0)}")
print(f"Standart Sapma: {X.std(axis=0)}")
print(f"Veri Şekli: {X.shape}")Scikit-learn ile Sınıflandırma
Scikit-learn, Python'da makine öğrenmesi için en yaygın kullanılan kütüphanedir. Aşağıda Iris veri seti üzerinde bir sınıflandırma örneği bulunmaktadır:
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score, classification_report
# Veri setini yükleme
iris = load_iris()
X, y = iris.data, iris.target
# Eğitim ve test setlerine ayırma (%80 eğitim, %20 test)
X_egitim, X_test, y_egitim, y_test = train_test_split(
X, y, test_size=0.2, random_state=42
)
# Random Forest sınıflandırıcı oluşturma ve eğitme
model = RandomForestClassifier(n_estimators=100, random_state=42)
model.fit(X_egitim, y_egitim)
# Test seti üzerinde tahmin
tahminler = model.predict(X_test)
# Doğruluk hesaplama
dogruluk = accuracy_score(y_test, tahminler)
print(f"Model Doğruluğu: {dogruluk:.2%}")
# Detaylı sınıflandırma raporu
print(classification_report(y_test, tahminler, target_names=iris.target_names))Veri Ön İşleme Pipeline
Gerçek dünya projelerinde veri nadiren temiz gelir. Scikit-learn Pipeline yapısı ile ön işleme adımlarını zincirleyebilirsiniz:
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.decomposition import PCA
from sklearn.svm import SVC
# Pipeline oluşturma: Normalizasyon -> PCA -> SVM
pipeline = Pipeline([
('olcekleme', StandardScaler()), # Verileri normalize et
('boyut_indirgeme', PCA(n_components=2)), # 2 boyuta indir
('siniflandirici', SVC(kernel='rbf')) # SVM ile sınıfla
])
# Pipeline'ı eğit
pipeline.fit(X_egitim, y_egitim)
# Tek adımda tahmin (ön işleme otomatik uygulanır)
skor = pipeline.score(X_test, y_test)
print(f"Pipeline Doğruluğu: {skor:.2%}")Özellik Mühendisliği
Özellik mühendisliği, ham veriden modelin daha iyi öğrenebileceği yeni değişkenler türetme sürecidir. Doğru özellikler oluşturmak, model performansını algoritmadan bağımsız olarak önemli ölçüde artırabilir. Gerçek dünya projelerinde veri bilimcilerin zamanının büyük bölümü bu aşamada geçer.
Yaygın özellik mühendisliği teknikleri arasında sayısal özelliklerin polinomsal genişletilmesi, kategorik değişkenlerin one-hot encoding ile dönüştürülmesi, tarih sütunlarından gün, ay ve yıl bilgilerinin çıkarılması, ve metin verilerinden TF-IDF ya da kelime sayısı gibi sayısal özellikler üretilmesi yer alır.
from sklearn.preprocessing import PolynomialFeatures, OneHotEncoder
from sklearn.compose import ColumnTransformer
# Sayısal ve kategorik özellikler için ayrı dönüşümler
on_isleme = ColumnTransformer(
transformers=[
('sayisal', Pipeline([
('olcekleme', StandardScaler()),
('polinom', PolynomialFeatures(degree=2, include_bias=False))
]), [0, 1, 2, 3]), # Sayısal sütun indeksleri
],
remainder='passthrough'
)
# Pipeline'a entegre etme
tam_pipeline = Pipeline([
('on_isleme', on_isleme),
('siniflandirici', RandomForestClassifier(n_estimators=100, random_state=42))
])
tam_pipeline.fit(X_egitim, y_egitim)
print(f"Özellik Mühendisliği Sonrası Doğruluk: {tam_pipeline.score(X_test, y_test):.2%}")Çapraz Doğrulama (Cross-Validation)
Tek bir train/test split ile yapılan değerlendirme, verinin nasıl bölündüğüne bağlı olarak yanıltıcı sonuçlar verebilir. Çapraz doğrulama bu sorunu çözer: veri k parçaya bölünür ve her parça sırayla test seti olarak kullanılır. Bu yöntem, modelin genelleme yeteneğini daha güvenilir bir şekilde ölçer.
from sklearn.model_selection import cross_val_score, StratifiedKFold
# 5 katlı stratifiye çapraz doğrulama
cv = StratifiedKFold(n_splits=5, shuffle=True, random_state=42)
# Random Forest ile çapraz doğrulama
rf_skorlar = cross_val_score(
RandomForestClassifier(n_estimators=100, random_state=42),
X, y, cv=cv, scoring='accuracy'
)
print(f"Çapraz Doğrulama Skorları: {rf_skorlar}")
print(f"Ortalama Doğruluk: {rf_skorlar.mean():.2%} (+/- {rf_skorlar.std():.2%})")Stratifiye çapraz doğrulama, her katta sınıf oranlarını koruyarak dengesiz veri setlerinde daha doğru sonuçlar verir. Bu yöntem özellikle küçük veri setlerinde modelin gerçek performansını anlamak için kritiktir.
Model Karşılaştırma
Farklı algoritmalar aynı veri seti üzerinde çok farklı performans gösterebilir. Doğru model seçimi için birden fazla algoritmayı sistematik olarak karşılaştırmak gerekir. Aşağıdaki tabloda yaygın algoritmaların güçlü ve zayıf yönleri özetlenmiştir:
| Algoritma | Avantajlar | Dezavantajlar | En Uygun Kullanım |
|---|---|---|---|
| Random Forest | Overfitting'e dayanıklı, özellik önemi | Yavaş tahmin | Tablo verisi, genel amaçlı |
| SVM | Yüksek boyutta etkili | Büyük veri setlerinde yavaş | Küçük-orta veri, metin sınıflandırma |
| KNN | Basit, eğitim yok | Büyük veride yavaş, ölçekleme gerekli | Küçük veri, prototipleme |
| Gradient Boosting | Yüksek doğruluk | Hiperparametre hassasiyeti | Yarışmalar, tablo verisi |
| Lojistik Regresyon | Yorumlanabilir, hızlı | Doğrusal olmayan ilişkilerde zayıf | İkili sınıflandırma, baseline |
Aşırı Öğrenme ve Yetersiz Öğrenme
Makine öğrenmesinde en kritik denge, modelin karmaşıklığı ile genelleme yeteneği arasında kurulan dengedir.
Aşırı öğrenme (overfitting), model eğitim verisini ezberlediğinde ortaya çıkar. Eğitim doğruluğu çok yüksekken test doğruluğu düşüktür. Bu durum genellikle modelin fazla karmaşık olmasından veya eğitim verisinin yetersiz olmasından kaynaklanır. Çözüm olarak regularizasyon (L1/L2), dropout, daha fazla veri toplama veya model basitleştirme uygulanabilir.
Yetersiz öğrenme (underfitting) ise model hem eğitim hem de test verisinde kötü performans gösterdiğinde meydana gelir. Bu durum, modelin yeterince karmaşık olmadığını veya özellik mühendisliğinin yetersiz kaldığını gösterir. Çözüm olarak daha karmaşık model kullanma, daha fazla özellik ekleme veya eğitim süresini artırma düşünülebilir.
Hiperparametre Optimizasyonu ile GridSearchCV
Her makine öğrenmesi algoritmasının performansını etkileyen hiperparametreleri vardır. Bu parametrelerin en iyi kombinasyonunu bulmak için GridSearchCV, tüm olası kombinasyonları çapraz doğrulama ile dener:
from sklearn.model_selection import GridSearchCV
# Aranacak hiperparametre aralıkları
param_grid = {
'n_estimators': [50, 100, 200],
'max_depth': [3, 5, 10, None],
'min_samples_split': [2, 5, 10],
'min_samples_leaf': [1, 2, 4]
}
# GridSearchCV ile en iyi parametreleri bul
grid_arama = GridSearchCV(
RandomForestClassifier(random_state=42),
param_grid,
cv=5,
scoring='accuracy',
n_jobs=-1, # Tüm CPU çekirdeklerini kullan
verbose=1
)
grid_arama.fit(X_egitim, y_egitim)
print(f"En İyi Parametreler: {grid_arama.best_params_}")
print(f"En İyi Çapraz Doğrulama Skoru: {grid_arama.best_score_:.2%}")
print(f"Test Seti Doğruluğu: {grid_arama.score(X_test, y_test):.2%}")Büyük parametre alanlarında GridSearchCV çok yavaş olabilir. Bu durumda RandomizedSearchCV kullanarak rastgele örnekleme yapabilir veya Bayesian optimizasyon araçlarına (Optuna, Hyperopt) başvurabilirsiniz. Bu araçlar, önceki denemelerin sonuçlarına dayalı olarak parametre alanını daha akıllıca keşfeder.
Model Değerlendirme Metrikleri
Bir modelin başarısını ölçmek için doğruluk (accuracy) tek başına yeterli değildir. Özellikle dengesiz veri setlerinde şu metrikleri kullanmak gerekir:
- Precision (Kesinlik): Pozitif tahminlerin ne kadarı doğru?
- Recall (Duyarlılık): Gerçek pozitiflerin ne kadarı yakalandı?
- F1-Score: Precision ve Recall'un harmonik ortalaması
- Confusion Matrix: Tahmin dağılımının görsel temsili
Sık Yapılan Hatalar
Makine öğrenmesi projelerinde dikkat edilmesi gereken kritik noktalar:
- Aşırı Öğrenme (Overfitting): Model eğitim verisini ezberler, yeni veriye genelleyemez. Çözüm: cross-validation, regularizasyon, daha fazla veri
- Veri Sızıntısı (Data Leakage): Test verisinin eğitim sürecine karışması. Çözüm: train/test split'i ön işlemeden önce yapma
- Özellik Ölçekleme Unutma: SVM ve KNN gibi mesafe tabanlı algoritmalar ölçeklenmiş veri gerektirir
- Dengesiz Veri Setleri: Sınıf dağılımı eşit olmadığında doğruluk yanıltıcı olabilir. Çözüm: SMOTE, class weights
Sonraki Adımlar
Makine öğrenmesi temellerini kavradıktan sonra şu konulara yönelebilirsiniz:
- Derin Öğrenme: Sinir ağları, CNN, RNN, Transformer mimarileri
- MLOps: Model versiyonlama, CI/CD, monitoring
- Özellik Mühendisliği: Domain bilgisiyle güçlü özellikler oluşturma
- AutoML: Otomatik model seçimi ve hiperparametre optimizasyonu
Özet
Makine öğrenmesi, yapay zekanın en güçlü araçlarından biridir. Denetimli, denetimsiz ve pekiştirmeli öğrenme türleriyle farklı problem tiplerini çözebilir. Python ekosistemi — NumPy, Scikit-learn, Pandas — bu alanda hızlı prototipleme ve üretim düzeyinde çözümler geliştirmeyi mümkün kılar. Özellik mühendisliği ile veriyi anlamlandırarak, çapraz doğrulama ile modelin gerçek performansını ölçerek ve GridSearchCV ile hiperparametreleri optimize ederek başarılı ML projeleri geliştirebilirsiniz. Aşırı öğrenme ve yetersiz öğrenme arasındaki dengeyi sağlamak, her makine öğrenmesi mühendisinin ustalaşması gereken temel beceridir.
İlgili Makaleler
CNN ile Derin Öğrenme: Convolutional Neural Network Rehberi
Convolutional Neural Network (CNN) mimarisi ve derin öğrenme. Convolution, pooling, fully connected katmanlar ve görüntü sınıflandırma.
TensorFlow ile Model Eğitimi: Veri Hazırlama, Eğitim ve Değerlendirme
TensorFlow ve Keras ile model eğitimi rehberi. Veri ön işleme, model tasarımı, eğitim döngüsü, hiperparametre ayarı ve model değerlendirme.
Flutter Projeniz mi Var?
iOS, Android ve web için yüksek performanslı Flutter uygulamaları geliştiriyorum.
İletişime Geç