regresja liniowa
This commit is contained in:
parent
310009843f
commit
6e63a9949e
@ -90,10 +90,106 @@
|
||||
"Powiedzmy, że na początek przyjrzymy się jednej z informacji - liczbie rozwiązanych ćwiczeń. Załóżmy, że w kursie jest 20 ćwiczeń do rozwiązania a wynik w końcowym teście zaliczeniowym badamy w procentach. Rok temu mieliśmy innych uczniów, którzy też pracowali z tym kursem e-learningowym i mamy informację o ich wynikach:"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"id": "960ec22d-236f-41b8-9f58-295ede47335a",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"![](wyniki.png)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"id": "be26d14d-2356-4e45-b0d0-b1bb6ece9526",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"Zauważmy, że mamy tutaj pewien trend. W przybliżeniu możemy stwierdzić, że im większa liczba rozwiązanych ćwiczeń w kursie tym większy wynik w końcowym teście zaliczeniowym. Zatem moglibyśmy spróbować wyznaczyć funkcję, która pokazywałaby ten trend. Najprościej będzie wyznaczyć zależność liniową, czyli pewną funkcję liniową, która nam przybliży trend. Musimy znaleźć taką funkcję, dla której będziemy mieć sytuację, że dla jak największej liczby argumentów będziemy mieć jak najmniejszą różnicę pomiędzy wartością, którą zwróci funkcja a wartością rzeczywistą, którą mamy na powyższym wykresie."
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"id": "020d9194-8fb5-450d-b642-71701c853c21",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"Zatem naszym zadaniem jest wyznaczenie pewnej funkcji liniowej postaci:\n",
|
||||
"$f(x)=ax+b$, gdzie:\n",
|
||||
"\n",
|
||||
"$x$ - liczba rozwiązanych ćwiczeń w kursie\n",
|
||||
"\n",
|
||||
"$f(x)$ - przybliżony wynik osiągnięty w końcowym teście zaliczeniowym\n",
|
||||
"\n",
|
||||
"$a$ - współczynnik kierunkowy naszej funkcji **regresji liniowej**\n",
|
||||
"\n",
|
||||
"$b$ - wyraz wolny"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"id": "05f37fe3-da73-46f3-b4b3-3cba82dbf546",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"Powstaje pytanie jak wyznaczyć wartości $a$ i $b$. Istnieją algorytmy numeryczne, które pozwalają znaleźć przybliżone wartości. Jednym z nich jest tzw. algorytm gradientu prostego. Natomiast nie będziemy go w tym momencie omawiać.\n",
|
||||
"\n",
|
||||
"Na zajęciach ze statystyki będziecie Państwo (jeśli jeszcze nie mieliście statystyki) uczyć się jak wyznaczać te szukane wartości wg pewnych wzorów i teraz z nich skorzystamy:\n",
|
||||
"\n",
|
||||
"$a=\\frac{\\sum_{i=1}^{n}\\left ( x_{i}-\\overline{x} \\right )\\left ( y_{i}-\\overline{y} \\right )}{\\sum_{i=1}^{n}\\left ( x_{i}-\\overline{x} \\right )^{2}}$\n",
|
||||
"\n",
|
||||
"$b=\\overline{y}-a\\overline{x}$\n",
|
||||
"\n",
|
||||
"gdzie:\n",
|
||||
"\n",
|
||||
"$(x_{i}, y_{i})$ to i-ty punkt na naszym wykresie\n",
|
||||
"\n",
|
||||
"$\\overline{x}$ to średnia arytmetyczna wszystkich argumentów z naszego wykresu (liczby rozwiązanych ćwiczeń)\n",
|
||||
"\n",
|
||||
"$\\overline{y}$ to średnia arytmetyczna wszystkich wartości z naszego wykresu (wyników w teście)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"id": "efdfa37b-292f-45c1-b18a-605b426b495a",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"Co do zasady te wzory będą (lub były) wyjaśniane na zajęciach ze statystyki, natomiast na ten moment powinna wystarczyć nam informacja, że wynikają one z faktu, że szukamy takiej funkcji, dla której różnice między obliczoną a rzeczywistą wartością są jak najmniejsze. Różnice te mogą być ujemne, dlatego bada się kwadraty różnic, żeby nie było sytuacji, że różnice pewnych wartości się wyzerują i przez to znajdziemy błędną funkcję regresji. Taką metodę nazywa się **metodą najmniejszych kwadratów** a same różnice nazywa się **resztami** lub **residuami**."
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"id": "9c2ebd9c-3b53-470a-8f62-1099c128cf15",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"Gdybyśmy dla naszych danych wyznaczyli zgodnie z powyższymi wzorami wartość funkcji regresji liniowej otrzymalibyśmy prostą jak na poniższym wykresie:\n",
|
||||
"\n",
|
||||
"![](wyniki_reglin.png)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"id": "b8f03bcd-8ace-4d2e-8942-678e92dda4e4",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"Można to interpretować następująco:\n",
|
||||
"\n",
|
||||
"- ponieważ wyraz wolny $b$ w przybliżeniu wynosi 10,1 to można powiedzieć, że jeśli uczeń nie rozwiąże ćwiczeń, to jego wynik na teście końcowym wyniesie właśnie ok. 10%;\n",
|
||||
"- ponieważ współczynnik kierunkowy $a$ jest dodatni to oznacza, że wraz ze wzrostem liczby rozwiązanych ćwiczeń będzie rósł wynik na teście końcowym;\n",
|
||||
"- ponieważ współczynnik kierunkowy $a$ wynosi ok. 4,96, oznacza to, że wraz z każdym kolejnym rozwiązanym ćwiczeniem wynik w teście końcowym wzrasta o ok. 4,96%.\n",
|
||||
"\n",
|
||||
"To, czy powyższe wnioski są w naszym problemie sensowne to inna sprawa. Regresja liniowa ma swoje plusy i minusy:\n",
|
||||
"\n",
|
||||
"### Zalety:\n",
|
||||
"- Prostota – dzięki swojej prostocie wykorzystywana jest w wielu dziedzinach: od matematyki, poprzez ekonomię, aż po geodezję,\n",
|
||||
"- interpretowalność – dzięki prostym wzorom bardzo łatwo wyjaśnić biznesowi lub innym osobom, jak dana cecha wpływa na wynik modelu,\n",
|
||||
"- szybkość – nawet przy dużej liczbie danych dla prostych algorytmów wyniki dostajemy prawie od razu.\n",
|
||||
"\n",
|
||||
"### Wady:\n",
|
||||
"- Prostota (wcześniej zaleta ;P) – świat nie składa się z prostych liniowych zależności. Gdyby tak było, to pewnie nie byłoby takiego rozwoju uczenia maszynowego.\n",
|
||||
"\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"id": "de0afb23-6f48-439b-9377-480a0c82fe65",
|
||||
"id": "97144357-f1b7-4cc8-bf81-ff27f3dc4ae9",
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": []
|
||||
|
@ -90,10 +90,106 @@
|
||||
"Powiedzmy, że na początek przyjrzymy się jednej z informacji - liczbie rozwiązanych ćwiczeń. Załóżmy, że w kursie jest 20 ćwiczeń do rozwiązania a wynik w końcowym teście zaliczeniowym badamy w procentach. Rok temu mieliśmy innych uczniów, którzy też pracowali z tym kursem e-learningowym i mamy informację o ich wynikach:"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"id": "960ec22d-236f-41b8-9f58-295ede47335a",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"![](wyniki.png)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"id": "be26d14d-2356-4e45-b0d0-b1bb6ece9526",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"Zauważmy, że mamy tutaj pewien trend. W przybliżeniu możemy stwierdzić, że im większa liczba rozwiązanych ćwiczeń w kursie tym większy wynik w końcowym teście zaliczeniowym. Zatem moglibyśmy spróbować wyznaczyć funkcję, która pokazywałaby ten trend. Najprościej będzie wyznaczyć zależność liniową, czyli pewną funkcję liniową, która nam przybliży trend. Musimy znaleźć taką funkcję, dla której będziemy mieć sytuację, że dla jak największej liczby argumentów będziemy mieć jak najmniejszą różnicę pomiędzy wartością, którą zwróci funkcja a wartością rzeczywistą, którą mamy na powyższym wykresie."
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"id": "020d9194-8fb5-450d-b642-71701c853c21",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"Zatem naszym zadaniem jest wyznaczenie pewnej funkcji liniowej postaci:\n",
|
||||
"$f(x)=ax+b$, gdzie:\n",
|
||||
"\n",
|
||||
"$x$ - liczba rozwiązanych ćwiczeń w kursie\n",
|
||||
"\n",
|
||||
"$f(x)$ - przybliżony wynik osiągnięty w końcowym teście zaliczeniowym\n",
|
||||
"\n",
|
||||
"$a$ - współczynnik kierunkowy naszej funkcji **regresji liniowej**\n",
|
||||
"\n",
|
||||
"$b$ - wyraz wolny"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"id": "05f37fe3-da73-46f3-b4b3-3cba82dbf546",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"Powstaje pytanie jak wyznaczyć wartości $a$ i $b$. Istnieją algorytmy numeryczne, które pozwalają znaleźć przybliżone wartości. Jednym z nich jest tzw. algorytm gradientu prostego. Natomiast nie będziemy go w tym momencie omawiać.\n",
|
||||
"\n",
|
||||
"Na zajęciach ze statystyki będziecie Państwo (jeśli jeszcze nie mieliście statystyki) uczyć się jak wyznaczać te szukane wartości wg pewnych wzorów i teraz z nich skorzystamy:\n",
|
||||
"\n",
|
||||
"$a=\\frac{\\sum_{i=1}^{n}\\left ( x_{i}-\\overline{x} \\right )\\left ( y_{i}-\\overline{y} \\right )}{\\sum_{i=1}^{n}\\left ( x_{i}-\\overline{x} \\right )^{2}}$\n",
|
||||
"\n",
|
||||
"$b=\\overline{y}-a\\overline{x}$\n",
|
||||
"\n",
|
||||
"gdzie:\n",
|
||||
"\n",
|
||||
"$(x_{i}, y_{i})$ to i-ty punkt na naszym wykresie\n",
|
||||
"\n",
|
||||
"$\\overline{x}$ to średnia arytmetyczna wszystkich argumentów z naszego wykresu (liczby rozwiązanych ćwiczeń)\n",
|
||||
"\n",
|
||||
"$\\overline{y}$ to średnia arytmetyczna wszystkich wartości z naszego wykresu (wyników w teście)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"id": "efdfa37b-292f-45c1-b18a-605b426b495a",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"Co do zasady te wzory będą (lub były) wyjaśniane na zajęciach ze statystyki, natomiast na ten moment powinna wystarczyć nam informacja, że wynikają one z faktu, że szukamy takiej funkcji, dla której różnice między obliczoną a rzeczywistą wartością są jak najmniejsze. Różnice te mogą być ujemne, dlatego bada się kwadraty różnic, żeby nie było sytuacji, że różnice pewnych wartości się wyzerują i przez to znajdziemy błędną funkcję regresji. Taką metodę nazywa się **metodą najmniejszych kwadratów** a same różnice nazywa się **resztami** lub **residuami**."
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"id": "9c2ebd9c-3b53-470a-8f62-1099c128cf15",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"Gdybyśmy dla naszych danych wyznaczyli zgodnie z powyższymi wzorami wartość funkcji regresji liniowej otrzymalibyśmy prostą jak na poniższym wykresie:\n",
|
||||
"\n",
|
||||
"![](wyniki_reglin.png)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"id": "b8f03bcd-8ace-4d2e-8942-678e92dda4e4",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"Można to interpretować następująco:\n",
|
||||
"\n",
|
||||
"- ponieważ wyraz wolny $b$ w przybliżeniu wynosi 10,1 to można powiedzieć, że jeśli uczeń nie rozwiąże ćwiczeń, to jego wynik na teście końcowym wyniesie właśnie ok. 10%;\n",
|
||||
"- ponieważ współczynnik kierunkowy $a$ jest dodatni to oznacza, że wraz ze wzrostem liczby rozwiązanych ćwiczeń będzie rósł wynik na teście końcowym;\n",
|
||||
"- ponieważ współczynnik kierunkowy $a$ wynosi ok. 4,96, oznacza to, że wraz z każdym kolejnym rozwiązanym ćwiczeniem wynik w teście końcowym wzrasta o ok. 4,96%.\n",
|
||||
"\n",
|
||||
"To, czy powyższe wnioski są w naszym problemie sensowne to inna sprawa. Regresja liniowa ma swoje plusy i minusy:\n",
|
||||
"\n",
|
||||
"### Zalety:\n",
|
||||
"- Prostota – dzięki swojej prostocie wykorzystywana jest w wielu dziedzinach: od matematyki, poprzez ekonomię, aż po geodezję,\n",
|
||||
"- interpretowalność – dzięki prostym wzorom bardzo łatwo wyjaśnić biznesowi lub innym osobom, jak dana cecha wpływa na wynik modelu,\n",
|
||||
"- szybkość – nawet przy dużej liczbie danych dla prostych algorytmów wyniki dostajemy prawie od razu.\n",
|
||||
"\n",
|
||||
"### Wady:\n",
|
||||
"- Prostota (wcześniej zaleta ;P) – świat nie składa się z prostych liniowych zależności. Gdyby tak było, to pewnie nie byłoby takiego rozwoju uczenia maszynowego.\n",
|
||||
"\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"id": "de0afb23-6f48-439b-9377-480a0c82fe65",
|
||||
"id": "97144357-f1b7-4cc8-bf81-ff27f3dc4ae9",
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": []
|
||||
|
Loading…
Reference in New Issue
Block a user