ML++
Машинное обучение — обширная и интересная дисциплина, привлекающая внимание специалистов многих областей. К сожалению, программисты и энтузиасты C++ испытывают недостаток поддержки в области машинного обучения. Чтобы заполнить эту пустоту и дать C++ настоящую точку опоры в сфере машинного обучения, была написана эта библиотека. Цель этой библиотеки состоит в том, чтобы она служила связующим звеном между разработчиками низкого уровня и инженерами по машинному обучению.
Установка
Начните с загрузки заголовочных файлов библиотеки ML++. Вы можете сделать это, клонировав репозиторий и извлекая из него каталог MLPP:
git clone https://github.com/novak-99/MLPP
Затем выполните сценарий оболочки «buildSO.sh»:
После этого сохраните исходные файлы ML++ в локальном каталоге и включите их следующим образом:
# include " MLPP/Stat/Stat.hpp " // Including the ML++ statistics module.
int main (){
...
}
Наконец, после завершения создания проекта, скомпилируйте его с помощью g++:
g++ main.cpp /usr/local/lib/MLPP.so --std=c++17
Использование
Обратите внимание, что ML++ использует тип данных std::vector<double>
для эмуляции векторов и тип std::vector<std::vector<double>>
для эмуляции матриц.
Начните с включения соответствующего заголовочного файла по вашему выбору.
# include " MLPP/LinReg/LinReg.hpp "
Затем создайте экземпляр объекта класса. Не забудьте передать входной и выходной набор в качестве параметров.
LinReg model (inputSet, outputSet);
После этого вызовите оптимизатор, который вы хотите использовать. Для итеративных оптимизаторов, таких как градиентный спуск, укажите скорость обучения, номер эпохи и необходимость использования панели пользовательского интерфейса.
model.gradientDescent( 0.001 , 1000 , 0 );
Отлично, теперь вы готовы к тесту! Чтобы протестировать отдельный тестовый экземпляр, используйте следующую функцию:
model.modelTest(testSetInstance);
Это вернет сингулярный прогноз модели для этого примера.
Чтобы протестировать весь набор тестов, используйте следующую функцию:
model.modelSetTest(testSet);
Результатом будут прогнозы модели для всего набора данных.
Содержание библиотеки
- Регрессия
- Линейная регрессия
- Логистическая регрессия
- Софтмакс-регрессия
- Экспоненциальная регрессия
- Пробит-регрессия
- Регрессия CLogLog
- Таньская регрессия
- Глубокие нейронные сети динамического размера
- Возможные функции активации
- Линейный
- сигмовидная
- Софтмакс
- Свиш
- Миш
- СинК
- Софтплюс
- Софтсинг
- Клоглог
- Логит
- Гауссовский CDF
- РЕЛУ
- ГЕЛУ
- Знак
- Шаг единицы измерения
- Синь
- Кош
- Тань
- КШ
- Сеч
- Кот
- Аршин
- Аркош
- Артан
- Аркш
- Аршех
- Аркот
- Возможные алгоритмы оптимизации
- Пакетный градиентный спуск
- Мини-пакетный градиентный спуск
- Стохастический градиентный спуск
- Градиентный спуск с импульсом
- Нестеров «Ускоренный градиент»
- Адаградский оптимизатор
- Оптимизатор Ададельта
- Адам Оптимизатор
- Адамакс Оптимизатор
- Надам Оптимизатор
- АМСГрад Оптимизатор
- Оптимизатор Ньютона-Рафсона 2-го порядка*
- Нормальное уравнение*
*Доступно только для линейной регрессии. - Возможные функции потерь
- МШЭ
- RMSE
- МАЭ
- MBE
- Потеря журнала
- Перекрестная энтропия
- Потеря шарнира
- Потеря Вассерштейна
- Возможные методы регуляризации
- Лассо
- Ридж
- ЭластикНет
- Снижение веса
- Возможные методы инициализации веса
- Униформа
- Ксавье Нормал
- Ксавье Униформа
- Он нормальный
- он униформа
- ЛеКун Нормальный
- ЛеКун Униформа
- Возможные планировщики скорости обучения
- На основе времени
- Основанный на эпохе
- Шаг на основе
- Экспоненциальный
- Готовые нейронные сети
- Многослойный пецептрон
- Автоэнкодер
- Сеть Софтмакс
- Генеративное моделирование
- Табличные генеративно-состязательные сети
- Табличные генеративно-состязательные сети Вассерштейна
- Обработка естественного языка
- Word2Vec (непрерывный набор слов, пропуск грамма)
- Стемминг
- Мешок слов
- ТФИДФ
- Токенизация
- Вспомогательные функции обработки текста
- Компьютерное зрение
- Операция свертки
- Макс., мин., среднее объединение
- Глобальный максимум, минимум, средний пул
- Готовые детекторы функций
- Горизонтальный/вертикальный фильтр Превитта
- Горизонтальный/вертикальный фильтр Собеля
- Горизонтальный/вертикальный фильтр Шарра
- Горизонтальный/вертикальный фильтр Робертса
- Гауссов фильтр
- Угловой детектор Харриса
- Анализ главных компонентов
- Наивные байесовские классификаторы
- Полиномиальный наивный Байес
- Бернулли Наивный Байес
- Гауссово-наивный байесовский метод
- Классификация опорных векторов
- Основная формулировка (цель потери шарнира)
- Двойная формулировка (с помощью множителей Лагранжа)
- K-средние
- k-Ближайшие соседи
- Поиск выбросов (с использованием z-показателей)
- Матричное разложение
- Разложение СВД
- Разложение Холецкого
- Проверка положительной определенности
- QR-разложение
- Численный анализ
- Численное дифференцирование
- Одномерные функции
- Многомерные функции
- Калькулятор векторов якобиана
- Калькулятор матрицы Гессе
- Аппроксиматор функций
- Постоянное приближение
- Линейное приближение
- Квадратичная аппроксимация
- Кубическое приближение
- Решатели дифференциальных уравнений
- Математические преобразования
- Дискретное косинусное преобразование
- Модуль линейной алгебры
- Модуль статистики
- Модуль обработки данных
- Настройка и печать наборов данных
- Доступные наборы данных
- Набор данных о раке молочной железы Висконсина
- Набор данных MNIST
- Набор данных цветов ириса
- Набор данных вина
- Набор данных о жилье Калифорнии
- Набор данных о пожарах и преступности (Чикаго)
- Масштабирование функций
- Средняя нормализация
- Одно горячее представление
- Реверс одного горячего представления
- Поддерживаемые преобразования цветового пространства
- RGB в оттенки серого
- RGB в HSV
- RGB в YCbCr
- RGB в XYZ
- XYZ в RGB
- Утилиты
- Функция TP, FP, TN, FN
- Точность
- Отзывать
- Точность
- Оценка F1
Что в разработке?
ML++, как и большинство фреймворков, динамичен и постоянно меняется. Это особенно важно в мире машинного обучения, поскольку изо дня в день разрабатываются новые алгоритмы и методы. Вот несколько вещей, которые в настоящее время разрабатываются для ML++:
- Сверточные нейронные сети
- Ядра для SVM
- Регрессия опорных векторов
Цитаты
На пути к созданию ML++ мне помогли различные материалы, и я хотел бы здесь отдать должное некоторым из них. Эта статья TutorialsPoint очень помогла при попытке реализовать определитель матрицы, а статья GeeksForGeeks очень помогла при попытке взять сопряженную и обратную матрицу.