0 / 0 / 0
Регистрация: 09.04.2023
Сообщений: 38

Обучение линейного алгоритма бинарной классификации образов с помощью градиентного алгоритма

04.12.2024, 11:52. Показов 362. Ответов 2

Author24 — интернет-сервис помощи студентам
В файле iris_data.py даны обучающие выборки (по вариантам) для обучения
линейного алгоритма бинарной классификации образов:

https://tk.ulstu.ru/files/iris_data.py

Модель линейного алгоритма должна иметь вид:

Миниатюры
Обучение линейного алгоритма бинарной классификации образов с помощью градиентного алгоритма   Обучение линейного алгоритма бинарной классификации образов с помощью градиентного алгоритма  
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
04.12.2024, 11:52
Ответы с готовыми решениями:

Вычисление НОД с помощью бинарного алгоритма и алгоритма Евклида.
Решил заняться программированием, друг посоветовал язык C# и дал задачу: Сделать алгоритм для вычисления НОД с помощью бинарного...

Практическое применение алгоритма классификации
Добрый день, форумчане. Изучать ml начал совсем недавно. Сейчас решаю задачку классификации товаров на Python. Мне необходимо по описанию...

Модификация алгоритма Левенберга-Марквардта в сочетании с методом градиентного спуска
Добрый день! Помогите реализовать алгоритм поиска глобального минимума функции с помощью комбинации методов Левенберга-Марквардта и...

2
0 / 0 / 0
Регистрация: 09.04.2023
Сообщений: 38
04.12.2024, 11:59  [ТС]
В файле iris_data.py даны обучающие выборки (по вариантам) для обучения
линейного алгоритма бинарной классификации образов:

https://tk.ulstu.ru/files/iris_data.py

Модель линейного алгоритма должна иметь вид:

0
0 / 0 / 0
Регистрация: 09.04.2023
Сообщений: 38
04.12.2024, 12:02  [ТС]
Теория представлена на скриншотах. Вопрос: правильно ли это реализовано в коде ниже и почему не отображается разделяющая линия?

Листинг программы:

Python
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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
import numpy as np
import matplotlib.pyplot as plt
 
# Данные
data_x = [
    (5.3, 2.3), (5.7, 2.5), (4.0, 1.0), (5.6, 2.4), (4.5, 1.5),
    (5.4, 2.3), (4.8, 1.8), (4.5, 1.5), (5.1, 1.5), (6.1, 2.3),
    (5.1, 1.9), (4.0, 1.2), (5.2, 2.0), (3.9, 1.4), (4.2, 1.2),
    (4.7, 1.5), (4.8, 1.8), (3.6, 1.3), (4.6, 1.4), (4.5, 1.7),
    (3.0, 1.1), (4.3, 1.3), (4.5, 1.3), (5.5, 2.1), (3.5, 1.0),
    (5.6, 2.2), (4.2, 1.5), (5.8, 1.8), (5.5, 1.8), (5.7, 2.3),
    (6.4, 2.0), (5.0, 1.7), (6.7, 2.0), (4.0, 1.3), (4.4, 1.4),
    (4.5, 1.5), (5.6, 2.4), (5.8, 1.6), (4.6, 1.3), (4.1, 1.3),
    (5.1, 2.3), (5.2, 2.3), (5.6, 1.4), (5.1, 1.8), (4.9, 1.5),
    (6.7, 2.2), (4.4, 1.3), (3.9, 1.1), (6.3, 1.8), (6.0, 1.8),
    (4.5, 1.6), (6.6, 2.1), (4.1, 1.3), (4.5, 1.5), (6.1, 2.5),
    (4.1, 1.0), (4.4, 1.2), (5.4, 2.1), (5.0, 1.5), (5.0, 2.0),
    (4.9, 1.5), (5.9, 2.1), (4.3, 1.3), (4.0, 1.3), (4.9, 2.0),
    (4.9, 1.8), (4.0, 1.3), (5.5, 1.8), (3.7, 1.0), (6.9, 2.3),
    (5.7, 2.1), (5.3, 1.9), (4.4, 1.4), (5.6, 1.8), (3.3, 1.0),
    (4.8, 1.8), (6.0, 2.5), (5.9, 2.3), (4.9, 1.8), (3.3, 1.0),
    (3.9, 1.2), (5.6, 2.1), (5.8, 2.2), (3.8, 1.1), (3.5, 1.0),
    (4.5, 1.5), (5.1, 1.9), (4.7, 1.4), (5.1, 1.6), (5.1, 2.0),
    (4.8, 1.4), (5.0, 1.9), (5.1, 2.4), (4.6, 1.5), (6.1, 1.9),
    (4.7, 1.6), (4.7, 1.4), (4.7, 1.2), (4.2, 1.3), (4.2, 1.3)
]
data_y = [
    1, 1, -1, 1, -1, 1, 1, -1, 1, 1,
    1, -1, 1, -1, -1, -1, -1, -1, -1, 1,
    -1, -1, -1, 1, -1, 1, -1, 1, 1, 1,
    1, -1, 1, -1, -1, -1, 1, 1, -1, -1,
    1, 1, 1, 1, -1, 1, -1, -1, 1, 1,
    -1, 1, -1, -1, 1, -1, -1, 1, 1, 1,
    -1, 1, -1, -1, 1, 1, -1, 1, -1, 1,
    1, 1, -1, 1, -1, 1, 1, 1, 1, -1,
    -1, 1, 1, -1, -1, -1, 1, -1, -1, 1,
    -1, 1, 1, -1, 1, -1, -1, -1, -1, -1
]
 
# Конвертация данных в numpy массивы
X = np.array(data_x)
y = np.array(data_y)
 
# Параметры градиентного спуска
alpha_w0 = 0.1  # Шаг для w0
alpha_w1_w2 = 0.01  # Шаг для w1 и w2
num_iterations = 1000  # Количество итераций
 
# Инициализация весов
weights = np.array([0.0, 0.0, 1.0])  # w = [ω0, ω1, ω2]
 
# Добавление столбца единиц для w0
X_b = np.c_[np.ones(X.shape[0]), X]
 
def loss_function(M):
    return np.exp(-M)
 
def gradient(weights, X, y):
    M = y * (X @ weights)
    loss_grad = -np.exp(-M)[:, np.newaxis] * X
    return np.mean(loss_grad, axis=0)
 
# Градиентный спуск
for _ in range(num_iterations):
    grad = gradient(weights, X_b, y)
    weights[0] -= alpha_w0 * grad[0]  # ω0
    weights[1] -= alpha_w1_w2 * grad[1]  # ω1
    weights[2] -= alpha_w1_w2 * grad[2]  # ω2
 
# Получение разделяющей линии
x_min, x_max = X[:, 0].min() - 1, X[:, 0].max() + 1
x_values = np.linspace(x_min, x_max, 100)  # 100 точек для построения линии
 
# Проверяем weight[2] на близость к нулю перед расчетом y_line
if np.isclose(weights[2], 0):  # Если вес почти 0
    weights[2] += 1e-10  # Добавить маленькое значение, чтобы избежать деления на ноль
 
# Пересчитываем y_line корректно
y_line = -(weights[1] * x_values + weights[0]) / weights[2]
 
# Визуализация результатов
plt.figure(figsize=(10, 6))
plt.scatter(X[y == 1][:, 0], X[y == 1][:, 1], label='Класс 1', color='blue', marker='o')
plt.scatter(X[y == -1][:, 0], X[y == -1][:, 1], label='Класс -1', color='red', marker='x')
 
# Отображаем разделяющую линию
plt.plot(x_values, y_line, color='green', label='Разделяющая линия', linewidth=2)
 
# Настройки графика
plt.xlabel('Признак 1')
plt.ylabel('Признак 2')
plt.title('Результаты обучения линейной модели')
plt.axhline(0, color='black', linewidth=0.5, linestyle='--')  # Горизонтальная линия для оси Y
plt.axvline(0, color='black', linewidth=0.5, linestyle='--')  # Вертикальная линия для оси X
plt.xlim(x_min, x_max)
plt.ylim(X[:, 1].min() - 1, X[:, 1].max() + 1)  # Ограничиваем по оси Y
plt.legend()
plt.grid()
plt.show()
Миниатюры
Обучение линейного алгоритма бинарной классификации образов с помощью градиентного алгоритма   Обучение линейного алгоритма бинарной классификации образов с помощью градиентного алгоритма   Обучение линейного алгоритма бинарной классификации образов с помощью градиентного алгоритма  

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
04.12.2024, 12:02
Помогаю со студенческими работами здесь

Обучение генетического алгоритма
Здравствуйте! Есть набор исторических данных за несколько лет, а также реализация ГА. Подскажите, пожалуйста, как правильно обучать ГА на...

Сделать для градиентного спуска остановку алгоритма при условии. На какой итерации остановится градиентный спуск?
Помогите, пожалуйста решить задачу: Сделайте для градиентного спуска остановку алгоритма, если максимальное из абсолютных значений...

Решение линейного алгоритма
Вычислить значения х и у: x = a*(t^2 - 1) / (t^2 + 1) y = a*t*(t^2 - 1) / (t^2 + 1) где а и t – действительные числа. Затем...

Помощь в реализации линейного алгоритма
Здравствуйте. Очень нужна ваша помощь в решении следующих задач: 1. Написать программу реализации линейного алгоритм приема исходных...

Сравнение многопоточности и линейного алгоритма
Пишу диплом на тему многопоточность в с#. Чтобы добавить "воды" решил сравнить по времени алгоритмы с использованием многопоточности с...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

Новые блоги и статьи
Чем асинхронная логика (схемотехника) лучше тактируемой, как я думаю, что помимо энергоэффективности - ещё и безопасность.
Hrethgir 14.05.2025
Помимо огромного плюса в энергоэффективности, асинхронная логика - тотальный контроль над каждым совершённым тактом, а значит - безусловная безопасность, где безконтрольно не совершится ни одного. . .
Многопоточные приложения на C++
bytestream 14.05.2025
C++ всегда был языком, тесно работающим с железом, и потому особеннно эффективным для многопоточного программирования. Стандарт C++11 произвёл революцию, добавив в язык нативную поддержку потоков,. . .
Stack, Queue и Hashtable в C#
UnmanagedCoder 14.05.2025
Каждый опытный разработчик наверняка сталкивался с ситуацией, когда невинный на первый взгляд List<T> превращался в узкое горлышко всего приложения. Причина проста: универсальность – это прекрасно,. . .
Как использовать OAuth2 со Spring Security в Java
Javaican 14.05.2025
Протокол OAuth2 часто путают с механизмами аутентификации, хотя по сути это протокол авторизации. Представьте, что вместо передачи ключей от всего дома вашему другу, который пришёл полить цветы, вы. . .
Анализ текста на Python с NLTK и Spacy
AI_Generated 14.05.2025
NLTK, старожил в мире обработки естественного языка на Python, содержит богатейшую коллекцию алгоритмов и готовых моделей. Эта библиотека отлично подходит для образовательных целей и. . .
Реализация DI в PHP
Jason-Webb 13.05.2025
Когда я начинал писать свой первый крупный PHP-проект, моя архитектура напоминала запутаный клубок спагетти. Классы создавали другие классы внутри себя, зависимости жостко прописывались в коде, а о. . .
Обработка изображений в реальном времени на C# с OpenCV
stackOverflow 13.05.2025
Объединение библиотеки компьютерного зрения OpenCV с современным языком программирования C# создаёт симбиоз, который открывает доступ к впечатляющему набору возможностей. Ключевое преимущество этого. . .
POCO, ACE, Loki и другие продвинутые C++ библиотеки
NullReferenced 13.05.2025
В C++ разработки существует такое обилие библиотек, что порой кажется, будто ты заблудился в дремучем лесу. И среди этого многообразия POCO (Portable Components) – как маяк для тех, кто ищет. . .
Паттерны проектирования GoF на C#
UnmanagedCoder 13.05.2025
Вы наверняка сталкивались с ситуациями, когда код разрастается до неприличных размеров, а его поддержка становится настоящим испытанием. Именно в такие моменты на помощь приходят паттерны Gang of. . .
Создаем CLI приложение на Python с Prompt Toolkit
py-thonny 13.05.2025
Современные командные интерфейсы давно перестали быть черно-белыми текстовыми программами, которые многие помнят по старым операционным системам. CLI сегодня – это мощные, интуитивные и даже. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru