Bernoulli

This commit is contained in:
Filip Gralinski 2021-04-27 16:50:25 +02:00
parent 2687aaa426
commit 724be2f486

View File

@ -2,7 +2,7 @@
"cells": [ "cells": [
{ {
"cell_type": "markdown", "cell_type": "markdown",
"id": "damaged-senator", "id": "moderate-array",
"metadata": {}, "metadata": {},
"source": [ "source": [
"# Klasyfikacja binarna dla tekstu\n", "# Klasyfikacja binarna dla tekstu\n",
@ -14,7 +14,7 @@
}, },
{ {
"cell_type": "markdown", "cell_type": "markdown",
"id": "explicit-gathering", "id": "correct-victory",
"metadata": {}, "metadata": {},
"source": [ "source": [
"**Pytanie**: Czy można wyobrazić sobie zadanie klasyfikacji mejli, niebędące zadaniem klasyfikacji binarnej?" "**Pytanie**: Czy można wyobrazić sobie zadanie klasyfikacji mejli, niebędące zadaniem klasyfikacji binarnej?"
@ -22,7 +22,7 @@
}, },
{ {
"cell_type": "markdown", "cell_type": "markdown",
"id": "material-watch", "id": "spiritual-diploma",
"metadata": {}, "metadata": {},
"source": [ "source": [
"Zakładamy paradygmat uczenia nadzorowanego, tzn. dysponujemy zbiorem uczącym.\n", "Zakładamy paradygmat uczenia nadzorowanego, tzn. dysponujemy zbiorem uczącym.\n",
@ -32,7 +32,7 @@
}, },
{ {
"cell_type": "markdown", "cell_type": "markdown",
"id": "referenced-hello", "id": "secure-performance",
"metadata": {}, "metadata": {},
"source": [ "source": [
"## Klasyfikacja regułowa\n", "## Klasyfikacja regułowa\n",
@ -49,14 +49,14 @@
"body __FRAUD_XJR\t/(?:who was a|as a|an? honest|you being a|to any) foreigner/i\n", "body __FRAUD_XJR\t/(?:who was a|as a|an? honest|you being a|to any) foreigner/i\n",
"```\n", "```\n",
"\n", "\n",
"Jakie są wady i zalety regułowych filtrów antyspamowych?\n", "**Pytanie:** Jakie są wady i zalety regułowych filtrów antyspamowych?\n",
"\n", "\n",
"Współcześnie zdecydowanie dominuje użycie metod statystycznych (opartych na nadzorowanym uczeniu maszynowym). Do popularności tych metod przyczynił się artykuł [Plan for spam](http://www.paulgraham.com/spam.html) autorstwa Paula Grahama." "Współcześnie zdecydowanie dominuje użycie metod statystycznych (opartych na nadzorowanym uczeniu maszynowym). Do popularności tych metod przyczynił się artykuł [Plan for spam](http://www.paulgraham.com/spam.html) autorstwa Paula Grahama."
] ]
}, },
{ {
"cell_type": "markdown", "cell_type": "markdown",
"id": "cathedral-uganda", "id": "indoor-ending",
"metadata": {}, "metadata": {},
"source": [ "source": [
"## Podejście generatywne i dyskryminatywne\n", "## Podejście generatywne i dyskryminatywne\n",
@ -72,7 +72,7 @@
}, },
{ {
"cell_type": "markdown", "cell_type": "markdown",
"id": "powerful-engineer", "id": "pleased-clinic",
"metadata": {}, "metadata": {},
"source": [ "source": [
"## Nasz \"dyżurny\" przykład\n", "## Nasz \"dyżurny\" przykład\n",
@ -94,11 +94,31 @@
"Zakładamy, że dokumenty podlegają lematyzacji i sprowadzeniu do mały liter, więc ostatecznie będziemy mieli następujące ciąg termów:\n", "Zakładamy, że dokumenty podlegają lematyzacji i sprowadzeniu do mały liter, więc ostatecznie będziemy mieli następujące ciąg termów:\n",
"\n", "\n",
"* $x_1=(\\mathit{kupić}, \\mathit{pan}, \\mathit{viagra})$\n", "* $x_1=(\\mathit{kupić}, \\mathit{pan}, \\mathit{viagra})$\n",
"* $x_2=(\\mathit{tani}, \\mathit{miejsce}, \\mathit{dla}, \\mathit{pana})$\n", "* $x_2=(\\mathit{tani}, \\mathit{miejsce}, \\mathit{dla}, \\mathit{pan})$\n",
"* $x_3=(\\mathit{viagra}, \\mathit{viagra}, \\mathit{viagra})$\n", "* $x_3=(\\mathit{viagra}, \\mathit{viagra}, \\mathit{viagra})$\n",
"* $x_4=(\\mathit{kupić}, \\mathit{tani}, \\mathit{cartridge})$\n", "* $x_4=(\\mathit{kupić}, \\mathit{tani}, \\mathit{cartridge})$\n",
"\n", "\n",
"Uczymy na tym zbiorze klasyfikator, który będziemy testować na dokumencie $d=\\mathit{tania tania viagra dla pana}$, tj. po normalizacji\n", "$P(tani|c) = (1+1)/(9+7) = 2/16 = 0.125$\n",
"$P(viagra|c) = \\frac{4+1}{9 + 7} = 5/16 = 0.3125 $\n",
"$P(dla|c) = \\frac{0+1}{9+7} = 1/16 = 0.0625$\n",
"$P(pan|c) = (1+1)/(9+7) = 2/16 = 0.125 $\n",
"$P(c) = 0.75$\n",
"\n",
"w wersji wielomianowej: $P(c)P(tani|c)P(tani|c)P(viagra|c)P(dla|c)P(pan|c) = 0.75 * 0.125 * 0.125 * 0.3125 * 0.0625 * 0.125= 0.0002861$\n",
"\n",
"w werjis Bernoulliego: $P(c)P(U_{dla}=1|c)P(U_{cartridge}=0|c)P(U_{viagra}=1|c)P(U_{pan}=1|c)P(U_{tani}=1|c)P(U_{miejsce}=0|c)P(U_{kup}=0|c)$\n",
"\n",
"$P(tani|\\bar{c}) = (1+1)/(4+7) = 2/11 =0.182 $\n",
"$P(viagra|\\bar{c}) = 1/11 = 0.091 $\n",
"$P(dla|\\bar{c}) = 2/11 = 0.182 $\n",
"$P(pan|\\bar{c}) = 2/11 = 0.182 $\n",
"$P(\\bar{c}) = 0.25$\n",
"\n",
"$P(\\bar{c})P(tani|\\bar{c})P(tani|\\bar{c})P(dla|\\bar{c})P(pan|\\bar{c}) = 0.25 * 0.182 * 0.182 * 0.091 * 0.182 * 0.182 = 0.00002496$\n",
"\n",
"\n",
"\n",
"Uczymy na tym zbiorze klasyfikator, który będziemy testować na dokumencie $d=\\mathit{tania\\ tania\\ viagra\\ dla\\ pana}$, tj. po normalizacji\n",
"$d=(\\mathit{tani}, \\mathit{tani}, \\mathit{viagra}, \\mathit{dla}, \\mathit{pan})$.\n", "$d=(\\mathit{tani}, \\mathit{tani}, \\mathit{viagra}, \\mathit{dla}, \\mathit{pan})$.\n",
"\n", "\n",
"**Uwaga:** Przykład jest oczywiście nierealistyczny i trudno będzie nam ocenić sensowność odpowiedzi. Za to będziemy w stanie policzyć ręcznie wynik.\n" "**Uwaga:** Przykład jest oczywiście nierealistyczny i trudno będzie nam ocenić sensowność odpowiedzi. Za to będziemy w stanie policzyć ręcznie wynik.\n"
@ -106,7 +126,7 @@
}, },
{ {
"cell_type": "markdown", "cell_type": "markdown",
"id": "controversial-rotation", "id": "partial-military",
"metadata": {}, "metadata": {},
"source": [ "source": [
"## Naiwny klasyfikator bayesowski\n", "## Naiwny klasyfikator bayesowski\n",
@ -127,7 +147,7 @@
}, },
{ {
"cell_type": "markdown", "cell_type": "markdown",
"id": "spatial-citizenship", "id": "colonial-creature",
"metadata": {}, "metadata": {},
"source": [ "source": [
"Mamy dokument $d$ i dwie klasy $c$ i $\\bar{c}$. Policzymy prawdopodobieństwa $P(c|d)$ (mamy dokument $d$, jakie jest prawdopodobieństwo, że to klasa $c$) i $P(\\bar{c}|d)$. A właściwie będziemy te prawdopodobieństwa porównywać.\n", "Mamy dokument $d$ i dwie klasy $c$ i $\\bar{c}$. Policzymy prawdopodobieństwa $P(c|d)$ (mamy dokument $d$, jakie jest prawdopodobieństwo, że to klasa $c$) i $P(\\bar{c}|d)$. A właściwie będziemy te prawdopodobieństwa porównywać.\n",
@ -139,25 +159,25 @@
}, },
{ {
"cell_type": "markdown", "cell_type": "markdown",
"id": "united-recognition", "id": "governing-fiction",
"metadata": {}, "metadata": {},
"source": [ "source": [
"Zastosujmy najpierw wzór Bayesa.\n", "Zastosujmy najpierw wzór Bayesa.\n",
"\n", "\n",
"$P(c|d) = \\frac{P(d|c) P(c)}{P(d)} \\propto P(d|c) P(c)$" "$P(c|d) = \\frac{P(d|c) P(c)}{P(d)}$"
] ]
}, },
{ {
"cell_type": "markdown", "cell_type": "markdown",
"id": "present-draft", "id": "northern-spine",
"metadata": {}, "metadata": {},
"source": [ "source": [
"$P(\\bar{c}|d) = \\frac{P(d|\\bar{c}) P(\\bar{c})}{P(d)} \\propto P(d|\\bar{c}) P(\\bar{c}) $" "$P(\\bar{c}|d) = \\frac{P(d|\\bar{c}) P(\\bar{c})}{P(d)}$"
] ]
}, },
{ {
"cell_type": "markdown", "cell_type": "markdown",
"id": "accepting-tamil", "id": "utility-induction",
"metadata": {}, "metadata": {},
"source": [ "source": [
"(Oczywiście skądinąd $P(\\bar{c}|d) = 1 - P(c|d)$, ale nie będziemy teraz tego wykorzystywali.)" "(Oczywiście skądinąd $P(\\bar{c}|d) = 1 - P(c|d)$, ale nie będziemy teraz tego wykorzystywali.)"
@ -165,7 +185,7 @@
}, },
{ {
"cell_type": "markdown", "cell_type": "markdown",
"id": "equipped-outreach", "id": "timely-force",
"metadata": {}, "metadata": {},
"source": [ "source": [
"Co możemy pominąć, jeśli tylko porównujemy $P(c|d)$ i $P(\\bar{c}|d)$?\n", "Co możemy pominąć, jeśli tylko porównujemy $P(c|d)$ i $P(\\bar{c}|d)$?\n",
@ -181,7 +201,7 @@
}, },
{ {
"cell_type": "markdown", "cell_type": "markdown",
"id": "active-motor", "id": "embedded-involvement",
"metadata": {}, "metadata": {},
"source": [ "source": [
"#### Prawdopodobieństwo _a priori_\n", "#### Prawdopodobieństwo _a priori_\n",
@ -193,12 +213,16 @@
"gdzie\n", "gdzie\n",
"\n", "\n",
"* N - liczba wszystkich dokumentów w zbiorze uczącym\n", "* N - liczba wszystkich dokumentów w zbiorze uczącym\n",
"* N_c - liczba dokumentow w zbiorze uczącym z klasą $c$\n" "* N_c - liczba dokumentow w zbiorze uczącym z klasą $c$\n",
"\n",
"$\\hat{P}(c) = 0,75$\n",
"\n",
"$\\hat{P}(\\bar{c}) = 0,25$\n"
] ]
}, },
{ {
"cell_type": "markdown", "cell_type": "markdown",
"id": "trying-indonesian", "id": "virgin-premiere",
"metadata": {}, "metadata": {},
"source": [ "source": [
"#### Prawdopodobieństwo _a posteriori_\n", "#### Prawdopodobieństwo _a posteriori_\n",
@ -212,7 +236,7 @@
}, },
{ {
"cell_type": "markdown", "cell_type": "markdown",
"id": "median-nomination", "id": "acting-zimbabwe",
"metadata": {}, "metadata": {},
"source": [ "source": [
"$P(d|c) = P(t_1\\dots t_n|c)$\n", "$P(d|c) = P(t_1\\dots t_n|c)$\n",
@ -228,7 +252,7 @@
}, },
{ {
"cell_type": "markdown", "cell_type": "markdown",
"id": "romantic-verse", "id": "adjustable-disney",
"metadata": {}, "metadata": {},
"source": [ "source": [
"Jak oszacować $\\hat{P}(t|c)$?\n", "Jak oszacować $\\hat{P}(t|c)$?\n",
@ -238,7 +262,7 @@
}, },
{ {
"cell_type": "markdown", "cell_type": "markdown",
"id": "interracial-today", "id": "associate-variance",
"metadata": {}, "metadata": {},
"source": [ "source": [
"### Wygładzanie\n", "### Wygładzanie\n",
@ -260,12 +284,17 @@
"4. $f(m, 0, 0) = \\frac{1}{m}$\n", "4. $f(m, 0, 0) = \\frac{1}{m}$\n",
"5. $\\lim_{T \\to \\inf} f(m, k, T) = \\frac{k}{T}$\n", "5. $\\lim_{T \\to \\inf} f(m, k, T) = \\frac{k}{T}$\n",
"\n", "\n",
"\n",
"m=2, k1=2, k2=4, T=6, 2/6 => f(2, 2, 6) > 0.333, f(2, 4, 6) < 0.666 \n",
"\n",
"Jaka funkcja spełnia te aksjomaty?\n", "Jaka funkcja spełnia te aksjomaty?\n",
"\n", "\n",
"$$f(m, k, T) = \\frac{k+1}{T+m}$$\n", "$$f(m, k, T) = \\frac{k+1}{T+m}$$\n",
"\n", "\n",
"Jest to wygładzanie +1, albo wygładzanie Laplace'a.\n", "Jest to wygładzanie +1, albo wygładzanie Laplace'a.\n",
"\n", "\n",
"**Pytanie:** Wymyślić jakiś inny przykład funkcji, która będzie spełniała aksjomaty.\n",
"\n",
"\n", "\n",
"\n", "\n",
"\n", "\n",
@ -275,7 +304,7 @@
}, },
{ {
"cell_type": "markdown", "cell_type": "markdown",
"id": "accepting-stockholm", "id": "complimentary-airplane",
"metadata": {}, "metadata": {},
"source": [ "source": [
"Po zastosowaniu do naszego naiwnego klasyfikatora otrzymamy:\n", "Po zastosowaniu do naszego naiwnego klasyfikatora otrzymamy:\n",
@ -283,10 +312,35 @@
"$$\\hat{P}(t|c) = \\frac{\\#(t,c) + 1}{\\sum_i^{|V|} \\#(t_i,c) + |V|}$$" "$$\\hat{P}(t|c) = \\frac{\\#(t,c) + 1}{\\sum_i^{|V|} \\#(t_i,c) + |V|}$$"
] ]
}, },
{
"cell_type": "markdown",
"id": "comprehensive-junior",
"metadata": {},
"source": [
"### Metoda Bernoulliego"
]
},
{
"cell_type": "markdown",
"id": "vocational-spanish",
"metadata": {},
"source": [
"$$P(𝑑|𝑐) \\approx P(U=u_1|c)\\dots P(U=u_{|v|})$$, gdzie $u_i = 1$, $t_i$ pojawił się w dokumencie $d$, 0 - w przeciwnym razie\n",
"\n"
]
},
{
"cell_type": "markdown",
"id": "enabling-manitoba",
"metadata": {},
"source": [
"$\\hat{P}(U_{viagra}=1|c) = \\frac{\\#(viagra,N_c) + 1}{N_c + 2}$"
]
},
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": null, "execution_count": null,
"id": "moral-ceremony", "id": "bearing-execution",
"metadata": {}, "metadata": {},
"outputs": [], "outputs": [],
"source": [] "source": []