NumPy kullanarak k-means algoritmasını sıfırdan yazın. k değerini nasıl seçersiniz ve algoritmanın sınırlamaları nelerdir?

Cevap

K-means, her noktayı en yakın merkeze atayıp merkezleri yeniden hesaplayarak küme içi kareler toplamını (inertia) minimize eden iteratif bir algoritmadır (Lloyd algoritması).

import numpy as np

def kmeans(X, k, n_iter=100, tol=1e-6, seed=0):
    rng = np.random.default_rng(seed)
    # k-means++ başlangıcı: merkezleri birbirinden uzak seç
    centers = [X[rng.integers(len(X))]]
    for _ in range(1, k):
        d2 = np.min(((X[:, None] - np.array(centers)[None]) ** 2).sum(-1), axis=1)
        centers.append(X[rng.choice(len(X), p=d2 / d2.sum())])
    centers = np.array(centers)

    for _ in range(n_iter):
        # 1) Atama: her nokta en yakın merkeze (n, k) mesafe matrisi
        dist = ((X[:, None, :] - centers[None, :, :]) ** 2).sum(-1)
        labels = dist.argmin(axis=1)
        # 2) Güncelleme: merkez = kümenin ortalaması (boş küme varsa eskisi kalır)
        new = np.array([X[labels == j].mean(0) if np.any(labels == j) else centers[j]
                        for j in range(k)])
        if np.linalg.norm(new - centers) < tol:
            break
        centers = new
    inertia = ((X - centers[labels]) ** 2).sum()
    return centers, labels, inertia

Karmaşıklık iterasyon başına O(n·k·d)'dir.

k nasıl seçilir?

  • Elbow yöntemi: Farklı k değerleri için inertia çizilir, azalmanın yavaşladığı "dirsek" noktası seçilir.
  • Silhouette score: -1 ile 1 arası, yüksek değer iyi ayrışmış kümeler demektir.
  • İş gereksinimi: Çoğu zaman pazarlama segment sayısı gibi dış bir kısıt belirleyicidir.

Sınırlamalar

  • Küresel, benzer boyutlu kümeler varsayar. Uzamış veya iç içe kümelerde başarısızdır (DBSCAN, GMM daha uygun).
  • Başlangıca duyarlıdır, local optimum'a takılır. Çözüm: k-means++ ve birden fazla başlatma (n_init).
  • Outlier'lara duyarlıdır, çünkü ortalama kullanır.
  • Özellik ölçeğine duyarlıdır, önce standardization gerekir.
  • Kategorik veride doğrudan çalışmaz (k-modes vb.).
  1. Hiperparametre optimizasyonunu nasıl yaparsınız? Grid search, random search ve Bayesian optimization'ı karşılaştırın.OrtaMakine ÖğrenmesiYapay Zeka
  2. Feature scaling nedir? Standardization ile normalization arasındaki fark nedir ve hangi modeller ölçeklendirme gerektirir?KolayMakine ÖğrenmesiYapay Zeka
  3. PCA (Principal Component Analysis) nasıl çalışır? Ne zaman kullanılır, ne zaman kullanılmamalıdır?OrtaMakine ÖğrenmesiYapay Zeka
  4. XGBoost ve LightGBM klasik gradient boosting'den hangi açılardan farklıdır? En önemli hiperparametreleri nelerdir?ZorMakine ÖğrenmesiYapay Zeka
  5. Random Forest ile Gradient Boosting arasındaki fark nedir? Bagging ve boosting'i karşılaştırın.OrtaMakine ÖğrenmesiYapay Zeka
  6. Lineer regresyon ile lojistik regresyon arasındaki fark nedir? Lojistik regresyonda neden MSE yerine log-loss kullanılır?KolayMakine ÖğrenmesiYapay Zeka

Bu konuda başka bir soru biliyor musun?

Mülakatta karşılaştığın soruları ekle, onaylandıktan sonra yayına alınsın.

Soru ekle