aitech-eks-pub/wyk/08_Regresja_liniowa.ipynb
2021-09-27 07:57:37 +02:00

9.2 KiB

Logo 1

Ekstrakcja informacji

8. Regresja liniowa [wykład]

Filip Graliński (2021)

Logo 2

Regresja liniowa

Regresja liniowa jest prosta...

Ceny mieszkań

... dosłownie — dopasuj prostą $y = ax + b$ do punktów

Należy odgadnąć $a$ i $b$ tak, aby zminimalizować błąd kwadratowy, tj. wartość:

$$\sum_{i=1}^n (y_i - (ax_i + b))^2$$

Regresje liniowa (jednej zmiennej) jest łatwa do rozwiązania — wystarczy podstawić do wzoru!

$$\hat{b} = \frac{ \sum_{i=1}^{n}{x_i y_i} - \frac{1}{n} \sum_{i=1}^n x_i \sum_{j=1}^n y_j}{ \sum_{i=1}^n {x_i^2} - \frac{1}{n} (\sum_{i=1}^n x_i)^2 }$$

$$\hat{a} = \bar{y} - \hat{b},\bar{x}$$

Na przykład dla mieszkań: $b =$ -30809.203 zł, $a =$ 5733.693 zł/m$^2$.

Ceny mieszkań

Regresja wielu zmiennych

W praktyce mamy do czynienia z wielowymiarową regresją liniową.

Cena mieszkań może być prognozowana na podstawie:

  • powierzchni w m$^2$ ($x_1 = 32.3$) $w_1 = 7000$

  • liczby pokoi ($x_2 = 3$) $w_2 = -30000$

  • nr piętra ($x_3 = 4$)

  • wieku ($x_4 = 13$) $w_3 = -1000$

  • odległości od Dworca Centralnego w Warszawie ($x_5 = 371.3$)

  • wielkość miasta

  • gęstość zaludnienia

  • cech zerojedynkowych:

    • czy wielka płyta? ($x_6 = 0$)

    • czy jest jacuzzi? ($x_7 = 1$) $w_7 = 5000$

    • czy jest grzyb? ($x_8 = 0$) $w_8 = -40000$

    • czy to Kielce? ($x_9 = 1$)

    • czy to Kraków ($x_{10} = 0$)

    • czy to Katowice ($x_{11} = 0$)

    • czy obok budynku jest parking

    • czy w budynku jest parking

  • zakodowany opis

    • $(x_{12}, x_{|V|+12})$ - wektor tf-idf

... więc uogólniamy na wiele ($k$) wymiarów:

$$ y = w_0 + w_1x_1 + \ldots + w_kx_k = w_0 + \sum_{j=1}^{k} w_jx_j = w_0 + \vec{w}\vec{x}$$

gdzie:

  • $x_1,\dots,x_k$ -- zmienne, na podstawie których zgadujemy

  • $w_0, w_1,\dots,w_k$ -- wagi modelu (do wymyślenia na podstawie przykładów)

  • $y$ -- odgadywana wartość

Też istnieje wzór ładny wzór na wyliczenie wektora wag!

$$\mathbf{w} = (\mathbf{X}^{\rm T}\mathbf{X})^{-1} \mathbf{X}^{\rm T}\mathbf{y}$$

... niestety odwracanie macierzy nie jest tanie :(

Kilka spostrzeżeń

Regresja liniowa to najprostszy możliwy model:

  • im czegoś więcej na wejściu, tym proporcjonalnie (troszkę) więcej/mniej na wyjściu

  • nic prostszego nie da się wymyślić (funkcja stała??)

  • niestety model liniowy czasami kompletnie nie ma sensu (np. wzrost człowieka w stosunku do wieku)

Uczenie

A jak nauczyć się wag z przykładów?

  • wzór (z odwracaniem macierzy) — problematyczny

Metoda gradientu prostego

Morskie Oko - Krzysztof Dudzik

(Źródło: https://pl.wikipedia.org/wiki/Morskie_Oko#/media/Plik:Morskie_Oko_ze_szlaku_przez_%C5%9Awist%C3%B3wk%C4%99.jpg, licencja CC BY 3.0)

Schodź wzdłuż lokalnego spadku funkcji błędu.

Tak więc w praktyce zamiast podstawiać do wzoru lepiej się uczyć iteracyjnie - metodą gradientu prostego (ang. _gradient descent).

  1. Zacznij od byle jakich wag $w_i$ (np. wylosuj)
  2. Weź losowy przykład uczący $x_1,\dots,x_n$, $y$.
  3. Oblicz wyjście $\hat{y}$ na podstawie $x_1,\dots,x_n$.
  4. Oblicz funkcję błędu między $y$ a $\hat{y}$.
  5. Zmodyfikuj lekko wagi $(w_i)$ w kierunku spadku funkcji błędu.
  6. Jeśli błąd jest duży, idź do 2.

Modyfikacja wag:

$$w_i := w_i - x_i (\hat{y} - y) \eta$$

gdzie $\eta$ to współczynnik uczenia _learning rate.

Ewaluacja regresji

To miary błędu (im mniej, tym lepiej!)}

Błąd bezwzględny (Mean Absolute Error, MAE)

$$\frac{1}{n}\sum_{i=1}^n |\hat{y}_i - y_i| $$

Mean Squared Error (MSE)

$$\frac{1}{n}\sum_{i=1}^n (\hat{y}_i - y_i)^2$$

Root Mean Squared Error (RMSE)

$$\sqrt{\frac{1}{n}\sum_{i=1}^n (\hat{y}_i - y_i)^2}$$

Regresja liniowa dla tekstu

Czym jest wektor $\vec{x} = (x_1,\dots,x_n)$? Wiemy, np. reprezentacja tf-idf (być z trikiem z haszowaniem, Word2vec etc.).

schemat regresji liniowej

Przykład

Wyzwanie RetroC2 - odgadywanie roku dla krótkiego tekstu (1814-2013), https://gonito.net/challenge/retroc2.

Lista słów (obcięta do 7 znaków) z największą/najmniejszymi wagami.

wzbudze -0.08071490
paczka  -0.08000180
szarpi  -0.05906200
spadoch -0.05784140
rzymsko -0.05466660
sosnowy -0.05162170
dębowyc -0.04778910
nawinię -0.04649400
odmówie -0.04522140
zacisko -0.04480620
funkcją -0.04479500
werben  -0.04423350
nieumyś -0.04415200
wodomie -0.04351570
szczote -0.04313390
exekucy -0.04297940
listew  -0.04214090
daley   -0.04145400
metro   -0.04080110
wyjąwsz -0.04078060
salda   -0.04042050
tkach   -0.04020180
cetnar  -0.03999050
zgóry   -0.03855980
belek   -0.03833100
formier -0.03805890
wekslu  -0.03796510
odmową  -0.03753760

odwadni 0.04662140
dozując 0.04672770
wyników 0.04744650
sprawst 0.04746330
jakub   0.04750710
ścieran 0.04791070
wrodzon 0.04799800
koryguj 0.04843560
odnotow 0.04854360
tłumiąc 0.04917320
leasing 0.04963200
ecznej  0.04994810
2013r   0.05009500
kompens 0.05049060
comarch 0.05058620
pojazde 0.05078540
badanyc 0.05340480
kontakc 0.05377990
sygnali 0.05601120
piasta  0.05658670
2000r   0.05716820
stropni 0.06123470
oszone  0.06124600
zamonto 0.06424310
………..   0.06498500
kumulat 0.06596770
faktura 0.07313080
wielost 0.09677770
wielomi 0.12307300