Akademisyenler öncülüğünde matematik/fizik/bilgisayar bilimleri soru cevap platformu
0 beğenilme 0 beğenilmeme
221 kez görüntülendi
Python'da tek değişkenli doğrusal regresyon nasıl sıfırdan yazılır?
Veri Bilimi kategorisinde (1.8k puan) tarafından  | 221 kez görüntülendi

1 cevap

0 beğenilme 0 beğenilmeme

Tek değişkenli lineer regresyonda aşağıdaki gibi bir veri setini en iyi (hata kareleri toplamı en düşük) açıklayan $$ y = \beta_0 + \beta_1 x$$ doğrunun parametrelerini ($\beta_0$ ve $\beta_1$) hesaplamamız gerekir:

x y
1.2 2.4
2.1 5.5
3 7.9
3.9 10.5
5 14.2

 Yukarıdaki verisetinin satırlarına $(x_i,y_i)$, lineer regresyon modelinin çıktılarına $y_{pred}$ dersek, hata kareleri toplamı $$\sum (y_{pred} - y_i)^2$$ olur. Bu hata fonksiyonunu (loss function) minimize edecek katsayıların analitik çözümünü kullanalım, $x$'in ortalamasına $\bar{x}$ ve $y$'in ortalamasına $\bar{y}$ dersek:  $$\begin{aligned} \beta_1 &= \frac{\sum (x_i - \bar{x}) (y_i - \bar{y})}{\sum (x_i - \bar{x})^2} \\ \beta_0 &= \bar{y} - \beta_1 \bar{x} \end{aligned}$$

Yukarıda $\beta_1$'in payındaki ifade $x$ ve $y$'nin kovaryansı, paydasındaki ifade de $x$'in varyansıdır. Ortalama, varyans ve kovaryans fonksiyonlarını yazarsak bu iş tertemiz hallolur:

 

# Değişkenler birer dizi (array) olarak verilsin
 
# Ortalama
def mean(values):
	return sum(values) / len(values)

# Varyans
def variance(values):
    m = mean(values)
    return sum([(x-m)**2 for x in values])

# Kovaryans (values1 ve values2 dizilerinin uzunluğunu eşit varsayarak)
def covariance(values1, values2):
    m1,m2 = mean(values1), mean(values2)
    return sum([(values1[i] - m1)*(values2[i] - m2) for i in range(len(values1))])
    
# Lineer regresyon katsayıları
def linear_reg_coef(values1,values2):
	b1 = covariance(values1,values2) / variance(values1)
	b0 = mean(values2) - b1 * mean(values1)
	return [b0, b1]

# Örnek

x = [1.2, 2.1, 3, 3.9, 5]
y = [2.4, 5.5, 7.9, 10.5, 14.2]

linear_reg_coef(x,y)

 

(1.8k puan) tarafından 
19,346 soru
21,132 cevap
70,607 yorum
24,399 kullanıcı