неділя, 21 листопада 2021 р.

Створення фрейму із об'єднаних списків, задання імен рядків і стовпчиків

Нехай маємо 5 списків
L1=[1.     , 0.96   , 0.988  , 0.996  , 0.9952 , 0.996  , 0.99912]
L2=[ 0.92   , 0.944  , 0.98   , 0.97   , 0.9888 , 0.9912 , 0.99752]
L3=[0.64   , 0.872  , 0.912  , 0.918  , 0.96   , 0.9716 , 0.99064]
L4=[0.64   , 0.76   , 0.768  , 0.828  , 0.8832 , 0.9176 , 0.96324]
L5=[0.28   , 0.504  , 0.656  , 0.696  , 0.8032 , 0.822  , 0.90848]
Утворимо з них фрейм і задамо імена колонок і рядків
pdd=pd.DataFrame([L1,L2,L3,L4,L5],columns=['100','500','1000','2000','5000','10000','100000'])
pdd.rename({0: 'розмірність 2', 1: 'розмірність 3',2: 'розмірність 4',
3:'розмірність 10',4: 'розмірність 20'}, axis='index',inplace=True)

                 100	500	 1000  2000	5000	10000	100000
----------------------------------------------------------------------
розмірність 2 	1.00	0.960	0.988	0.996	0.9952	0.9960	0.99912
розмірність 3  	0.92	0.944	0.980	0.970	0.9888	0.9912	0.99752
розмірність 4	0.64	0.872	0.912	0.918	0.9600	0.9716	0.99064
розмірність 10	0.64	0.760	0.768	0.828	0.8832	0.9176	0.96324
розмірність 20	0.28	0.504	0.656	0.696	0.8032	0.8220	0.90848

субота, 20 листопада 2021 р.

Наївний класифікатор Баєса

В основі класифікації лежить гіпотеза максимальної ймовірності, тобто вважається, що об'єкт $x=(x_1,x_2,\ldots,x_n)$ належить класу $c^*$ з множини класів $C$ якщо на $c^*$ досягається найбільша апостеріорна (після випробовування) ймовірність $$c^*=\arg \max_{c \in C} P(c_i\mid x).$$ За формулою Баєса $$ P(c \mid x)=\frac{P(c) P(x|c)}{P(x)} $$ Оскільки $P(x)$ константа, то $$ \arg \max_{C} P(c\mid x)=\arg \max_{C} \frac{P(c_i) P(x|c)}{P(x)}=\arg \max_{C} P(c) P(x|c) $$ Далі робиться ''наївне'' припущення що для кожного класу ознаки об'єкту $x$ незалежні між собою, тобто $$ P(x_i | c, x_1, \dots, x_{i-1}, x_{i+1}, \dots, x_n) = P(x_i | с). $$ Звідси $$ P(x|c)= P(x_1,x_2,\ldots,x_n|c)=P(x_1|c) P(x_2|c) \cdots P(x_n|c)=\prod_{i=1}^n P(x_i|c). $$ Тоді $$c^*=\arg \max_{c \in C} P(c) \prod_{i=1}^n P(x_i|c).$$ На практиці, щоб уникнути роботи з малими числами, застосовують логарифмування \begin{gather*} c^*=\arg \max_{c \in C} \log\left( P(c) \prod_{i=1}^n P(x_i|c)\right)=\arg \max_{c \in C} \log P(c) +\sum_{i=1}^n \log P(x_i|c). \end{gather*} Це можна робити оскільки логарифм є монотонно зростаючою функцією і логарифмування не не змінить точку максимуму. Для завершення класифікації нам потрібно знати ймовірності класів $P(c)$ та ймовірності ознак $P(x_i|c).$ Оскільки у нас дискретні величини, то заміно ймовірності частотами. Тоді ймовірність $P(c)$ рівна частоті появи об'єктів з класу $c$ у вибірці, $$ P(c)=P(Y=c)=\frac{1}{|X|}\sum_{i=0}^{|X|}[y_i=c]. $$ Так само підрахунком шукаються $P(x_i|c)$ $$ P(x|c)=\frac{\displaystyle \sum_{i=0}^{|X|}[y_i=c \wedge X_i=x]} {P(c)}. $$

За іншим ( генеративним) підходом для знаходження невідомих ймовірностей $P(x_i|c)$ робиться припущення, що ознаки розподілені за деяким конкретним законом розподілу. Наприклад, в одномірному випадку коли розглядається лише одна ознака, якщо вибрати гаусівський закон розподілу , то $$ P(x|c)=\frac{1}{\sqrt{2\pi \sigma_c}}e^{-\frac{(x-\mu_c)^2}{2\sigma_{k}^2}}, $$ де параметри $\sigma_c, \mu_c$ оцінюються з вибірки.