1
0
Fork 0

[W05] 'trenowanie' -> 'uczenie', nowa ilustracja walidacji krzyżowej

This commit is contained in:
Paweł Skórzewski 2023-03-30 08:04:48 +02:00
parent 983ce942b1
commit c9ba503473
2 changed files with 42 additions and 41 deletions

View File

@ -53,10 +53,10 @@
}
},
"source": [
"* Na zbiorze uczącym (treningowym) uczymy algorytmy, a na zbiorze testowym sprawdzamy ich poprawność.\n",
"* Na zbiorze uczącym uczymy algorytmy, a na zbiorze testowym sprawdzamy ich poprawność.\n",
"* Zbiór uczący powinien być kilkukrotnie większy od testowego (np. 4:1, 9:1 itp.).\n",
"* Zbiór testowy często jest nieznany.\n",
"* Należy unikać mieszania danych testowych i treningowych nie wolno „zanieczyszczać” danych treningowych danymi testowymi!"
"* Należy unikać mieszania danych testowych i uczących nie wolno „zanieczyszczać” danych uczących danymi testowymi!"
]
},
{
@ -89,7 +89,7 @@
}
},
"source": [
"Do doboru parametrów najlepiej użyć jeszcze innego zbioru jest to tzw. **zbiór walidacyjny**"
"Do doboru parametrów najlepiej użyć jeszcze innego zbioru jest to tzw. **zbiór walidacyjny**."
]
},
{
@ -107,7 +107,7 @@
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
"slide_type": "subslide"
}
},
"source": [
@ -144,8 +144,7 @@
}
},
"source": [
"<img width=\"100%\" src=\"https://chrisjmccormick.files.wordpress.com/2013/07/10_fold_cv.png\"/>\n",
"Żródło: https://chrisjmccormick.wordpress.com/2013/07/31/k-fold-cross-validation-with-matlab-code/"
"<img src=\"cv.png\" alt=\"Rys. 5.1. Walidacja krzyżowa\" style=\"width: 70%\"/>"
]
},
{
@ -160,7 +159,7 @@
"\n",
"* Podziel dane $D = \\left\\{ (x^{(1)}, y^{(1)}), \\ldots, (x^{(m)}, y^{(m)})\\right\\} $ na $N$ rozłącznych zbiorów $T_1,\\ldots,T_N$\n",
"* Dla $i=1,\\ldots,N$, wykonaj:\n",
" * Użyj $T_i$ do walidacji i zbiór $S_i$ do trenowania, gdzie $S_i = D \\smallsetminus T_i$. \n",
" * Użyj $T_i$ do walidacji i zbiór $S_i$ do uczenia, gdzie $S_i = D \\smallsetminus T_i$. \n",
" * Zapisz model $\\theta_i$.\n",
"* Akumuluj wyniki dla modeli $\\theta_i$ dla zbiorów $T_i$.\n",
"* Ustalaj parametry uczenia na akumulowanych wynikach."
@ -179,7 +178,7 @@
"* Zazwyczaj ustala się $N$ w przedziale od $4$ do $10$, tzw. $N$-krotna walidacja krzyżowa (*$N$-fold cross validation*). \n",
"* Zbiór $D$ warto zrandomizować przed podziałem.\n",
"* W jaki sposób akumulować wyniki dla wszystkich zbiórow $T_i$?\n",
"* Po ustaleniu parametrów dla każdego $T_i$, trenujemy model na całych danych treningowych z ustalonymi parametrami.\n",
"* Po ustaleniu parametrów dla każdego $T_i$, uczymy model na całych danych uczących z ustalonymi parametrami.\n",
"* Testujemy na zbiorze testowym (jeśli nim dysponujemy)."
]
},
@ -233,7 +232,7 @@
"### Zbiór walidujący a algorytmy optymalizacji\n",
"\n",
"* Gdy błąd rośnie na zbiorze uczącym, mamy źle dobrany parametr $\\alpha$. Należy go wtedy zmniejszyć.\n",
"* Gdy błąd zmniejsza się na zbiorze trenującym, ale rośnie na zbiorze walidującym, mamy do czynienia ze zjawiskiem **nadmiernego dopasowania** (*overfitting*).\n",
"* Gdy błąd zmniejsza się na zbiorze uczącym, ale rośnie na zbiorze walidującym, mamy do czynienia ze zjawiskiem **nadmiernego dopasowania** (*overfitting*).\n",
"* Należy wtedy przerwać optymalizację. Automatyzacja tego procesu to _early stopping_."
]
},
@ -267,7 +266,7 @@
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
"slide_type": "subslide"
}
},
"source": [
@ -295,7 +294,7 @@
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
"slide_type": "subslide"
}
},
"source": [
@ -306,7 +305,7 @@
},
{
"cell_type": "code",
"execution_count": 7,
"execution_count": 1,
"metadata": {
"slideshow": {
"slide_type": "notes"
@ -328,7 +327,7 @@
},
{
"cell_type": "code",
"execution_count": 8,
"execution_count": 2,
"metadata": {
"slideshow": {
"slide_type": "notes"
@ -347,7 +346,7 @@
},
{
"cell_type": "code",
"execution_count": 9,
"execution_count": 3,
"metadata": {
"slideshow": {
"slide_type": "notes"
@ -419,7 +418,7 @@
},
{
"cell_type": "code",
"execution_count": 12,
"execution_count": 4,
"metadata": {
"slideshow": {
"slide_type": "notes"
@ -443,7 +442,7 @@
},
{
"cell_type": "code",
"execution_count": 13,
"execution_count": 5,
"metadata": {
"slideshow": {
"slide_type": "subslide"
@ -467,7 +466,7 @@
},
{
"cell_type": "code",
"execution_count": 14,
"execution_count": 6,
"metadata": {
"slideshow": {
"slide_type": "notes"
@ -514,7 +513,7 @@
},
{
"cell_type": "code",
"execution_count": 15,
"execution_count": 7,
"metadata": {
"slideshow": {
"slide_type": "notes"
@ -542,7 +541,7 @@
},
{
"cell_type": "code",
"execution_count": 16,
"execution_count": 8,
"metadata": {
"slideshow": {
"slide_type": "subslide"
@ -572,7 +571,7 @@
},
{
"cell_type": "code",
"execution_count": 17,
"execution_count": 9,
"metadata": {
"slideshow": {
"slide_type": "notes"
@ -594,7 +593,7 @@
},
{
"cell_type": "code",
"execution_count": 18,
"execution_count": 10,
"metadata": {
"slideshow": {
"slide_type": "subslide"
@ -608,7 +607,7 @@
},
{
"cell_type": "code",
"execution_count": 19,
"execution_count": 11,
"metadata": {
"slideshow": {
"slide_type": "notes"
@ -628,7 +627,7 @@
},
{
"cell_type": "code",
"execution_count": 21,
"execution_count": 12,
"metadata": {
"scrolled": true,
"slideshow": {
@ -639,7 +638,7 @@
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "99f3351da36340ca8c6d117c625f3ed4",
"model_id": "e622904eeae04709aed0ad3587bd5d7a",
"version_major": 2,
"version_minor": 0
},
@ -656,7 +655,7 @@
"<function __main__.interactive_classification(highlight)>"
]
},
"execution_count": 21,
"execution_count": 12,
"metadata": {},
"output_type": "execute_result"
}
@ -674,6 +673,7 @@
},
"source": [
"Zadanie klasyfikacyjne z powyższego przykładu polega na przypisaniu punktów do jednej z dwóch kategorii:\n",
"\n",
" 0. <font color=\"red\">czerwone krzyżyki</font>\n",
" 1. <font color=\"green\">zielone kółka</font>\n",
"\n",
@ -689,6 +689,7 @@
},
"source": [
"W rezultacie otrzymano model, który dzieli płaszczyznę na dwa obszary:\n",
"\n",
" 0. <font color=\"red\">na zewnątrz granatowej krzywej</font>\n",
" 1. <font color=\"green\">wewnątrz granatowej krzywej</font>\n",
" \n",
@ -725,7 +726,7 @@
},
{
"cell_type": "code",
"execution_count": 22,
"execution_count": 13,
"metadata": {
"slideshow": {
"slide_type": "skip"
@ -782,12 +783,12 @@
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
"slide_type": "subslide"
}
},
"source": [
"#### Dokładność (*accuracy*)\n",
"$$ \\mbox{accuracy} = \\frac{\\mbox{przypadki poprawnie sklasyfikowane}}{\\mbox{wszystkie przypadki}} = \\frac{TP + TN}{TP + TN + FP + FN} $$"
"$$ \\mbox{accuracy} = \\frac{\\mbox{przypadki poprawnie sklasyfikowane}}{\\mbox{wszystkie przypadki}} \\\\ = \\frac{TP + TN}{TP + TN + FP + FN} $$"
]
},
{
@ -803,7 +804,7 @@
},
{
"cell_type": "code",
"execution_count": 23,
"execution_count": 14,
"metadata": {
"slideshow": {
"slide_type": "subslide"
@ -848,7 +849,7 @@
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
"slide_type": "subslide"
}
},
"source": [
@ -858,7 +859,7 @@
},
{
"cell_type": "code",
"execution_count": 24,
"execution_count": 15,
"metadata": {
"slideshow": {
"slide_type": "subslide"
@ -893,7 +894,7 @@
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
"slide_type": "subslide"
}
},
"source": [
@ -903,7 +904,7 @@
},
{
"cell_type": "code",
"execution_count": 25,
"execution_count": 16,
"metadata": {
"slideshow": {
"slide_type": "subslide"
@ -938,7 +939,7 @@
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
"slide_type": "subslide"
}
},
"source": [
@ -948,7 +949,7 @@
},
{
"cell_type": "code",
"execution_count": 26,
"execution_count": 17,
"metadata": {
"slideshow": {
"slide_type": "subslide"
@ -1053,7 +1054,7 @@
},
{
"cell_type": "code",
"execution_count": 27,
"execution_count": 18,
"metadata": {
"slideshow": {
"slide_type": "notes"
@ -1126,7 +1127,7 @@
},
{
"cell_type": "code",
"execution_count": 29,
"execution_count": 19,
"metadata": {
"slideshow": {
"slide_type": "notes"
@ -1153,7 +1154,7 @@
},
{
"cell_type": "code",
"execution_count": 30,
"execution_count": 20,
"metadata": {
"slideshow": {
"slide_type": "subslide"
@ -1193,7 +1194,7 @@
},
{
"cell_type": "code",
"execution_count": 31,
"execution_count": 21,
"metadata": {
"slideshow": {
"slide_type": "subslide"
@ -1211,7 +1212,7 @@
},
{
"cell_type": "code",
"execution_count": 32,
"execution_count": 22,
"metadata": {
"slideshow": {
"slide_type": "notes"
@ -1234,7 +1235,7 @@
},
{
"cell_type": "code",
"execution_count": 33,
"execution_count": 23,
"metadata": {
"slideshow": {
"slide_type": "subslide"

BIN
wyk/cv.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 74 KiB