Karşılaştığımız çoğu problemin birden fazla çözüm yolu vardır. Örneğin, bir odanın bir tarafından diğerine geçmek isteseydik, odanın etrafında dolaşarak karşı tarafa varmayı seçebilir ya da doğrudan kestirmeden geçebilirdik.
Normal denklem de bu fikri vurgular. Bir problemi çözmenin bir başka yoludur. Hangi problem mi? Makalenin geri kalanında bunu ele alacağız. Şimdilik bilmeniz gereken, belirli koşullar altında doğrusal regresyonu uygularken size çokça zaman kazandırabilecek etkili bir yaklaşım olduğudur.
Daha derine inelim…
Normal Denklem Nedir?
Normal denklem, en küçük kareler yöntemiyle doğrusal regresyonda maliyet fonksiyonunu en aza indiren θ değerini bulmak için kullanılan kapalı form bir çözümdür. Normal denklemi tanımlamanın bir diğer yolu da kayıp fonksiyonunu en aza indiren katsayıları bulmak için analitik bir yaklaşım olarak görmektir. Her iki tanım da doğrudur; peki tam olarak ne anlama gelirler?
Doğrusal regresyon, girdi özelliklerinin ağırlıklı toplamını bir sapma terimiyle toplayarak y_hat tahmini yapar. Matematiksel olarak şu şekilde gösterilebilir:

Burada θ parametreleri, n ise özellik sayısını temsil eder.
Özünde, yukarıdaki denklemde olan şey θ ile x'in noktasal çarpımının toplanmasıdır. Bu nedenle, bunu daha özlü bir biçimde vektörleştirilmiş formuyla gösterebiliriz:

h(θ) hipotez fonksiyonudur.
Bu yaklaşık hedef fonksiyonu verildiğinde, modelimizi kullanarak tahminler yapabiliriz. Modelimizin iyi öğrenip öğrenmediğini belirlemek için, modelimizin eğitim verisi üzerindeki performansını ölçmemiz önemlidir. Bu amaçla bir kayıp fonksiyonu hesaplarız. Eğitim sürecinin hedefi, kayıp fonksiyonunu en aza indiren theta (θ) değerlerini bulmaktır.
Kayıp fonksiyonumuzu matematiksel olarak şöyle gösterebiliriz:

Yukarıdaki denklemde theta (θ) n + 1 boyutlu bir vektördür ve kayıp fonksiyonu vektör değerinin bir fonksiyonudur. Buna bağlı olarak, kayıp fonksiyonu J'nin kısmi türevi, θ_j'nin her bir parametresi için sırayla alınmalıdır. Hepsinin sıfıra eşit olması gerekir. Bu süreci izleyip θ_0'dan θ_n'ye kadar tüm θ değerlerini çözdüğümüzde, kayıp fonksiyonunu en aza indiren θ değerlerini elde ederiz.
Yukarıda tanımlanan süreci kullanarak θ_0'dan θ_n'ye kadar parametrelerin çözümünü çıkarmak son derece zahmetli bir türetme işlemi gerektirir. Gerçekten daha hızlı bir çözüm vardır.
Normal denklemin formülüne bir göz atın:

Burada:
θ → Kayıp fonksiyonunu en aza indiren parametreler X → Her örnek için girdi özellik değerleri y → Her örnek için çıktı değerlerinden oluşan vektör
Normal Denklem ve Gradyan İnişi
Her iki yöntem de kayıp fonksiyonunu en aza indiren theta (θ) parametrelerini bulmayı amaçlasa da, yaklaşımları birbirinden oldukça farklıdır.
Önceki bölümde normal denklemin nasıl çalıştığını ele aldığımıza göre, kısaca gradyan inişine değinip iki tekniğin nasıl farklılaştığını aktaracağız.
Gradyan İnişi
Gradyan inişi, makine öğreniminde en çok kullanılan algoritmalardan biridir. Kayıp fonksiyonunu en aza indiren theta (θ) parametrelerini yinelemeli olarak bulmak için kullanılır.
Süreç, önce modelin performansının değerlendirilmesiyle başlar. Ardından, mevcut noktadaki eğimi referans almak için kayıp fonksiyonundan kısmi türev hesaplanır. Son olarak, mevcut parametre kümesini güncelleyerek kayıp fonksiyonunun minimumuna iniş yapmak için negatif gradyana orantılı adımlar atarız - aşağıdaki formüle bakınız.

Bu süreç, kayıp fonksiyonunun minimumunda yakınsama sağlanana kadar tekrarlanır.
Nasıl Farklılaşırlar?
Normal denklemin gradyan inişinden farklılaşmasının en bariz yolu analitik olmasıdır. Gradyan inişi yinelemeli bir yaklaşım benimser; yani parametrelerimiz yakınsayana kadar kademeli olarak güncellenir. Buna gömülü bir diğer ince fark da, gradyan inişinin kayıp fonksiyonunun minimumuna doğru atılan adımların büyüklüğünü kontrol eden bir öğrenme oranı tanımlamamızı gerektirmesidir. Normal denklemde öğrenme oranı tanımlamamıza gerek yoktur çünkü yinelemeli adımlar atmayız — sonuçları doğrudan elde ederiz.
Ayrıca, normal denklem yaklaşımını kullandığımızda özellik ölçekleme gerekli değildir; genellikle özelliklerimizin benzer değer aralıklarına sahip olmasını sağlamak için özellik ölçekleme uygularız. Bunun nedeni, gradyan inişinin veri noktalarımızın aralıklarına duyarlı olmasıdır. Gradyan inişi kullanırken özelliklerimizi normalize etmemek, kayıp fonksiyonunun kontur grafiğine çarpıklık katabilir; normal denklemde ise bu sorun ortaya çıkmaz.
Normal Denklemi Ne Zaman Kullanmalı?
Normal denklemi gradyan inişine tercih edip etmemeniz gerektiğini bilmenin en iyi yolu, dezavantajlarını anlamaktır.
Veri kümemizdeki özellik sayısı büyük olduğunda normal denklemi hesaplamak hesaplama açısından zorlayıcı olur. Bunun nedeni, parametreler θ için çözüm bulmak üzere (X’ X)^-1 teriminin hesaplanmasının gerekmesidir. X’ X’in hesaplanması n x n boyutunda bir matris üretir ve çoğu bilgisayar uygulamasında bir matrisi tersine çevirmek, matrisin boyutlarının küpüyle yaklaşık olarak ölçeklenir. Bu da ters alma işleminin O(n^3) zamanda çalıştığı anlamına gelir; n çok büyük olduğunda normal denklemin aşırı yavaş çalışmasına yol açar - zaman karmaşıklığı hakkında daha fazla bilgi edinin.
Dolayısıyla, veri kümesindeki özellik sayısı büyük olduğunda gradyan inişini kullanmak en iyisidir. Önde gelen makine öğrenimi ve yapay zekâ uzmanı Andrew Ng, özellik sayısı n 10.000’den büyük olduğunda gradyan inişini düşünmenizi önerir. 10.000 özellik veya daha azında, öğrenme oranı için bir değer seçmeniz gerekmediği için — yani ayarlamanız gereken bir hiperparametre daha az olduğu için — normal denklem gibi analitik bir yaklaşımı kullanmak daha avantajlı olabilir. Bununla birlikte, R veya Python gibi programlama dillerinin aslında sıradan en küçük kareler doğrusal regresyonunun katsayılarını bulmak için QR ayrışımını kullandığını belirtmeliyiz; çünkü QR ayrışımı normal denkleme kıyasla sayısal olarak daha kararlı ve etkilidir.
Python ile Sıfırdan Normal Denklem
Bu denklemi test etmek için bir regresyon problemi oluşturalım:
import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import make_regression
# Generate a regression problem
X, y = make_regression(
n_samples=100,
n_features=2,
n_informative=2,
noise = 10,
random_state=25
)
# Visualize feature at index 1 vs target
plt.subplots(figsize=(8, 5))
plt.scatter(X[:, 1], y, marker='o')
plt.xlabel("Feature at Index 1")
plt.ylabel("Target")
plt.show()

Normal denklemi burada uygulayacağız:
# adds x0 = 1 to each instance
X_b = np.concatenate([np.ones((len(X), 1)), X], axis=1)
# calculate normal equation
theta_best = np.linalg.inv(X_b.T.dot(X_b)).dot(X_b.T).dot(y)
# best values for theta
intercept, *coef = theta_best
print(f"Intercept: {intercept}\n\
Coefficients: {coef}")
Intercept: 0.35921242677977794
Coefficients: [6.129199175400593, 96.44309685893134]
Modelimizi bir tahmin yaparak test edelim:
# making a new sample
new_sample = np.array([[-2, 0.25]])
# adding a bias term to the instance
new_sample_b = np.concatenate([np.ones((len(new_sample), 1)), new_sample], axis=1)
# predicting the value of our new sample
new_sample_pred = new_sample_b.dot(theta_best)
print(f"Prediction: {new_sample_pred}")
Prediction: [12.21158829]
Bir makine öğrenimi algoritmasını sıfırdan uyguladığınızda, çözümünüzü doğrulamanın bir yöntemine sahip olmak her zaman faydalıdır; Scikit-learn, Python’daki en popüler makine öğrenimi kütüphanelerinden biridir. Doğrusal regresyon da dahil olmak üzere çeşitli algoritmaların uygulamalarını içerir; normal denklemimizi doğrulamak için bunu kullanacağız.
from sklearn.linear_model import LinearRegression
lr = LinearRegression()
lr.fit(X, y)
print(f"Intercept: {lr.intercept_}\n\
Coefficients: {lr.coef_}")
print(f"Prediction: {lr.predict(new_sample)}")
Intercept: 0.3592124267797807
Coefficients: [ 6.12919918 96.44309686]
Prediction: [12.21158829]
Çözümler yaklaşık olarak eşittir; dolayısıyla çözümümüzün doğru olduğunu teyit edebiliriz.
Sıkça Sorulan Sorular (SSS)
Makine öğreniminde normal denklem nedir?
Normal denklem, kayıp fonksiyonunu en aza indiren θ değerini yinelemeye gerek kalmadan bulmak için kullanılan analitik bir yaklaşımdır.
Gradyan inişi yerine ne zaman normal denklemi kullanmalıyım?
Daha az sayıda özelliğimiz olduğunda normal denklemi kullanmak daha iyidir. Veri kümemizdeki özellik sayısı büyük olduğunda normal denklemi hesaplamak hesaplama açısından zorlayıcı hâle gelir.
Normal denklem lojistik regresyon için kullanılabilir mi?
Ne yazık ki hayır. Sınıflandırma kuramında kapalı form çözümü olan tek koşullu model doğrusal regresyondur.
Normal denklem ile gradyan inişi arasındaki fark nedir?
Normal denklem ile gradyan inişi arasındaki bariz fark, normal denklemin kayıp fonksiyonunun minimumunu bulmak için analitik bir yaklaşım kullanması, gradyan inişinin ise yinelemeli bir yaklaşım kullanmasıdır. Bir diğer fark da, parametreler θ tek adımda bulunduğu için normal denklemi hesaplarken bir öğrenme oranı ayarlamak zorunda olmamanızdır.
