Forelesningsnotat – Obligatorisk oppgave

Titanic

Men før det

  • Høyde og lengde på forskjellige dyr
Animal Length Height
21 Lion 2.666931 1.232877
67 Giraffe 2.921538 5.593752
116 Kangaroo 1.659444 1.628955
127 Panda 1.581701 0.769940
80 Zebra 2.298013 1.324601
153 Penguin 0.708544 0.572467
68 Giraffe 3.125970 5.642980
9 Lion 2.495460 1.200218

Plot

Med navn på dyrene

Envariabel lineær regresjon

\[H(L, N) = \beta_0 + \beta_1 L\]

H Høyde
L Lengde
\(\beta_i\) Regresjonskoeffisienter

Hvordan gjøre det bedre?

  • forslag?

Hva med å numerisk kode dyrene?

Animal Length Height Animal_Code
172 Ostrich 2.192051 2.545342 5
77 Giraffe 2.829828 5.335345 1
99 Zebra 2.205381 1.335061 9
127 Panda 1.581701 0.769940 6
93 Zebra 2.122126 1.211665 9
148 Koala 0.636563 0.494086 3
16 Lion 2.609354 1.192141 4
24 Lion 2.668656 1.286879 4
174 Ostrich 2.089288 2.525953 5
42 Tiger 2.835034 1.021963 8

Illustrasjon av datasettet med tallkoder

Lineær regresjon med tallkoder

  • Hvordan gikk egentlig dette? Se nøye etter.

Ligning

\[H(L, N) = \beta_0 + \beta_1 L + \beta_2 N\]

Symbol Beskrivelse
H Høyde
L Lengde
N Numerisk kode for dyret
\(\beta_i\) Regresjonskoeffisienter

Hvordan gjøre det bedre?

  • One-hot-encoding

Med one-hot encoding

Vi kan lage one-hot-kodet data med pandas.get_dummies(...)

Length Height Animal_Code Animal_Elephant Animal_Giraffe Animal_Kangaroo Animal_Koala Animal_Lion Animal_Ostrich Animal_Panda Animal_Penguin Animal_Tiger Animal_Zebra
136 0.753196 0.750071 3 0 0 0 1 0 0 0 0 0 0
95 2.199396 1.423476 9 0 0 0 0 0 0 0 0 0 1
1 2.509806 1.198152 4 0 0 0 0 1 0 0 0 0 0
149 0.730271 0.476178 3 0 0 0 1 0 0 0 0 0 0
54 3.480036 3.100880 0 1 0 0 0 0 0 0 0 0 0
165 0.647924 0.717772 7 0 0 0 0 0 0 0 1 0 0
88 2.459911 1.533689 9 0 0 0 0 0 0 0 0 0 1
154 0.841364 0.607071 7 0 0 0 0 0 0 0 1 0 0
75 2.935860 5.517736 1 0 1 0 0 0 0 0 0 0 0
129 1.695344 0.903539 6 0 0 0 0 0 0 1 0 0 0

Regresjonsmodell med one-hot-coding

Likning

\[H(L, N) = \beta_0 + \beta_1 L + \sum_{\mathrm{i = \{Lion, Tiger, ...\}}}^{k} \beta_i [\text{er dette en }i\mathrm{?}]\]

La oss se på dette i et litt mindre datasett

import pandas as pd
import seaborn as sns
health = sns.load_dataset('healthexp')
display(health.sample(10))
Year Country Spending_USD Life_Expectancy
239 2015 Germany 5295.975 80.7
226 2013 Canada 4428.753 81.7
140 1998 Japan 1571.107 80.6
14 1973 Japan 205.778 73.4
214 2011 Canada 4228.962 81.4
130 1997 Canada 2091.997 78.3
3 1970 Japan 150.437 72.0
213 2010 USA 7879.253 78.6
125 1996 Germany 2480.217 76.9
245 2016 Germany 5669.064 81.0

Her bruker vi seaborn kun for å laste inn et datasett. Seaborn gir oss også noen muligheter til pen visualisering i statistikk, for dem som måtte være interessert i det.

Underveisoppgave

Note

  1. Gjør one-hot encoding av healthexp-datasettet
  2. Gjør trenings-validerings-splitt av datasettet
  3. Tren en lineær regresjonsmodell for å predikere life expectancy, med spending som forklaringsvariabel
  4. Ta med land som forklaringsvariabel i modellen
  5. Sammenligne nøyaktigehten til modellene
import pandas as pd
import seaborn as sns
health = sns.load_dataset('healthexp')
health_onehot = pd.get_dummies(health, columns=['Country'])
display(health_onehot.sample(10))
Year Spending_USD Life_Expectancy Country_Canada Country_France Country_Germany Country_Great Britain Country_Japan Country_USA
153 2000 4536.561 76.7 0 0 0 0 0 1
121 1995 1094.034 76.7 0 0 0 1 0 0
84 1989 1579.543 77.1 1 0 0 0 0 0
262 2019 5189.721 82.2 1 0 0 0 0 0
87 1989 1021.247 78.8 0 0 0 0 1 0
130 1997 2091.997 78.3 1 0 0 0 0 0
233 2014 5151.709 81.2 0 0 1 0 0 0
42 1980 1036.300 73.7 0 0 0 0 0 1
132 1997 2236.595 78.6 0 1 0 0 0 0
113 1994 2188.676 76.5 0 0 1 0 0 0

Start på løsning

Year Country Spending_USD Life_Expectancy
121 1995 Great Britain 1094.034 76.7
232 2014 Canada 4536.810 81.8
78 1987 USA 1976.166 74.9
136 1998 Canada 2200.468 78.6
226 2013 Canada 4428.753 81.7
238 2015 Canada 4635.285 81.9
8 1971 Japan 163.854 72.9
90 1990 Germany 1724.332 77.3
221 2012 Germany 4745.546 80.6
245 2016 Germany 5669.064 81.0

Enkel regresjonsmodell

Mean Squared Error: 7.846016617615249
R^2 Score: 0.3573359515082699

En påfallende “god” modell, hva har skjedd her?

Mean Squared Error: 0.13772868450150377
R^2 Score: 0.9887186991451874

Uten år som forklaringsvariabel

Mean Squared Error: 2.3013732097838697
R^2 Score: 0.8114954509821513