You are on page 1of 8

МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ

Національний університет “Львівська політехніка”


Інститут комп’ютерних наук та інформаційних технологій
Кафедра автоматизованих систем управління

Звіт
до лабораторної роботи № 3
«Розв’язок задач передбачення за допомогою нейромереж узагальненої
регресії»
з дисципліни

«Технології обчислювального інтелекту»

Виконав: студент групи КНУС-12


Дем'янів О.М.

Прийняв:
Ткаченко Роман Олексійович

Львів – 2023
Лабораторна робота № 3
Тема роботи: «Розв’язок задач передбачення за допомогою нейромереж
узагальненої регресії»
Мета роботи: Ознайомлення з нейропарадигмою «Нейромережа узагальненої
регресії» та особливостями її застосування для задач передбачення і
розпізнавання.
Порядок виконання роботи
1. Опрацьовано методичні вказівки до даної лабораторної роботи.
2. Опрацьовано додаткові тематичні джерела.
3. Отримано числові дані для тестування мережі з формули 1 для діапазону
змінних від -1 до 1, де крок 0.05.
Y = (1 − 𝑋 2 ) + 2 ∗ (1 − 𝑋)2 (1)
Програмна реалізація для отримання значень (мова Python):
start = -1
end = 1
iterate = 0
iteration = []
xs = []
ys = []
while start <= end:
xs.append(start)
yy = (1-start**2)+2*(1-start)**2
ys.append(round(yy))
start = round(start + 0.05, 3)
iteration.append(iterate)
iterate = round(iterate + 1, 3)

В результаті отримано вибірку, що складається з вхідного значення “x”


та результату функції “y”, загалом 41 значення. Отриману вибірку зображено
у таблиці 1:
Таблиця 1
Вхідні та вихідні дані для побудови вибірки
iteration x y
0 -1 8
1 -0.95 8
2 -0.9 7
3 -0.85 7
4 -0.8 7
5 -0.75 7
6 -0.7 6
Продовження таблиці 1
iteration x y
7 -0.65 6
8 -0.6 6
9 -0.55 6
10 -0.5 5
11 -0.45 5
12 -0.4 5
13 -0.35 5
14 -0.3 4
15 -0.25 4
16 -0.2 4
17 -0.15 4
18 -0.1 3
19 -0.05 3
20 0 3
21 0.05 3
22 0.1 3
23 0.15 2
24 0.2 2
25 0.25 2
26 0.3 2
27 0.35 2
28 0.4 2
29 0.45 1
30 0.5 1
31 0.55 1
32 0.6 1
33 0.65 1
34 0.7 1
35 0.75 1
36 0.8 0
37 0.85 0
38 0.9 0
39 0.95 0
40 1 0

4. Розбито отриману вибірку на навчальну та тестову вибірки.


Навчальна вибірка (26 елементів):
-0.90, 7
-0.85, 7
-0.70, 6
-0.65, 6
-0.50, 5
-0.45, 5
-0.40, 5
-0.35, 5
-0.30, 4
-0.25, 4
-0.20, 4
-0.15, 4
0.00, 3
0.05, 3
0.10, 3
0.15, 2
0.20, 2
0.35, 2
0.50, 1
0.65, 1
0.70, 1
0.85, 0
0.90, 0
0.95, 0
0.80, 0
1.00, 0

Тестова вибірка (15 елементів):


-1.00, 8
-0.95, 8
-0.80, 7
-0.75, 7
-0.60, 6
-0.55, 6
-0.10, 3
-0.05, 3
0.25, 2
0.30, 2
0.55, 1
0.60, 1
0.75, 1
0.40, 2
0.45, 1

5. Опрацьовано алгоритм та здійснено програмну реалізацію алгоритму


функціонування нейромережі GRNN.
Програмна реалізація (мова Python):
import math
predicted_y = []
sigma = 0.1
for i in range(len(test_set)):
ds = []
ws = []
yws = []
print(" ")
print(" ")
print("========================================== " + str(i) + "
==========================================")
example = test_set[i][0]
print("Розраховуємо відстані (di^2)")
for j in range(len(train_set)):
di = pow(round(example-train_set[j][0], 3), 2)
ds.append(round(di, 3))
print(ds)
print(" ")
print("Розрахунок ваг (wi) (функція активації)")
for i in ds:
wi = math.exp(-(i/(2*pow(sigma, 2))))
ws.append(round(wi, 3))
print(ws)
print(" ")
print("Сума wi (Denominator)")
denominator = round(sum(ws), 3)
print(denominator)
print(" ")
print("Сума y*wi (Numerator)")
for i in range(len(ws)):
yw = round( train_set[i][1] * ws[i] , 3)
yws.append(yw)
numerator = round(sum(yws), 3)
print(numerator)
print(" ")
print("Результат: ")
output = round(numerator / denominator, 3)
predicted_y.append(output)
print(output)

6. Побудовано таблицю, яка зображає кожен елемент (test set) тестового


набору з відповідним значенням (стовпець “”) для елемента, яке отримано в
результаті регресії, додатково обчислено та відображено похибку (“delta”).
Результуючі дані зображені у таблиці 2:
Таблиця 2
Результат застосування GRNN
№ test set predicted y delta
0 [-1.00, 8] 6.986 1.014
1 [-0.95, 8] 6.963 1.037
2 [-0.80, 7] 6.601 0.399
3 [-0.75, 7] 6.358 0.642
4 [-0.60, 6] 5.59 0.41
5 [-0.55, 6] 5.308 0.692
6 [-0.10, 3] 3.639 -0.639
7 [-0.05, 3] 3.31 -0.31
8 [0.25, 2] 2.178 -0.178
9 [0.30, 2] 2.025 -0.025
10 [0.55, 1] 1.04 -0.04
11 [0.60, 1] 0.936 0.064
12 [0.75, 1] 0.433 0.567
13 [0.40, 2] 1.621 0.379
14 [0.45, 1] 1.389 -0.389
Робота з похибками
7. Опрацьовано теоретичну складову для MAE, MAPE, RMSE, R-Squared.
8. Встановлено відповідні модулі похибок з бібліотеки scikit-learn для
здійснення перевірки правильності реалізації власного обчислення похибок.
9. Реалізовано обчислення похибки MAE.
Модель з високим значенням MAE означає, що її продуктивність є
нижчою, тоді як нульовий MAE означає ідеальну модель без будь-яких
помилок у її прогнозах.
Програмна реалізація (мова Python):
mae = []
sumA = 0
for i in range(len(deltas)):
sumA = round(sumA + abs(deltas[i]), 3)
mae.append(round(sumA/len(test_set),3))
print(mae)

Значення MAE для моїх даних складає 0.452.


10. Реалізовано обчислення похибки MAPE.
MAPE зазвичай використовується, оскільки його легко інтерпретувати
та легко пояснити. Наприклад, значення MAPE 11,5% означає, що середня
різниця між прогнозованим значенням і фактичним значенням становить
11,5%.
Чим нижче значення MAPE, тим краще модель здатна прогнозувати
значення. Наприклад, модель із MAPE 2% точніша, ніж модель із MAPE 10%.
Програмна реалізація (мова Python):
mape = []
counter = 0
for i in range(len(test_set)):
c = round( (abs(test_set[i][1] - predicted_y[i])) / abs(test_set[i][1]) ,
3)
#print(c)
counter = counter + c
mape.append(round( (counter/len(test_set)) * 100 , 4))
print(mape)

Значення MAPE для моїх даних складає 15.04.


11. Реалізовано обчислення похибки RMSE.
Середньоквадратична помилка (RMSE) – це стандартне відхилення
залишків (помилок передбачення). Залишки є мірою того, наскільки далеко від
лінії регресії знаходяться точки даних; RMSE є мірою того, наскільки
розподілені ці залишки. Іншими словами, він повідомляє вам, наскільки дані
зосереджені навколо лінії найкращого підходу.
Середня квадратична помилка – це міра того, наскільки добре лінія
регресії відповідає точкам даних.
Грубо кажучи, ми можемо інтерпретувати RMSE як далеко прогнозовані
значення у середньому.
Нас цікавить найменше значення RMSE, оскільки це вказує на хорошу
відповідність.
Програмна реалізація (мова Python):
rmse = []
counter_rmse = 0
for i in range(len(test_set)):
counter_rmse = counter_rmse + round( pow(test_set[i][1] -
predicted_y[i], 2) , 3)
rmse.append(round(math.sqrt(counter_rmse/len(test_set)), 3))
print(rmse)

Значення RMSE для моїх даних складає 0.547.


12. Реалізовано обчислення коефіцієнта детермінації (R-Squared).
Вказує, наскільки отримані спостереження підтверджують модель.
Нам потрібен коеф. детермінації найближчий до одиниці.
Програмна реалізація (мова Python):
cof_det = []
y_avg = 0
for i in range(len(test_set)):
y_avg = round(y_avg + test_set[i][1], 3)
y_avg = round(y_avg / len(test_set) , 3)
predicted_y_avg = round( sum(predicted_y)/len(predicted_y), 3 )
numerator_for_coef = 0
denominator_for_coef = 0
for i in range(len(test_set)):
numerator_for_coef = round( numerator_for_coef + pow(test_set[i][1] -
predicted_y[i], 2) , 3)
denominator_for_coef = round( denominator_for_coef + pow(test_set[i][1] -
y_avg, 2) , 3)
cof_det.append(round(1 - (numerator_for_coef/denominator_for_coef),3))
print(cof_det)

Значення R-Squared для моїх даних складає 0.958.


13. Побудовано таблицю для відображення обчислених похибок, де назви
стовпців відповідають назві похибки. Описані дані зображені у таблиці 3:
Таблиця 3
Таблиця похибок
MAE MAPE, % RMSE R-Squared
0.452 15.04 0.547 0.958

Висновок: на цій лабораторній роботі я ознайомився з нейропарадигмою


«Нейромережа узагальненої регресії» та особливостями її застосування для
задач передбачення і розпізнавання.

You might also like