809 lines
136 KiB
Plaintext
809 lines
136 KiB
Plaintext
{
|
||
"cells": [
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {
|
||
"slideshow": {
|
||
"slide_type": "slide"
|
||
}
|
||
},
|
||
"source": [
|
||
"## Uczenie maszynowe UMZ 2019/2020\n",
|
||
"### 5 maja 2020\n",
|
||
"# 8. Uczenie nienadzorowane"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {
|
||
"slideshow": {
|
||
"slide_type": "notes"
|
||
}
|
||
},
|
||
"source": [
|
||
"Wyobraźmy sobie, że mamy następujący problem:\n",
|
||
"\n",
|
||
"Mamy zbiór okazów roślin i dysponujemy pewnymi danymi na ich temat (długość płatków kwiatów, ich szerokość itp.), ale zupełnie **nie wiemy**, do jakich gatunków one należą (nie wiemy nawet, ile jest tych gatunków).\n",
|
||
"\n",
|
||
"Chcemy automatycznie podzielić zbiór posiadanych okazów na nie więcej niż $k$ grup (klastrów) ($k$ ustalamy z góry), czyli dokonać **grupowania (klastrowania)** zbioru przykładów.\n",
|
||
"\n",
|
||
"Jest to zagadnienie z kategorii uczenia nienadzorowanego.\n",
|
||
"\n",
|
||
"W celu jego rozwiązania użyjemy algorytmu $k$ średnich."
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {
|
||
"slideshow": {
|
||
"slide_type": "slide"
|
||
}
|
||
},
|
||
"source": [
|
||
"## 8.1. Algorytm $k$ średnich"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 1,
|
||
"metadata": {
|
||
"slideshow": {
|
||
"slide_type": "notes"
|
||
}
|
||
},
|
||
"outputs": [],
|
||
"source": [
|
||
"# Przydatne importy\n",
|
||
"\n",
|
||
"import ipywidgets as widgets\n",
|
||
"import matplotlib.pyplot as plt\n",
|
||
"import numpy as np\n",
|
||
"import pandas\n",
|
||
"import random\n",
|
||
"import seaborn\n",
|
||
"\n",
|
||
"%matplotlib inline"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 2,
|
||
"metadata": {
|
||
"slideshow": {
|
||
"slide_type": "notes"
|
||
}
|
||
},
|
||
"outputs": [],
|
||
"source": [
|
||
"# Wczytanie danych (gatunki kosaćców)\n",
|
||
"\n",
|
||
"data_iris_raw = pandas.read_csv('iris.csv')\n",
|
||
"data_iris = pandas.DataFrame()\n",
|
||
"data_iris['x1'] = data_iris_raw['sl']\n",
|
||
"data_iris['x2'] = data_iris_raw['sw']\n",
|
||
"data_iris['x3'] = data_iris_raw['pl']\n",
|
||
"data_iris['x4'] = data_iris_raw['sw']\n",
|
||
"\n",
|
||
"# Nie używamy w ogóle kolumny ostatniej kolumny (\"Gatunek\"), \n",
|
||
"# ponieważ chcemy dokonać uczenia nienadzorowanego.\n",
|
||
"# Przyjmujemy, że w ogóle nie dysponujemy danymi na temat gatunku,\n",
|
||
"# mamy tylko 150 nieznanych roślin.\n",
|
||
"\n",
|
||
"X = data_iris.values\n",
|
||
"Xs = data_iris.values[:, 2:4]"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 3,
|
||
"metadata": {
|
||
"slideshow": {
|
||
"slide_type": "notes"
|
||
}
|
||
},
|
||
"outputs": [],
|
||
"source": [
|
||
"# Wykres danych\n",
|
||
"def plot_unlabeled_data(X, col1=0, col2=1, x1label=r'$x_1$', x2label=r'$x_2$'): \n",
|
||
" fig = plt.figure(figsize=(16*.7, 9*.7))\n",
|
||
" ax = fig.add_subplot(111)\n",
|
||
" fig.subplots_adjust(left=0.1, right=0.9, bottom=0.1, top=0.9)\n",
|
||
" X1 = X[:, col1].tolist()\n",
|
||
" X2 = X[:, col2].tolist()\n",
|
||
" ax.scatter(X1, X2, c='k', marker='o', s=50, label='Dane')\n",
|
||
" ax.set_xlabel(x1label)\n",
|
||
" ax.set_ylabel(x2label)\n",
|
||
" ax.margins(.05, .05)\n",
|
||
" return fig"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 4,
|
||
"metadata": {
|
||
"slideshow": {
|
||
"slide_type": "notes"
|
||
}
|
||
},
|
||
"outputs": [],
|
||
"source": [
|
||
"# Przygotowanie interaktywnego wykresu\n",
|
||
"\n",
|
||
"dropdown_arg1 = widgets.Dropdown(options=[0, 1, 2, 3], value=2, description='arg1')\n",
|
||
"dropdown_arg2 = widgets.Dropdown(options=[0, 1, 2, 3], value=3, description='arg2')\n",
|
||
"\n",
|
||
"def interactive_unlabeled_data(arg1, arg2):\n",
|
||
" fig = plot_unlabeled_data(\n",
|
||
" X, col1=arg1, col2=arg2, x1label='$x_{}$'.format(arg1), x2label='$x_{}$'.format(arg2))"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 5,
|
||
"metadata": {
|
||
"slideshow": {
|
||
"slide_type": "subslide"
|
||
}
|
||
},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"image/png": "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\n",
|
||
"text/plain": [
|
||
"<Figure size 806.4x453.6 with 1 Axes>"
|
||
]
|
||
},
|
||
"metadata": {
|
||
"needs_background": "light"
|
||
},
|
||
"output_type": "display_data"
|
||
},
|
||
{
|
||
"data": {
|
||
"text/plain": [
|
||
"<function __main__.interactive_unlabeled_data(arg1, arg2)>"
|
||
]
|
||
},
|
||
"execution_count": 5,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"widgets.interact(interactive_unlabeled_data, arg1=dropdown_arg1, arg2=dropdown_arg2)"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {
|
||
"slideshow": {
|
||
"slide_type": "notes"
|
||
}
|
||
},
|
||
"source": [
|
||
"Powyższy wykres przedstawia surowe dane.\n",
|
||
"Ponieważ nasze obserwacje mają 4 współrzędne, na płaskim wykresie możemy przedstawić tylko dwie z nich.\n",
|
||
"\n",
|
||
"Dlatego powyższy wykres umożliwia wybór dwóch współrzędnych, na które chcemy rzutować.\n",
|
||
"\n",
|
||
"Wszystkie takie „rzuty” przedstawia również wykres poniżej."
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 6,
|
||
"metadata": {
|
||
"slideshow": {
|
||
"slide_type": "subslide"
|
||
}
|
||
},
|
||
"outputs": [
|
||
{
|
||
"name": "stderr",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"/home/pawel/anaconda3/lib/python3.7/site-packages/seaborn/axisgrid.py:2065: UserWarning: The `size` parameter has been renamed to `height`; pleaes update your code.\n",
|
||
" warnings.warn(msg, UserWarning)\n"
|
||
]
|
||
},
|
||
{
|
||
"data": {
|
||
"text/plain": [
|
||
"<seaborn.axisgrid.PairGrid at 0x7fba0d6cc310>"
|
||
]
|
||
},
|
||
"execution_count": 6,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
},
|
||
{
|
||
"data": {
|
||
"image/png": "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\n",
|
||
"text/plain": [
|
||
"<Figure size 756x432 with 20 Axes>"
|
||
]
|
||
},
|
||
"metadata": {
|
||
"needs_background": "light"
|
||
},
|
||
"output_type": "display_data"
|
||
}
|
||
],
|
||
"source": [
|
||
"seaborn.pairplot(data_iris, vars=data_iris.columns, size=1.5, aspect=1.75)"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 7,
|
||
"metadata": {
|
||
"slideshow": {
|
||
"slide_type": "notes"
|
||
}
|
||
},
|
||
"outputs": [],
|
||
"source": [
|
||
"# Odległość euklidesowa\n",
|
||
"def euclidean_distance(x1, x2):\n",
|
||
" return np.linalg.norm(x1 - x2)"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 8,
|
||
"metadata": {
|
||
"slideshow": {
|
||
"slide_type": "notes"
|
||
}
|
||
},
|
||
"outputs": [],
|
||
"source": [
|
||
"# Algorytm k średnich\n",
|
||
"def k_means(X, k, distance=euclidean_distance):\n",
|
||
" history = []\n",
|
||
" Y = []\n",
|
||
" \n",
|
||
" # Wylosuj centroid dla każdej klasy\n",
|
||
" centroids = [[random.uniform(X.min(axis=0)[f], X.max(axis=0)[f])\n",
|
||
" for f in range(X.shape[1])]\n",
|
||
" for c in range(k)]\n",
|
||
"\n",
|
||
" # Powtarzaj, dopóki klasy się zmieniają\n",
|
||
" while True:\n",
|
||
" distances = [[distance(centroids[c], x) for c in range(k)] for x in X]\n",
|
||
" Y_new = [d.index(min(d)) for d in distances]\n",
|
||
" if Y_new == Y:\n",
|
||
" break\n",
|
||
" Y = Y_new\n",
|
||
" XY = np.asarray(np.concatenate((X, np.matrix(Y).T), axis=1))\n",
|
||
" Xc = [XY[XY[:, 2] == c][:, :-1] for c in range(k)]\n",
|
||
" centroids = [[Xc[c].mean(axis=0)[f] for f in range(X.shape[1])]\n",
|
||
" for c in range(k)]\n",
|
||
" history.append((centroids, Y))\n",
|
||
"\n",
|
||
" result = history[-1][1]\n",
|
||
" return result, history"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 9,
|
||
"metadata": {
|
||
"slideshow": {
|
||
"slide_type": "notes"
|
||
}
|
||
},
|
||
"outputs": [],
|
||
"source": [
|
||
"# Wykres danych - klastrowanie\n",
|
||
"def plot_clusters(X, Y, k, centroids=None):\n",
|
||
" color = ['r', 'g', 'b', 'c', 'm', 'y', 'k']\n",
|
||
" fig = plt.figure(figsize=(16*.7, 9*.7))\n",
|
||
" ax = fig.add_subplot(111)\n",
|
||
" fig.subplots_adjust(left=0.1, right=0.9, bottom=0.1, top=0.9)\n",
|
||
"\n",
|
||
" X1 = X[:, 0].tolist()\n",
|
||
" X2 = X[:, 1].tolist()\n",
|
||
" X1 = [[x for x, y in zip(X1, Y) if y == c] for c in range(k)]\n",
|
||
" X2 = [[x for x, y in zip(X2, Y) if y == c] for c in range(k)]\n",
|
||
"\n",
|
||
" for c in range(k):\n",
|
||
" ax.scatter(X1[c], X2[c], c=color[c], marker='o', s=25, label='Dane')\n",
|
||
" if centroids:\n",
|
||
" ax.scatter([centroids[c][0]], [centroids[c][1]], c=color[c], marker='+', s=500, label='Centroid')\n",
|
||
"\n",
|
||
" ax.set_xlabel(r'$x_1$')\n",
|
||
" ax.set_ylabel(r'$x_2$')\n",
|
||
" ax.margins(.05, .05)\n",
|
||
" return fig"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 10,
|
||
"metadata": {
|
||
"slideshow": {
|
||
"slide_type": "subslide"
|
||
}
|
||
},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"image/png": "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\n",
|
||
"text/plain": [
|
||
"<Figure size 806.4x453.6 with 1 Axes>"
|
||
]
|
||
},
|
||
"metadata": {
|
||
"needs_background": "light"
|
||
},
|
||
"output_type": "display_data"
|
||
}
|
||
],
|
||
"source": [
|
||
"Ys, history = k_means(Xs, 2)\n",
|
||
"fig = plot_clusters(Xs, Ys, 2, centroids=history[-1][0]),"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 11,
|
||
"metadata": {
|
||
"slideshow": {
|
||
"slide_type": "notes"
|
||
}
|
||
},
|
||
"outputs": [],
|
||
"source": [
|
||
"# Przygotowanie interaktywnego wykresu\n",
|
||
"\n",
|
||
"slider_k = widgets.IntSlider(min=1, max=7, step=1, value=2, description=r'$k$', width=300)\n",
|
||
"\n",
|
||
"def interactive_kmeans_k(steps, history, k):\n",
|
||
" if steps >= len(history) or steps == 10:\n",
|
||
" steps = len(history) - 1\n",
|
||
" fig = plot_clusters(Xs, history[steps][1], k, centroids=history[steps][0])\n",
|
||
" \n",
|
||
"def interactive_kmeans(k):\n",
|
||
" slider_steps = widgets.IntSlider(min=1, max=10, step=1, value=1, description=r'steps', width=300)\n",
|
||
" _, history = k_means(Xs, k)\n",
|
||
" widgets.interact(interactive_kmeans_k, steps=slider_steps,\n",
|
||
" history=widgets.fixed(history), k=widgets.fixed(k))"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 12,
|
||
"metadata": {
|
||
"slideshow": {
|
||
"slide_type": "subslide"
|
||
}
|
||
},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"application/vnd.jupyter.widget-view+json": {
|
||
"model_id": "d848eb486dd04d669b73755d43a99fb1",
|
||
"version_major": 2,
|
||
"version_minor": 0
|
||
},
|
||
"text/plain": [
|
||
"interactive(children=(IntSlider(value=2, description='$k$', max=7, min=1), Button(description='Run Interact', …"
|
||
]
|
||
},
|
||
"metadata": {},
|
||
"output_type": "display_data"
|
||
},
|
||
{
|
||
"data": {
|
||
"text/plain": [
|
||
"<function __main__.interactive_kmeans(k)>"
|
||
]
|
||
},
|
||
"execution_count": 12,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"widgets.interact_manual(interactive_kmeans, k=slider_k) "
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {
|
||
"slideshow": {
|
||
"slide_type": "subslide"
|
||
}
|
||
},
|
||
"source": [
|
||
"### Algorytm $k$ średnich – dane wejściowe\n",
|
||
"\n",
|
||
"* $k$ – liczba klastrów\n",
|
||
"* zbiór uczący $X = \\{ x^{(1)}, x^{(2)}, \\ldots, x^{(m)} \\}$, $x^{(i)} \\in \\mathbb{R}^n$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {
|
||
"slideshow": {
|
||
"slide_type": "fragment"
|
||
}
|
||
},
|
||
"source": [
|
||
"Na wejściu nie ma zbioru $Y$, ponieważ jest to uczenie nienadzorowane!"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {
|
||
"slideshow": {
|
||
"slide_type": "subslide"
|
||
}
|
||
},
|
||
"source": [
|
||
"### Algorytm $k$ średnich – pseudokod\n",
|
||
"\n",
|
||
"1. Zainicjalizuj losowo $k$ centroidów (środków ciężkości klastrów): $\\mu_1, \\ldots, \\mu_k$.\n",
|
||
"1. Powtarzaj dopóki przyporządkowania klastrów się zmieniają:\n",
|
||
" 1. Dla $i = 1$ do $m$:\n",
|
||
" za $y^{(i)}$ przyjmij klasę najbliższego centroidu.\n",
|
||
" 1. Dla $c = 1$ do $k$:\n",
|
||
" za $\\mu_c$ przyjmij średnią wszystkich punktów $x^{(i)}$ takich, że $y^{(i)} = c$."
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 13,
|
||
"metadata": {
|
||
"slideshow": {
|
||
"slide_type": "subslide"
|
||
}
|
||
},
|
||
"outputs": [],
|
||
"source": [
|
||
"# Algorytm k średnich\n",
|
||
"def k_means(X, k, distance=euclidean_distance):\n",
|
||
" Y = []\n",
|
||
" centroids = [[random.uniform(X.min(axis=0)[f],X.max(axis=0)[f])\n",
|
||
" for f in range(X.shape[1])]\n",
|
||
" for c in range(k)] # Wylosuj centroidy\n",
|
||
" while True:\n",
|
||
" distances = [[distance(centroids[c], x) for c in range(k)]\n",
|
||
" for x in X] # Oblicz odległości\n",
|
||
" Y_new = [d.index(min(d)) for d in distances]\n",
|
||
" if Y_new == Y:\n",
|
||
" break # Jeśli nic się nie zmienia, przerwij\n",
|
||
" Y = Y_new\n",
|
||
" XY = np.asarray(np.concatenate((X,np.matrix(Y).T),axis=1))\n",
|
||
" Xc = [XY[XY[:, 2] == c][:, :-1] for c in range(k)]\n",
|
||
" centroids = [[Xc[c].mean(axis=0)[f]\n",
|
||
" for f in range(X.shape[1])]\n",
|
||
" for c in range(k)] # Przesuń centroidy\n",
|
||
" return Y"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {
|
||
"slideshow": {
|
||
"slide_type": "subslide"
|
||
}
|
||
},
|
||
"source": [
|
||
"* Liczba klastrów jest określona z góry i wynosi $k$."
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {
|
||
"slideshow": {
|
||
"slide_type": "fragment"
|
||
}
|
||
},
|
||
"source": [
|
||
"* Jeżeli w którymś kroku algorytmu jedna z klas nie zostanie przyporządkowana żadnemu z przykładów, pomija się ją – w ten sposób wynikiem działania algorytmu może być mniej niż $k$ klastrów."
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {
|
||
"slideshow": {
|
||
"slide_type": "subslide"
|
||
}
|
||
},
|
||
"source": [
|
||
"### Funkcja kosztu dla problemu klastrowania\n",
|
||
"\n",
|
||
"$$ J \\left( y^{(i)}, \\ldots, y^{(m)}, \\mu_{1}, \\ldots, \\mu_{k} \\right) = \\frac{1}{m} \\sum_{i=1}^{m} || x^{(i)} - \\mu_{y^{(i)}} || ^2 $$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {
|
||
"slideshow": {
|
||
"slide_type": "fragment"
|
||
}
|
||
},
|
||
"source": [
|
||
"* Zauważmy, że z każdym krokiem algorytmu $k$ średnich koszt się zmniejsza (lub ewentualnie pozostaje taki sam)."
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {
|
||
"slideshow": {
|
||
"slide_type": "subslide"
|
||
}
|
||
},
|
||
"source": [
|
||
"### Wielokrotna inicjalizacja\n",
|
||
"\n",
|
||
"* Algorytm $k$ średnich zawsze znajdzie lokalne minimum funkcji kosztu $J$, ale nie zawsze będzie to globalne minimum."
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {
|
||
"slideshow": {
|
||
"slide_type": "fragment"
|
||
}
|
||
},
|
||
"source": [
|
||
"* Aby temu zaradzić, można uruchomić algorytm $k$ średnich wiele razy, za każdym razem z innym losowym położeniem centroidów (tzw. **wielokrotna losowa inicjalizacja** – _multiple random initialization_).\n",
|
||
"* Za każdym razem obliczamy koszt $J$. Wybieramy ten wynik, który ma najniższy koszt."
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {
|
||
"slideshow": {
|
||
"slide_type": "subslide"
|
||
}
|
||
},
|
||
"source": [
|
||
"### Wybór liczby klastrów $k$\n",
|
||
"\n",
|
||
"Ile powinna wynosić liczba grup $k$?\n",
|
||
"* Najlepiej wybrać $k$ ręcznie w zależności od kształtu danych i celu, który chcemy osiągnąć."
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {
|
||
"slideshow": {
|
||
"slide_type": "slide"
|
||
}
|
||
},
|
||
"source": [
|
||
"## 8.2. Analiza głównych składowych"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {
|
||
"slideshow": {
|
||
"slide_type": "notes"
|
||
}
|
||
},
|
||
"source": [
|
||
"Analiza głównych składowych to inny przykład zagadnienia z dziedziny uczenia nienadzorowanego.\n",
|
||
"\n",
|
||
"Polega na próbie zredukowania liczby wymiarów dla danych wielowymiarowych, czyli zmniejszenia liczby cech, gdy rozpatrujemy przykłady o dużej liczbie cech."
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {
|
||
"slideshow": {
|
||
"slide_type": "subslide"
|
||
}
|
||
},
|
||
"source": [
|
||
"### Redukcja liczby wymiarów\n",
|
||
"\n",
|
||
"Z jakich powodów chcemy redukować liczbę wymiarów?"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {
|
||
"slideshow": {
|
||
"slide_type": "fragment"
|
||
}
|
||
},
|
||
"source": [
|
||
"* Chcemy pozbyć się nadmiarowych cech, np. „długość w cm” / „długość w calach”, „długość” i „szerokość” / „powierzchnia”."
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {
|
||
"slideshow": {
|
||
"slide_type": "fragment"
|
||
}
|
||
},
|
||
"source": [
|
||
"* Chcemy znaleźć bardziej optymalną kombinację cech."
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {
|
||
"slideshow": {
|
||
"slide_type": "fragment"
|
||
}
|
||
},
|
||
"source": [
|
||
"* Chcemy przyspieszyć działanie algorytmów."
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {
|
||
"slideshow": {
|
||
"slide_type": "fragment"
|
||
}
|
||
},
|
||
"source": [
|
||
"* Chcemy zwizualizować dane."
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {
|
||
"slideshow": {
|
||
"slide_type": "subslide"
|
||
}
|
||
},
|
||
"source": [
|
||
"### Błąd rzutowania\n",
|
||
"\n",
|
||
"**Błąd rzutowania** – błąd średniokwadratowy pomiędzy danymi oryginalnymi a danymi zrzutowanymi."
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {
|
||
"slideshow": {
|
||
"slide_type": "subslide"
|
||
}
|
||
},
|
||
"source": [
|
||
"### Sformułowanie problemu\n",
|
||
"\n",
|
||
"**Analiza głównych składowych** (_Principal Component Analysis_, PCA):\n",
|
||
"\n",
|
||
"Zredukować liczbę wymiarów z $n$ do $k$, czyli znaleźć $k$ wektorów $u^{(1)}, u^{(2)}, \\ldots, u^{(k)}$ takich, że rzutowanie danych na podprzeztrzeń rozpiętą na tych wektorach minimalizuje błąd rzutowania."
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {
|
||
"slideshow": {
|
||
"slide_type": "subslide"
|
||
}
|
||
},
|
||
"source": [
|
||
"* **Uwaga:** analiza głównych składowych to (mimo pozornych podobieństw) zupełnie inne zagadnienie niż regresja liniowa!"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {
|
||
"slideshow": {
|
||
"slide_type": "subslide"
|
||
}
|
||
},
|
||
"source": [
|
||
"### Algorytm PCA\n",
|
||
"\n",
|
||
"1. Dany jest zbiór składający się z $x^{(1)}, x^{(2)}, \\ldots, x^{(m)} \\in \\mathbb{R}^n$.\n",
|
||
"1. Chcemy zredukować liczbę wymiarów z $n$ do $k$ ($k < n$).\n",
|
||
"1. W ramach wstępnego przetwarzania dokonujemy skalowania i normalizacji średniej.\n",
|
||
"1. Znajdujemy macierz kowariancji:\n",
|
||
" $$ \\Sigma = \\frac{1}{m} \\sum_{i=1}^{n} \\left( x^{(i)} \\right) \\left( x^{(i)} \\right)^T $$\n",
|
||
"1. Znajdujemy wektory własne macierzy $\\Sigma$ (rozkład SVD):\n",
|
||
" $$ (U, S, V) := \\mathop{\\rm SVD}(\\Sigma) $$\n",
|
||
"1. Pierwszych $k$ kolumn macierzy $U$ to szukane wektory."
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 14,
|
||
"metadata": {
|
||
"slideshow": {
|
||
"slide_type": "subslide"
|
||
}
|
||
},
|
||
"outputs": [],
|
||
"source": [
|
||
"from sklearn.preprocessing import StandardScaler\n",
|
||
"\n",
|
||
"# Algorytm PCA - implementacja\n",
|
||
"def pca(X, k):\n",
|
||
" X_std = StandardScaler().fit_transform(X) # normalizacja\n",
|
||
" mean_vec = np.mean(X_std, axis=0)\n",
|
||
" cov_mat = np.cov(X_std.T) # macierz kowariancji\n",
|
||
" n = cov_mat.shape[0]\n",
|
||
" eig_vals, eig_vecs = np.linalg.eig(cov_mat) # wektory własne\n",
|
||
" eig_pairs = [(np.abs(eig_vals[i]), eig_vecs[:, i])\n",
|
||
" for i in range(len(eig_vals))]\n",
|
||
" eig_pairs.sort()\n",
|
||
" eig_pairs.reverse()\n",
|
||
" matrix_w = np.hstack([eig_pairs[i][1].reshape(n, 1)\n",
|
||
" for i in range(k)]) # wybór\n",
|
||
" return X_std.dot(matrix_w) # transformacja"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 15,
|
||
"metadata": {
|
||
"slideshow": {
|
||
"slide_type": "subslide"
|
||
}
|
||
},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"image/png": "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\n",
|
||
"text/plain": [
|
||
"<Figure size 806.4x453.6 with 1 Axes>"
|
||
]
|
||
},
|
||
"metadata": {
|
||
"needs_background": "light"
|
||
},
|
||
"output_type": "display_data"
|
||
}
|
||
],
|
||
"source": [
|
||
"# X - dane ze zbioru \"iris\" z poprzedniego przykładu\n",
|
||
"\n",
|
||
"X_pca = pca(X, 2)\n",
|
||
"fig = plot_unlabeled_data(X_pca)"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {
|
||
"slideshow": {
|
||
"slide_type": "notes"
|
||
}
|
||
},
|
||
"source": [
|
||
"Analiza głównych składowych umożliwiła stowrzenie powyższego wykresu, który wizualizuje 4-wymiarowe dane ze zbioru *iris* na 2-wymiarowej płaszczyźnie.\n",
|
||
"\n",
|
||
"Współrzędne $x_1$ i $x_2$, stanowiące osi wykresu, zostały uzyskane w wyniku działania algorytmu PCA (nie są to żadne z oryginalnych cech ze zbioru *iris* – długość płatka, szerokość płatka itp.)."
|
||
]
|
||
}
|
||
],
|
||
"metadata": {
|
||
"celltoolbar": "Slideshow",
|
||
"kernelspec": {
|
||
"display_name": "Python 3",
|
||
"language": "python",
|
||
"name": "python3"
|
||
},
|
||
"language_info": {
|
||
"codemirror_mode": {
|
||
"name": "ipython",
|
||
"version": 3
|
||
},
|
||
"file_extension": ".py",
|
||
"mimetype": "text/x-python",
|
||
"name": "python",
|
||
"nbconvert_exporter": "python",
|
||
"pygments_lexer": "ipython3",
|
||
"version": "3.8.3"
|
||
},
|
||
"livereveal": {
|
||
"start_slideshow_at": "selected",
|
||
"theme": "amu"
|
||
}
|
||
},
|
||
"nbformat": 4,
|
||
"nbformat_minor": 4
|
||
}
|