diff --git a/wyk/03_Regresja_logistyczna.ipynb b/wyk/03_Regresja_logistyczna.ipynb
index d649822..eff31d8 100644
--- a/wyk/03_Regresja_logistyczna.ipynb
+++ b/wyk/03_Regresja_logistyczna.ipynb
@@ -8,7 +8,7 @@
}
},
"source": [
- "## Uczenie maszynowe – zastosowania\n",
+ "### Uczenie maszynowe — zastosowania\n",
"# 3. Regresja logistyczna"
]
},
@@ -20,7 +20,62 @@
}
},
"source": [
- "Wbrew nazwie, *regresja* logistyczna jest algorytmem służącym do rozwiązywania problemów *klasyfikacji* (wcale nie problemów *regresji*!)"
+ "**Uwaga**: Wbrew nazwie, *regresja* logistyczna jest algorytmem służącym do rozwiązywania problemów *klasyfikacji* (wcale nie problemów *regresji*!)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "slideshow": {
+ "slide_type": "notes"
+ }
+ },
+ "source": [
+ "Do demonstracji metody regresji ligistycznej wykorzystamy klasyczny zbiór danych *Iris flower data set*, składający się ze 150 przykładów wartości 4 cech dla 3 gatunków irysów (kosaćców)."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "slideshow": {
+ "slide_type": "subslide"
+ }
+ },
+ "source": [
+ "### *Iris flower data set*\n",
+ "\n",
+ "* 150 przykładów\n",
+ "* 4 cechy\n",
+ "* 3 kategorie"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "slideshow": {
+ "slide_type": "subslide"
+ }
+ },
+ "source": [
+ "| | | |\n",
+ "| :--- | :--- | :--- |\n",
+ "| *Iris setosa* | *Iris virginica* | *Iris versicolor* |\n",
+ "| kosaciec szczecinkowy | kosaciec amerykański | kosaciec różnobarwny |\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "slideshow": {
+ "slide_type": "subslide"
+ }
+ },
+ "source": [
+ "4 cechy:\n",
+ " * długość działek kielicha (*sepal length*, `sl`)\n",
+ " * szerokość działek kielicha (*sepal width*, `sw`)\n",
+ " * długość płatka (*petal length*, `pl`)\n",
+ " * szerokość płatka (*petal width*, `pw`)"
]
},
{
@@ -38,27 +93,24 @@
"cell_type": "markdown",
"metadata": {
"slideshow": {
- "slide_type": "slide"
+ "slide_type": "subslide"
}
},
"source": [
- "Zacznijmy od najprostszego przypadku: chcemy nasze dane przypisać do jednej z **dwóch** klas.\n",
- "W tym celu użyjemy regresji logistycznej **dwuklasowej**."
+ "Zacznijmy od najprostszego przypadku:\n",
+ " * ograniczmy się do **2** klas\n",
+ " * ograniczmy się do **1** zmiennej"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
- "slide_type": "subslide"
+ "slide_type": "fragment"
}
},
"source": [
- "\n",
- "\n",
- "### Przykład: kosaciec szczecinkowy (*Iris setosa*)\n",
- "\n",
- "Mamy dane dotyczące długości płatków i chcielibyśmy na tej podstawie określić, czy jest to roślina z gatunku _Iris setosa_"
+ "→ dwuklasowa regresja logistyczna jednej zmiennej"
]
},
{
@@ -196,7 +248,7 @@
}
],
"source": [
- "# Wczytanie danych\n",
+ "# Wczytanie pełnych (oryginalnych) danych\n",
"\n",
"data_iris = pandas.read_csv('iris.csv')\n",
"print(data_iris[:6])"
@@ -204,8 +256,12 @@
},
{
"cell_type": "code",
- "execution_count": 3,
- "metadata": {},
+ "execution_count": 35,
+ "metadata": {
+ "slideshow": {
+ "slide_type": "subslide"
+ }
+ },
"outputs": [
{
"name": "stdout",
@@ -222,65 +278,17 @@
}
],
"source": [
+ "# Ograniczenie danych do 2 klas i 1 cechy\n",
+ "\n",
"data_iris_setosa = pandas.DataFrame()\n",
"data_iris_setosa['dł. płatka'] = data_iris['pl'] # \"pl\" oznacza \"petal length\"\n",
"data_iris_setosa['Iris setosa?'] = data_iris['Gatunek'].apply(lambda x: 1 if x=='Iris-setosa' else 0)\n",
"print(data_iris_setosa[:6])"
]
},
- {
- "cell_type": "markdown",
- "metadata": {
- "slideshow": {
- "slide_type": "subslide"
- }
- },
- "source": [
- "Czy możemy tu zastosować regresję liniową?\n",
- "\n",
- "Spróbujmy:"
- ]
- },
{
"cell_type": "code",
- "execution_count": 4,
- "metadata": {},
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "(150, 2)\n"
- ]
- }
- ],
- "source": [
- "print(data_iris_setosa.values.shape)"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 5,
- "metadata": {
- "slideshow": {
- "slide_type": "notes"
- }
- },
- "outputs": [],
- "source": [
- "import numpy as np\n",
- "\n",
- "m, n_plus_1 = data_iris_setosa.values.shape\n",
- "n = n_plus_1 - 1\n",
- "Xn = data_iris_setosa.values[:, 0:n].reshape(m, n)\n",
- "\n",
- "XMx3 = np.matrix(np.concatenate((np.ones((m, 1)), Xn), axis=1)).reshape(m, n_plus_1)\n",
- "yMx3 = np.matrix(data_iris_setosa.values[:, 1]).reshape(m, 1)"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 6,
+ "execution_count": 36,
"metadata": {
"slideshow": {
"slide_type": "subslide"
@@ -330,159 +338,159 @@
"C -3.535534 0.937635 -3.163008 1.836992 -2.5 2.5 \r\n",
"C -1.836992 3.163008 -0.937635 3.535534 0 3.535534 \r\n",
"z\r\n",
- "\" id=\"md45fbdf5ed\" style=\"stroke:#ff0000;\"/>\r\n",
+ "\" id=\"mb12790921d\" style=\"stroke:#ff0000;\"/>\r\n",
" \r\n",
- " \r\n",
- "