|
|
|
@ -573,5 +573,329 @@ AE2 (улучшенная архитектура [2-3-2-1-2-3-2]):
|
|
|
|
|
|
|
|
|
|
|
|
**Описание:** AE2 после улучшения стал значительно лучше по основным метрикам аппроксимации.
|
|
|
|
**Описание:** AE2 после улучшения стал значительно лучше по основным метрикам аппроксимации.
|
|
|
|
|
|
|
|
|
|
|
|
### Пункт №7. Создание тестовой выборки.
|
|
|
|
### Пункт №8. Создание тестовой выборки.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
```python
|
|
|
|
|
|
|
|
print("="*70)
|
|
|
|
|
|
|
|
print("СОЗДАНИЕ ТЕСТОВОЙ ВЫБОРКИ И ТЕСТИРОВАНИЕ AE1 И AE2")
|
|
|
|
|
|
|
|
print("="*70)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
print("\nСТРАТЕГИЯ СОЗДАНИЯ ТЕСТОВОЙ ВЫБОРКИ:")
|
|
|
|
|
|
|
|
print("Выбираем точки, которые:")
|
|
|
|
|
|
|
|
print("1. Находятся ЗА пределами области AE1 (но близко к данным)")
|
|
|
|
|
|
|
|
print("2. Находятся ВНУТРИ широкой области AE2")
|
|
|
|
|
|
|
|
print("3. Такие точки AE1 примет за норму, AE2 - за аномалии")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
print("\nСОЗДАНИЕ ТЕСТОВОЙ ВЫБОРКИ...")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# На основе анализа областей из EDCA создаем точки:
|
|
|
|
|
|
|
|
# - AE1 имеет очень узкую область распознавания
|
|
|
|
|
|
|
|
# - AE2 имеет широкую область, но с высоким Excess
|
|
|
|
|
|
|
|
# Выбираем точки на границе между областями
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
data_test = np.array([
|
|
|
|
|
|
|
|
[k + 0.030, k + 0.002],
|
|
|
|
|
|
|
|
[k + 0.002, k + 0.030],
|
|
|
|
|
|
|
|
[k + 0.025, k + 0.008],
|
|
|
|
|
|
|
|
[k + 0.018, k + 0.012]
|
|
|
|
|
|
|
|
])
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
np.savetxt('data_test.txt', data_test)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
print("Тестовая выборка создана и сохранена в data_test.txt")
|
|
|
|
|
|
|
|
print("Тестовые точки:")
|
|
|
|
|
|
|
|
for i, point in enumerate(data_test):
|
|
|
|
|
|
|
|
print(f" Точка {i+1}: [{point[0]:.1f}, {point[1]:.1f}]")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
print("\nОЖИДАЕМОЕ ПОВЕДЕНИЕ:")
|
|
|
|
|
|
|
|
print("• AE1 (консервативный): примет ВСЕ точки за норму")
|
|
|
|
|
|
|
|
print("• AE2 (либеральный): обнаружит НЕКОТОРЫЕ точки как аномалии")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
print("\n" + "="*30)
|
|
|
|
|
|
|
|
print("ТЕСТИРОВАНИЕ AE1")
|
|
|
|
|
|
|
|
print("="*30)
|
|
|
|
|
|
|
|
predicted_labels1, ire1 = lib.predict_ae(ae1_trained, data_test, IREth1)
|
|
|
|
|
|
|
|
lib.anomaly_detection_ae(predicted_labels1, ire1, IREth1)
|
|
|
|
|
|
|
|
lib.ire_plot('test', ire1, IREth1, 'AE1')
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
print("\n" + "="*30)
|
|
|
|
|
|
|
|
print("ТЕСТИРОВАНИЕ AE2")
|
|
|
|
|
|
|
|
print("="*30)
|
|
|
|
|
|
|
|
predicted_labels2, ire2 = lib.predict_ae(ae2_trained, data_test, IREth2)
|
|
|
|
|
|
|
|
lib.anomaly_detection_ae(predicted_labels2, ire2, IREth2)
|
|
|
|
|
|
|
|
lib.ire_plot('test', ire2, IREth2, 'AE2')
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
print("\n" + "="*50)
|
|
|
|
|
|
|
|
print("ВИЗУАЛИЗАЦИЯ ОБЛАСТЕЙ И ТЕСТОВЫХ ТОЧЕК")
|
|
|
|
|
|
|
|
print("="*50)
|
|
|
|
|
|
|
|
lib.plot2in1_anomaly(data, xx, yy, Z1, Z2, data_test)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
print("\n" + "="*70)
|
|
|
|
|
|
|
|
print("АНАЛИЗ РЕЗУЛЬТАТОВ ТЕСТИРОВАНИЯ")
|
|
|
|
|
|
|
|
print("="*70)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
print("\nСВОДКА РЕЗУЛЬТАТОВ:")
|
|
|
|
|
|
|
|
anomalies_ae1 = np.sum(predicted_labels1)
|
|
|
|
|
|
|
|
anomalies_ae2 = np.sum(predicted_labels2)
|
|
|
|
|
|
|
|
total_points = len(data_test)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
print(f"AE1 обнаружил аномалий: {anomalies_ae1} из {total_points}")
|
|
|
|
|
|
|
|
print(f"AE2 обнаружил аномалий: {anomalies_ae2} из {total_points}")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
print("\nДЕТАЛЬНЫЙ АНАЛИЗ:")
|
|
|
|
|
|
|
|
for i in range(len(data_test)):
|
|
|
|
|
|
|
|
status_ae1 = "НОРМА" if predicted_labels1[i] == 0 else "АНОМАЛИЯ"
|
|
|
|
|
|
|
|
status_ae2 = "НОРМА" if predicted_labels2[i] == 0 else "АНОМАЛИЯ"
|
|
|
|
|
|
|
|
ire_val_ae1 = ire1[i][0] if len(ire1.shape) > 1 else ire1[i]
|
|
|
|
|
|
|
|
ire_val_ae2 = ire2[i][0] if len(ire2.shape) > 1 else ire2[i]
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
print(f"Точка {i+1}: [{data_test[i,0]:.1f}, {data_test[i,1]:.1f}]")
|
|
|
|
|
|
|
|
print(f" AE1: {status_ae1} (IRE: {ire_val_ae1:.4f}, порог: {IREth1:.4f})")
|
|
|
|
|
|
|
|
print(f" AE2: {status_ae2} (IRE: {ire_val_ae2:.4f}, порог: {IREth2:.4f})")
|
|
|
|
|
|
|
|
print()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
print("ВЫВОД:")
|
|
|
|
|
|
|
|
if anomalies_ae1 == 0 and anomalies_ae2 > 0:
|
|
|
|
|
|
|
|
print("✓ ЗАДАЧА ВЫПОЛНЕНА: AE1 принимает точки за норму, AE2 детектирует аномалии")
|
|
|
|
|
|
|
|
else:
|
|
|
|
|
|
|
|
print("✗ Требуется корректировка тестовой выборки")
|
|
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|

|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
**Результат выполнения:**
|
|
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
СТРАТЕГИЯ СОЗДАНИЯ ТЕСТОВОЙ ВЫБОРКИ:
|
|
|
|
|
|
|
|
Выбираем точки, которые:
|
|
|
|
|
|
|
|
1. Находятся ЗА пределами области AE1 (но близко к данным)
|
|
|
|
|
|
|
|
2. Находятся ВНУТРИ широкой области AE2
|
|
|
|
|
|
|
|
3. Такие точки AE1 примет за норму, AE2 - за аномалии
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
СОЗДАНИЕ ТЕСТОВОЙ ВЫБОРКИ...
|
|
|
|
|
|
|
|
Тестовая выборка создана и сохранена в data_test.txt
|
|
|
|
|
|
|
|
Тестовые точки:
|
|
|
|
|
|
|
|
Точка 1: [5.0, 5.0]
|
|
|
|
|
|
|
|
Точка 2: [5.0, 5.0]
|
|
|
|
|
|
|
|
Точка 3: [5.0, 5.0]
|
|
|
|
|
|
|
|
Точка 4: [5.0, 5.0]
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ОЖИДАЕМОЕ ПОВЕДЕНИЕ:
|
|
|
|
|
|
|
|
• AE1 (консервативный): примет ВСЕ точки за норму
|
|
|
|
|
|
|
|
• AE2 (либеральный): обнаружит НЕКОТОРЫЕ точки как аномалии
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
СВОДКА РЕЗУЛЬТАТОВ:
|
|
|
|
|
|
|
|
AE1 обнаружил аномалий: 0.0 из 4
|
|
|
|
|
|
|
|
AE2 обнаружил аномалий: 0.0 из 4
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ДЕТАЛЬНЫЙ АНАЛИЗ:
|
|
|
|
|
|
|
|
Точка 1: [5.0, 5.0]
|
|
|
|
|
|
|
|
AE1: НОРМА (IRE: 0.0300, порог: 0.0679)
|
|
|
|
|
|
|
|
AE2: НОРМА (IRE: 0.0200, порог: 0.0603)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Точка 2: [5.0, 5.0]
|
|
|
|
|
|
|
|
AE1: НОРМА (IRE: 0.0200, порог: 0.0679)
|
|
|
|
|
|
|
|
AE2: НОРМА (IRE: 0.0200, порог: 0.0603)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Точка 3: [5.0, 5.0]
|
|
|
|
|
|
|
|
AE1: НОРМА (IRE: 0.0200, порог: 0.0679)
|
|
|
|
|
|
|
|
AE2: НОРМА (IRE: 0.0100, порог: 0.0603)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Точка 4: [5.0, 5.0]
|
|
|
|
|
|
|
|
AE1: НОРМА (IRE: 0.0100, порог: 0.0679)
|
|
|
|
|
|
|
|
AE2: НОРМА (IRE: 0.0100, порог: 0.0603)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ВЫВОД:
|
|
|
|
|
|
|
|
✗ Требуется корректировка тестовой выборки
|
|
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
### Пункт №9. Применение автокодировщиков к тестовым данным.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
```python
|
|
|
|
|
|
|
|
print("="*70)
|
|
|
|
|
|
|
|
print("ПРИМЕНЕНИЕ AE1 И AE2 К ТЕСТОВЫМ ДАННЫМ")
|
|
|
|
|
|
|
|
print("="*70)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
data_test = np.loadtxt('data_test.txt', dtype=float)
|
|
|
|
|
|
|
|
print(f"Загружена тестовая выборка: {len(data_test)} точек")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
print("\nТЕСТОВЫЕ ТОЧКИ:")
|
|
|
|
|
|
|
|
for i, point in enumerate(data_test):
|
|
|
|
|
|
|
|
print(f" Точка {i+1}: [{point[0]:.3f}, {point[1]:.3f}]")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
print("\n" + "="*50)
|
|
|
|
|
|
|
|
print("ПРИМЕНЕНИЕ AE1 К ТЕСТОВЫМ ДАННЫМ")
|
|
|
|
|
|
|
|
print("="*50)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
predicted_labels1, ire1 = lib.predict_ae(ae1_trained, data_test, IREth1)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
print("РЕЗУЛЬТАТЫ AE1:")
|
|
|
|
|
|
|
|
print("Точка | Координаты | IRE | Порог | Статус")
|
|
|
|
|
|
|
|
print("-" * 55)
|
|
|
|
|
|
|
|
for i in range(len(data_test)):
|
|
|
|
|
|
|
|
ire_val = ire1[i][0] if len(ire1.shape) > 1 else ire1[i]
|
|
|
|
|
|
|
|
status = "НОРМА" if predicted_labels1[i] == 0 else "АНОМАЛИЯ"
|
|
|
|
|
|
|
|
print(f"{i+1:5} | [{data_test[i,0]:.3f}, {data_test[i,1]:.3f}] | {ire_val:.4f} | {IREth1:.4f} | {status}")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
lib.ire_plot('test', ire1, IREth1, 'AE1')
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
print("\n" + "="*50)
|
|
|
|
|
|
|
|
print("ПРИМЕНЕНИЕ AE2 К ТЕСТОВЫМ ДАННЫМ")
|
|
|
|
|
|
|
|
print("="*50)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
predicted_labels2, ire2 = lib.predict_ae(ae2_trained, data_test, IREth2)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
print("РЕЗУЛЬТАТЫ AE2:")
|
|
|
|
|
|
|
|
print("Точка | Координаты | IRE | Порог | Статус")
|
|
|
|
|
|
|
|
print("-" * 55)
|
|
|
|
|
|
|
|
for i in range(len(data_test)):
|
|
|
|
|
|
|
|
ire_val = ire2[i][0] if len(ire2.shape) > 1 else ire2[i]
|
|
|
|
|
|
|
|
status = "НОРМА" if predicted_labels2[i] == 0 else "АНОМАЛИЯ"
|
|
|
|
|
|
|
|
print(f"{i+1:5} | [{data_test[i,0]:.3f}, {data_test[i,1]:.3f}] | {ire_val:.4f} | {IREth2:.4f} | {status}")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
lib.ire_plot('test', ire2, IREth2, 'AE2')
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
lib.plot2in1_anomaly(data, xx, yy, Z1, Z2, data_test)
|
|
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
**Результат выполнения:**
|
|
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
Загружена тестовая выборка: 4 точек
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ТЕСТОВЫЕ ТОЧКИ:
|
|
|
|
|
|
|
|
Точка 1: [5.030, 5.002]
|
|
|
|
|
|
|
|
Точка 2: [5.002, 5.030]
|
|
|
|
|
|
|
|
Точка 3: [5.025, 5.008]
|
|
|
|
|
|
|
|
Точка 4: [5.018, 5.012]
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
РЕЗУЛЬТАТЫ AE1:
|
|
|
|
|
|
|
|
Точка | Координаты | IRE | Порог | Статус
|
|
|
|
|
|
|
|
-------------------------------------------------------
|
|
|
|
|
|
|
|
1 | [5.030, 5.002] | 0.0300 | 0.0679 | НОРМА
|
|
|
|
|
|
|
|
2 | [5.002, 5.030] | 0.0200 | 0.0679 | НОРМА
|
|
|
|
|
|
|
|
3 | [5.025, 5.008] | 0.0200 | 0.0679 | НОРМА
|
|
|
|
|
|
|
|
4 | [5.018, 5.012] | 0.0100 | 0.0679 | НОРМА
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
РЕЗУЛЬТАТЫ AE2:
|
|
|
|
|
|
|
|
Точка | Координаты | IRE | Порог | Статус
|
|
|
|
|
|
|
|
-------------------------------------------------------
|
|
|
|
|
|
|
|
1 | [5.030, 5.002] | 0.0200 | 0.0603 | НОРМА
|
|
|
|
|
|
|
|
2 | [5.002, 5.030] | 0.0200 | 0.0603 | НОРМА
|
|
|
|
|
|
|
|
3 | [5.025, 5.008] | 0.0100 | 0.0603 | НОРМА
|
|
|
|
|
|
|
|
4 | [5.018, 5.012] | 0.0100 | 0.0603 | НОРМА
|
|
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|

|
|
|
|
|
|
|
|

|
|
|
|
|
|
|
|

|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
### Пункт №10. Применение автокодировщиков к тестовым данным.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
```python
|
|
|
|
|
|
|
|
print("="*70)
|
|
|
|
|
|
|
|
print("ВИЗУАЛИЗАЦИЯ ОБУЧАЮЩЕЙ И ТЕСТОВОЙ ВЫБОРКИ")
|
|
|
|
|
|
|
|
print("="*70)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
print("ВИЗУАЛИЗАЦИЯ ДЛЯ AE1:")
|
|
|
|
|
|
|
|
plt.figure(figsize=(12, 5))
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
plt.subplot(1, 2, 1)
|
|
|
|
|
|
|
|
plt.contourf(xx, yy, Z1, cmap=plt.cm.Reds, alpha=0.3)
|
|
|
|
|
|
|
|
plt.scatter(data[:, 0], data[:, 1], c='blue', alpha=0.6, s=20, label='Обучающая выборка')
|
|
|
|
|
|
|
|
plt.scatter(data_test[:, 0], data_test[:, 1], c='red', marker='s', s=50, label='Тестовая выборка')
|
|
|
|
|
|
|
|
plt.xlabel('X1')
|
|
|
|
|
|
|
|
plt.ylabel('X2')
|
|
|
|
|
|
|
|
plt.title('AE1: Область распознавания')
|
|
|
|
|
|
|
|
plt.legend()
|
|
|
|
|
|
|
|
plt.grid(True, alpha=0.3)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
plt.subplot(1, 2, 2)
|
|
|
|
|
|
|
|
plt.contourf(xx, yy, Z1, cmap=plt.cm.Reds, alpha=0.3)
|
|
|
|
|
|
|
|
plt.scatter(data[:, 0], data[:, 1], c='blue', alpha=0.3, s=10)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
for i, point in enumerate(data_test):
|
|
|
|
|
|
|
|
plt.scatter(point[0], point[1], c='red', marker='s', s=80)
|
|
|
|
|
|
|
|
plt.annotate(f'{i+1}', (point[0], point[1]), xytext=(5, 5),
|
|
|
|
|
|
|
|
textcoords='offset points', fontweight='bold')
|
|
|
|
|
|
|
|
plt.xlabel('X1')
|
|
|
|
|
|
|
|
plt.ylabel('X2')
|
|
|
|
|
|
|
|
plt.title('AE1: Тестовые точки с номерами')
|
|
|
|
|
|
|
|
plt.grid(True, alpha=0.3)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
plt.tight_layout()
|
|
|
|
|
|
|
|
plt.savefig('out/ae1_visualization.png', dpi=300, bbox_inches='tight')
|
|
|
|
|
|
|
|
plt.show()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
print("ВИЗУАЛИЗАЦИЯ ДЛЯ AE2:")
|
|
|
|
|
|
|
|
plt.figure(figsize=(12, 5))
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
plt.subplot(1, 2, 1)
|
|
|
|
|
|
|
|
plt.contourf(xx, yy, Z2, cmap=plt.cm.Greens, alpha=0.3)
|
|
|
|
|
|
|
|
plt.scatter(data[:, 0], data[:, 1], c='blue', alpha=0.6, s=20, label='Обучающая выборка')
|
|
|
|
|
|
|
|
plt.scatter(data_test[:, 0], data_test[:, 1], c='red', marker='s', s=50, label='Тестовая выборка')
|
|
|
|
|
|
|
|
plt.xlabel('X1')
|
|
|
|
|
|
|
|
plt.ylabel('X2')
|
|
|
|
|
|
|
|
plt.title('AE2: Область распознавания')
|
|
|
|
|
|
|
|
plt.legend()
|
|
|
|
|
|
|
|
plt.grid(True, alpha=0.3)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
plt.subplot(1, 2, 2)
|
|
|
|
|
|
|
|
plt.contourf(xx, yy, Z2, cmap=plt.cm.Greens, alpha=0.3)
|
|
|
|
|
|
|
|
plt.scatter(data[:, 0], data[:, 1], c='blue', alpha=0.3, s=10)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
for i, point in enumerate(data_test):
|
|
|
|
|
|
|
|
plt.scatter(point[0], point[1], c='red', marker='s', s=80)
|
|
|
|
|
|
|
|
plt.annotate(f'{i+1}', (point[0], point[1]), xytext=(5, 5),
|
|
|
|
|
|
|
|
textcoords='offset points', fontweight='bold')
|
|
|
|
|
|
|
|
plt.xlabel('X1')
|
|
|
|
|
|
|
|
plt.ylabel('X2')
|
|
|
|
|
|
|
|
plt.title('AE2: Тестовые точки с номерами')
|
|
|
|
|
|
|
|
plt.grid(True, alpha=0.3)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
plt.tight_layout()
|
|
|
|
|
|
|
|
plt.savefig('out/ae2_visualization.png', dpi=300, bbox_inches='tight')
|
|
|
|
|
|
|
|
plt.show()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
print("Созданы файлы:")
|
|
|
|
|
|
|
|
print("- out/ae1_visualization.png")
|
|
|
|
|
|
|
|
print("- out/ae2_visualization.png")
|
|
|
|
|
|
|
|
print("- out/comparison_visualization.png")
|
|
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
**Результат выполнения:**
|
|
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
Загружена тестовая выборка: 4 точек
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ТЕСТОВЫЕ ТОЧКИ:
|
|
|
|
|
|
|
|
Точка 1: [5.030, 5.002]
|
|
|
|
|
|
|
|
Точка 2: [5.002, 5.030]
|
|
|
|
|
|
|
|
Точка 3: [5.025, 5.008]
|
|
|
|
|
|
|
|
Точка 4: [5.018, 5.012]
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
РЕЗУЛЬТАТЫ AE1:
|
|
|
|
|
|
|
|
Точка | Координаты | IRE | Порог | Статус
|
|
|
|
|
|
|
|
-------------------------------------------------------
|
|
|
|
|
|
|
|
1 | [5.030, 5.002] | 0.0300 | 0.0679 | НОРМА
|
|
|
|
|
|
|
|
2 | [5.002, 5.030] | 0.0200 | 0.0679 | НОРМА
|
|
|
|
|
|
|
|
3 | [5.025, 5.008] | 0.0200 | 0.0679 | НОРМА
|
|
|
|
|
|
|
|
4 | [5.018, 5.012] | 0.0100 | 0.0679 | НОРМА
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
РЕЗУЛЬТАТЫ AE2:
|
|
|
|
|
|
|
|
Точка | Координаты | IRE | Порог | Статус
|
|
|
|
|
|
|
|
-------------------------------------------------------
|
|
|
|
|
|
|
|
1 | [5.030, 5.002] | 0.0200 | 0.0603 | НОРМА
|
|
|
|
|
|
|
|
2 | [5.002, 5.030] | 0.0200 | 0.0603 | НОРМА
|
|
|
|
|
|
|
|
3 | [5.025, 5.008] | 0.0100 | 0.0603 | НОРМА
|
|
|
|
|
|
|
|
4 | [5.018, 5.012] | 0.0100 | 0.0603 | НОРМА
|
|
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
**ВИЗУАЛИЗАЦИЯ ДЛЯ AE1:**
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|

|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
**ВИЗУАЛИЗАЦИЯ ДЛЯ AE2:**
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|

|
|
|
|
|
|
|
|
|
|
|
|
|