Skip to content
This repository has been archived by the owner on Oct 20, 2024. It is now read-only.

Course work on programming. Library providing linear regression training + PyQt5 interface to it.

License

Notifications You must be signed in to change notification settings

yiffyrusdev/2020-plhl-graduation

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

6 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

SuperMega ML =)

Have fun!

If you find this code useful, I will be glad if you use it in your GPL3-compatible licensed project.

"Why GPL-3. Author, are you too proud?"

Nope. It's just that I'm fighting for free software, and any possibility that someone else is using my code on a project that people, myself included, will have to pay for is unacceptable. My code is neither perfect nor revolutionary. But the world is crazy, you know

Any help and criticism is greatly appreciated.

Описание

Проект представляет собой мини-библиотеку Python3, предназначенную для решения задач прогнозирования, предсказания и выявления зависимостей методом линейной регрессии. Система способна работать с достаточно большим количеством примеров (1000-100000), имеющих достаточно большое (100-1000) число признаков.

preview

Также реализована функциональная программа с графическим интерфейсом.

Общее представление

Задача линейной регрессии -- задача поиска, выявления произвольной зависимости некоторого показателя от набора признаков на множестве объектов. Это задача аппроксимации неизвестной зависимости некоторой известной гиперплоскостью.

Иными словами, мы можем построить, к примеру, такую прямую, которая максимально точно приблизится к зависимости стоимости квартиры от её площади, что также позволит предсказывать стоимость для тех квартир, для которых известна только прощадь.

Проект предоставляет не только библиотеку, как набор классов, предназначенных для произведения регрессионного анализа, но и графический интерфейс, опозволяющий настроить регрессию, обучить её и визуализировать результаты обучения регрессионной модели -- посмотреть на выявленную зависимость.

По сути, с помощью реализованного проекта можно производить анализ групп людей, строить гиперплоскости "тренда", и многое другое.

Внешности

Функциональная программа с графическим интерфейсом PyQt5 предоставляет возможности конфигурирования регрессии, выбора метода оптимизации и изменения его параметров, выбора данных для анализа, обучения модели и просмотра результата.

chose regression model options train regression model

На картинках выше видно, как регерссионная модель приблизила красную плоскость к синим точкам примеров. В данном случае мы имеем дело с данными, в которых необходимо выявить зависимость одного значения (предикторного) от двух других (признаковых). Видно, что модель хорошо справилась с задачей.

Конкретный пример -- это зависимость количества посещений научно-популяных сообществ людьми от двух искуственных метрик.

Внутренности

В общем и целом о внутреннем устройства проекта отлично расскажут UML-диаграммы.

Процесс взаимодействия пользователя с программой, реализующей возможности разработанной библиотеки, отображён на следующей диаграмме:

user action with regression interface

Внутренная логика (регрессия, оптимизация и яже с ними) представлена двумя модулями: Frontend и Backend, внутри которых реализованы соответствующие классы:

backend classes uml diagram

frontend classed uml diagram

class interaction uml diagram

Математика

В общем и целом алгоритм работы регрессионной модели достаточно прост и изящен: в начале процесса обучения модель только получает входной датасет с $M$ примерами, у каждого из которых $N$ признаков и одно предсказываемое значение. Далее создается случайный вектор $\vec{W}$ размера $N$. Затем в цикле некоторое количество раз выполняется следующая операция:

\vec{W} = \vec{W}-\vec{Fix} * lr

Где \vec{Fix} -- поправочный вектор, а lr -- скорость обучения модели.

Поправочный вектор в данном случае вычисляется с помощью градиента одним из следующих методов:

  • Классический
  • Моменты
  • Стохастический-пакетный
  • Со случайной добавкой

Каждый из этих методов имеет некоторую оптимизацию классического градиента, призванную ускорить сходимость в процессе градиентного спуска.

Ниже приведён процесс вычисления классического градиента:

\vec{Fix} = \nabla(Loss(\vec{W},X,\vec{y}))

Где Loss(\vec{W},X,\vec{y}) -- функция ошибки в данной точке графика ошибки, X -- матрица признаков для некоторого пула примеров, \vec{y} -- вектор ответов для соответствующих примеров матрицы примеров.

Код

С исходным кодом можно ознакомиться в репозитории проекта на GitHub.

Зависимости

Python3

  • Модуль регрессионного анализа (Backend)
    1. Numpy
  • Модуль графического интерфейса (Frontend)
    1. Numpy
    2. Pandas
    3. Matplitlib
    4. PyQt5

About

Course work on programming. Library providing linear regression training + PyQt5 interface to it.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages