Sıradaki

Doğrusal tahmin

Zorluk: Kolay

doğrusal modeller

Doğrusal bir model, her örnek (sample) için bir tahmin (prediction) üretir. Tahmin üç adımda çıkar:

  1. Örneğin her özniteliğini (feature) bir ağırlıkla (weight) çarp.
  2. Çarpımları topla.
  3. Bir sapma (bias) ekle.

predict(X, w, b) fonksiyonunu yaz. Girdiler şunlardır:

  • X: şekli (shape) (n, d) olan bir dizi (array). Her satırı bir örnektir.
  • w: her feature için bir weight içeren, (d,) shape’inde bir vektör.
  • b: tek bir sayı.

Tüm örneklerin tahminlerini tek seferde hesapla:

y^=Xw+b\hat{\mathbf{y}} = X\mathbf{w} + b

ii. örnek için formül şudur:

y^i=w1xi1+w2xi2+⋯+wdxid+b\hat{y}_i = w_1 x_{i1} + w_2 x_{i2} + \dots + w_d x_{id} + b

XwX\mathbf{w} bir matris çarpımıdır (matrix product) ve her satırı weight’lerle çarpıp toplar. bb de her tahmine eklenir.

Her örnek için bir tahmin içeren, (n,) shape’inde bir NumPy array’i döndür.

Örnekler

Girdi: X = [[1.0, 2.0], [3.0, 4.0], [5.0, 6.0]], w = [0.5, -1.0], b = 2.0
Çıktı: array([ 0.5, -0.5, -1.5])

Girdi: X = [[1.0], [2.0], [3.0]], w = [2.0], b = 1.0
Çıktı: array([3., 5., 7.])

Girdi: X = [[-1.0, 0.5, 2.0], [0.0, -3.0, 1.0]], w = [1.5, -2.0, 0.25], b = -0.5
Çıktı: array([-2.5 , 5.75])

İpucu 1

Önce tek bir örneğin tahminini düşün:

  1. Satırdaki her feature’ı kendi weight’iyle çarp.
  2. Çarpımları topla.
  3. Sonuca b’yi ekle.

XX‘in tüm satırları için bunu tek seferde yapan bir işlem var.

İpucu 2

X ile w’nin matris çarpımı (n,) shape’inde bir array verir: her satır için bir sayı. X (n, d), w (d,) shape’indedir.

İpucu 3

NumPy’da matris çarpımı @ operatörüdür. X @ w, her örnek için feature’ları weight’lerle çarpıp toplar.

Geriye bias’ı eklemek kalır. b tek bir sayı olduğundan her tahmine eklenir.

Gereksinimler

  • X her satırı bir örnek olan (n, d) shape’inde bir array’dir. w (d,) shape’inde bir weight vektörüdür. b bir float’tır.
  • Dönüş değeri (n,) shape’inde bir NumPy array’i: her örnek için bir tahmin. (n, 1) shape’inde bir sütun değil.
  • Tek örnekte de (n = 1) (1,) shape’inde bir array döndür; tek bir sayı değil.
  • X’i ve w’yi değiştirme. Fonksiyon bittiğinde çağıran kodun array’leri aynı kalır.
  • Örnekler üzerinde döngü kullanma: tek bir matris çarpımı yeter.

Doğrusal bir model her feature’ı kendi weight’iyle çarpar, çarpımları toplar ve bias’ı ekler. İki feature’lı bir örnekte x=(2,3)\mathbf{x} = (2, 3), w=(4,−1)\mathbf{w} = (4, -1) ve b=5b = 5 olsun. Tahmin şudur:

4⋅2+(−1)⋅3+5=104 \cdot 2 + (-1) \cdot 3 + 5 = 10

Weight’leri ve bias’ı şöyle okursun:

  • Weight pozitifse, o feature arttıkça tahmin artar.
  • Weight negatifse, o feature arttıkça tahmin azalır.
  • Bias, bütün feature’lar sıfır olduğunda modelin verdiği tahmindir.

Bunu her örnek için ayrı ayrı yazmak yerine tek bir matris çarpımı kullanabilirsin. XX‘in her satırı bir örnektir. (n, d) shape’indeki XX ile (d,) shape’indeki w\mathbf{w} çarpılınca (n,) shape’inde, örnek başına bir tahmin çıkar.

Bias tek bir sayıdır ve her tahmine eklenir. Doğrusal bir model yalnızca düz, yani doğrusal ilişkileri yakalayabilir. Gerçek veriler çoğu zaman bundan karmaşıktır.

Daha fazlası için Model, parametre, kayıp dersine bak.

X @ w, her örnek için tek seferde bir sayı verir. Her satırı weight’lerle çarpıp toplar. Bias da bu sayılara eklenir:

import numpy as npdef predict(X: np.ndarray, w: np.ndarray, b: float) -> np.ndarray:    return X @ w + b

Sık yapılan iki hata var:

  • @ yerine * yazmak. * eleman bazında (element-wise) çarpar ve toplamaz. Bu yüzden (n, d) shape’inde bir array verir; her örnek için tek bir tahmin çıkmaz.
  • w’yi (d, 1) shape’ine getirip (n, 1) shape’inde bir sütun döndürmek. Testler (n,) bekler.

Bu problemde bir sorun mu var?

solution.py
import numpy as npdef predict(X: np.ndarray, w: np.ndarray, b: float) -> np.ndarray:    """Her örnek için bir tahmin içeren, şekli (n,) olan bir dizi döndürür."""    # Kodunu buraya yaz.    return np.zeros(X.shape[0])

İçindekiler

Geri bildirim

Tür