CodeBlanks Logo Icon CodeBlanks

Meydan okuma 1

ML temellerini birleştirerek veri analizi yaparsın.

Meydan okuma 1: elle doğrusal regresyon

Bu meydan okumada scikit-learn kullanmadan tek değişkenli doğrusal regresyonu NumPy ile çözeceksin. En küçük kareler çözümü kapalı biçimdedir:

w = ((x - x.mean()) * (y - y.mean())).sum() / ((x - x.mean()) ** 2).sum()
b = y.mean() - w * x.mean()

Eğim, x ile y'nin birlikte değişiminin x'in kendi değişimine oranıdır; kesişim doğruyu ortalamalar noktasından geçirir.

Uygulama Kendi regresyonun

w ve b'yi formülle hesapla, round(..., 3) ile aynı satırda yazdır. Ardından sonucu LinearRegression ile doğrula: np.isclose(w, m.coef_[0]) değerini yazdır.

Başlangıç kodu

model.py
import numpy as np
from sklearn.linear_model import LinearRegression

x = np.array([1.0, 2.0, 3.0, 4.0, 5.0, 6.0])
y = np.array([2.9, 5.1, 7.0, 8.8, 11.2, 13.1])

# buraya yaz

Örnek çözüm

model.py
import numpy as np
from sklearn.linear_model import LinearRegression

x = np.array([1.0, 2.0, 3.0, 4.0, 5.0, 6.0])
y = np.array([2.9, 5.1, 7.0, 8.8, 11.2, 13.1])

w = ((x - x.mean()) * (y - y.mean())).sum() / ((x - x.mean()) ** 2).sum()
b = y.mean() - w * x.mean()
print(round(w, 3), round(b, 3))
m = LinearRegression().fit(x.reshape(-1, 1), y)
print(np.isclose(w, m.coef_[0]))

Beklenen çıktı

2.031 0.907
True

Uygulama R²'yi elle hesapla

Bulduğun doğruyla tahminleri hesapla. R² = 1 - SS_res / SS_tot formülüyle (SS_res = Σ(y - ŷ)², SS_tot = Σ(y - ȳ)²) R²'yi round(..., 4) ile yazdır.

Başlangıç kodu

model.py
import numpy as np

x = np.array([1.0, 2.0, 3.0, 4.0, 5.0, 6.0])
y = np.array([2.9, 5.1, 7.0, 8.8, 11.2, 13.1])
w = ((x - x.mean()) * (y - y.mean())).sum() / ((x - x.mean()) ** 2).sum()
b = y.mean() - w * x.mean()

# buraya yaz

Örnek çözüm

model.py
import numpy as np

x = np.array([1.0, 2.0, 3.0, 4.0, 5.0, 6.0])
y = np.array([2.9, 5.1, 7.0, 8.8, 11.2, 13.1])
w = ((x - x.mean()) * (y - y.mean())).sum() / ((x - x.mean()) ** 2).sum()
b = y.mean() - w * x.mean()

p = w * x + b
ss_res = ((y - p) ** 2).sum()
ss_tot = ((y - y.mean()) ** 2).sum()
print(round(1 - ss_res / ss_tot, 4))

Beklenen çıktı

0.9987

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 Bu formülle bulunan doğru her zaman hangi noktadan geçer?

  • (x en büyüğü, y en büyüğü)
  • (x ortalaması, y ortalaması) Doğru cevap
  • (0, 0)
  • İlk veri noktası

Açıklama: b = ȳ - w·x̄ olduğundan x = x̄ için tahmin ȳ'dir.

2 Kesişimi hesapla.

Soru
b = y.mean() - w * ____
Cevap
b = y.mean() - w * x.mean()

Açıklama: Kesişim, ortalamalar noktasından geçme koşulundan gelir.

3 Parçaları eşleştir.

Kavram Anlamı
x - x.mean() Merkezlenmiş x
pay Birlikte değişim
payda x'in değişimi
b Kesişim

Başlangıç bölümündeki tüm dersler