-
Notifications
You must be signed in to change notification settings - Fork 107
Expand file tree
/
Copy pathmachine_learning_16.py
More file actions
35 lines (23 loc) · 1.41 KB
/
machine_learning_16.py
File metadata and controls
35 lines (23 loc) · 1.41 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
# Пример реализации наивного гауссовского байесовского классификатора
import numpy as np
x_train = np.array([[10, 50], [20, 30], [25, 30], [20, 60], [15, 70], [40, 40], [30, 45], [20, 45], [40, 30], [7, 35]])
y_train = np.array([-1, 1, 1, -1, -1, 1, 1, -1, 1, -1])
mw1, ml1 = np.mean(x_train[y_train == 1], axis=0)
mw_1, ml_1 = np.mean(x_train[y_train == -1], axis=0)
# формула для вычисления дисперсии здесь немного другая 1/N*sum(...)
sw1, sl1 = np.var(x_train[y_train == 1], axis=0, ddof=1)
sw_1, sl_1 = np.var(x_train[y_train == -1], axis=0, ddof=1)
print('МО: ', mw1, ml1, mw_1, ml_1)
print('Дисперсии:', sw1, sl1, sw_1, sl_1)
x = [10, 40] # ширина, длина жука
a_1 = lambda x: -np.log(np.sqrt(sw_1) * np.sqrt(sl_1)) - (x[0] - mw_1) ** 2 / (2 * sw_1) - (x[1] - ml_1) ** 2 / (2 * sl_1)
a1 = lambda x: -np.log(np.sqrt(sw1) * np.sqrt(sl1)) - (x[0] - mw1) ** 2 / (2 * sw1) - (x[1] - ml1) ** 2 / (2 * sl1)
y = np.argmax([a_1(x), a1(x)]) * 2 - 1
print('Номер класса (-1 - гусеница, 1 - божья коровка): ', y)
# тестирование по обучающей выборки
pr = []
for x in x_train:
pr.append(np.argmax([a_1(x), a1(x)]) * 2 - 1)
pr = np.array(pr)
Q = np.mean(pr != y_train) # доля ошибок
print(Q)