Maximum Likelihood Estimation for Normal Distribution in Python

Giriş

Makine öğrenimi ve istatistik alanlarında, parametre tahminleri önemli bir rol oynamaktadır. Bu bağlamda, Maksimum Olabilirlik Tahmini (Maximum Likelihood Estimation, MLE), bir modelin en olası parametrelerini belirlemek için yaygın olarak kullanılan bir tekniktir. Özellikle normal dağılım gibi yaygın istatistiksel dağılımlar için MLE, oldukça etkilidir. Bu yazıda, normal dağılım için MLE’nin nasıl kullanılacağını adım adım inceleyecek ve Python ile uygulamasını gerçekleştireceğiz.

Maksimum Olabilirlik Tahmini Nedir?

Maksimum Olabilirlik Tahmini, gözlemlenen verilerin altında yatan dağılım parametrelerini tahmin etmek için kullanılan bir yöntemdir. Genel olarak, bir modelin bir dizi veriye en iyi uyum sağlayan parametrelerini bulmayı amaçlar. Bu süreç, gözlemlenen verileri en olası hale getiren parametrelerin belirlenmesi için bir olasılık fonksiyonu oluşturmayı içerir.

Normal dağılım, belirli bir ortalama ve standart sapma ile tanımlanır. MLE kullanarak, bu parametrelerin (ortalama ve standart sapma) en olası değerlerini bulabiliriz. MLE, verilerin logaritmik olasılık fonksiyonunu maksimize etmeyi amaçlar ve genellikle analitik bir çözüm ile elde edilebilir.

MLE yöntemi, farklı dağılımlar için uygulanabilir ancak normal dağılım için sağladığı kolaylık ve doğruluk, onu özellikle popüler kılar. MLE ile elde edilen parametreler, verilerle en iyi uyumu sağladıkları için güçlü bir tahmin aracıdır.

Pythonda Normal Dağılım için MLE Hesaplama

Pythonda, normal dağılım için MLE hesaplamak oldukça basittir. İlk olarak, gerekli kütüphaneleri yüklememiz gerekiyor. Bu kütüphaneler arasında NumPy ve SciPy yer alır. NumPy, sayısal hesaplamalar için, SciPy ise istatistiksel işlemler için gereken araçları sağlar.

import numpy as np
from scipy import stats

Ardından, bir veri kümesi oluşturalım. Bu veri kümesi, normal dağılımın örnekleri olacak ve MLE kullanarak ortalama ve standart sapmayı tahmin edeceğiz.

# Örnek veri kümesi oluşturma
np.random.seed(42)  # Tekrar üretilebilirlik için tohumlama
veri = np.random.normal(loc=5, scale=2, size=1000)

Yukarıdaki kod, ortalaması 5 ve standart sapması 2 olan 1000 örnek veri noktası üretir. Şimdi, bu veri kümesini MLE kullanarak analiz edeceğiz.

# MLE ile ortalama ve standart sapmayı tahmin etme
ortalama_mle = np.mean(veri)
standart_sapma_mle = np.std(veri, ddof=1)  # Bütün veriyi kullan

Bunu çalıştırdığımızda, ortalama ve standart sapmanın MLE değerlerini elde etmiş olacağız. Bu değerler, gözlemlenen verilerle en iyi uyum gösteren parametrelerdir.

MLE’nin Log Olasılık Fonksiyonu ile Hesaplanması

Maksimum Olabilirlik Tahmini hesabı genellikle logaritma ile yapılır. Logaritmik olasılık fonksiyonu, büyük sayıların çarpımını toplamaya dönüştürür, bu da hesaplamaları daha stabil hale getirir. Normal dağılım için, log olasılık fonksiyonu şu şekilde tanımlanabilir:

log_olasılık = -0.5 * n * np.log(2 * np.pi) - n * np.log(standart_sapma) - (1 / (2 * standart_sapma**2)) * np.sum((veri - ortalama)**2)

Bu formül, gözlemlenen veriler için logaritmik olasılığı hesaplar. Burada n, veri kümesinin boyutudur. Bu hesaplamayı bir fonksiyon haline getirebiliriz:

def log_olasılık(ortalama, standart_sapma, veri):
    n = len(veri)
    log_olasılık = -0.5 * n * np.log(2 * np.pi) - n * np.log(standart_sapma) - (1 / (2 * standart_sapma**2)) * np.sum((veri - ortalama)**2)
    return log_olasılık

Bu fonksiyon, belirtilen ortalama ve standart sapma değerleri ile birlikte verileri girdi olarak alır ve log olasılığını döndürür.

Parametreleri Belirlemek için Optimize Etme

MLE için log olasılığını maksimize etmek üzere SciPy’nin optimizasyon fonksiyonlarını kullanabiliriz. Bu işlem, veriler üzerinde en uyumlu parametreleri bulmayı amaçlar. Aşağıda, ortalama ve standart sapma için log olasılık fonksiyonunu maksimize etmek için bir optimizasyon süreci yer alıyor:

from scipy.optimize import minimize

def minimize_log_likelihood(params, veri):
    ortalama, standart_sapma = params
    if standart_sapma <= 0:
        return np.inf  # Standart sapma pozitif olmalı
    return -log_olasılık(ortalama, standart_sapma, veri)

# Başlangıç değerleri
initial_params = [np.mean(veri), np.std(veri)]
result = minimize(minimize_log_likelihood, initial_params, args=(veri,))
ortalama_mle_opt = result.x[0]
standart_sapma_mle_opt = result.x[1]

Yukarıdaki kod, verilen başlanğıç parametreleri ile 'minimize' fonksiyonu aracılığıyla log olasılığı fonksiyonunun en düşük değerlerini bulmak için çalıştırılır. Optimizasyon sonrasında, MLE ile tahmin edilen ortalama ve standart sapmayı elde etmiş olacağız.

Sonuçların Kontrolü ve Görselleştirme

Modelimizin tahmin ettiği ortalama ve standart sapmanın yanı sıra, gerçek veriler ile karşılaştırarak sonuçları kontrol etmek önemlidir. Burada, tahmin edilen değerlerle gerçek değerler arasında nasıl bir uyum olduğunu görmek için bir histogram çizebiliriz.

import matplotlib.pyplot as plt

plt.hist(veri, bins=30, alpha=0.5, label='Gerçek Veri')
plt.axvline(ortalama_mle_opt, color='red', linestyle='dashed', linewidth=2, label='Tahmin Edilen Ortalama')
plt.axvline(ortalama_mle, color='blue', linestyle='dashed', linewidth=2, label='Başlangıç Ortalaması')
plt.title('Veri Dağılımı ve MLE ile Tahmin Edilen Ortalama')
plt.xlabel('Değerler')
plt.ylabel('Frekans')
plt.legend()  
plt.show()

Yukarıdaki kod, veri kümesinin histogramını ve tahmin edilen ortalama değerleri ile görecektir. Kırmızı çizgi, optimizasyon sonucunda elde edilen MLE tahminini; mavi çizgi ise başlangıç parametreleri ile hesaplanan ortalamayı temsil eder.

Neden MLE Kullanmalıyız?

Maksimum Olabilirlik Tahmini, modelleme ve veri analizi süreçlerinde güçlü bir araçtır. Yazılım geliştiricilere ve veri bilimcilere, verinin altında yatan gerçek dağılımı tahmin etme kabiliyeti sağlayarak, daha iyi ve daha doğru modeller geliştirme fırsatı sunar. MLE, karmaşık veri setlerinde bile etkin bir şekilde uygulanabilir.

Bu yöntem, parametrik modelleme için oldukça uygundur ve daha fazla veri elde edildiğinde daha doğru sonuçlar üretecektir. Ayrıca, sonuçların güvenilirliği ve tahmin yapma kabiliyeti, MLE ile geliştirilmiş modellerle artırılabilir. Üstelik, Python’un sunduğu zengin kütüphaneler sayesinde uygulaması oldukça basit hale gelmektedir.

Sonuç olarak, normal dağılım için Maksimum Olabilirlik Tahmini, veri bilimi ve makine öğrenimi alanında önemli bir yere sahiptir. Verilerle bu teknikle çalışarak, karmaşık modeller oluşturmak, tahminlerde bulunmak ve sonuçları değerlendirmek mümkündür. Geliştiricilerin ve analistlerin, MLE’nin güçlü yeteneklerinden faydalanması, veriye dayalı karar verme süreçlerini büyük ölçüde iyileştirecektir.

Scroll to Top