Можно ли извлечь формулы обученных моделей машинного обучения на Python?

В моем проекте я должен использовать классификаторы для предсказания одного из 8 классов в зависимости от 6 входных значений. Мне нужно сравнить все классы контролируемого обучения на устройстве, на котором выполняется только код C++. Поэтому я использую python для обучения / подгонки моделей машинного обучения, но мне нужно выяснить окончательную формулу для каждого классификатора, чтобы запустить его на C++. Есть ли способ получить эти формулы / код из модели?

Используемые алгоритмы машинного обучения:

  1. Машины опорных векторов
  2. Наивный байесовский
  3. Линейная регрессия
  4. Линейный дискриминантный анализ
  5. Деревья решений
  6. Алгоритм K-ближайшего соседа
  7. Логистическая регрессия
  8. Нейронные сети
  9. Алгоритмы повышения градиента
  10. Случайный лес.

Какой фреймворк машинного обучения вы используете в Python? Вы могли бы фактически запустить модель как есть на устройстве, экспортировав ее и загрузив в исполняемый файл C++.

Frank 27.05.2018 18:44

Фреймворк машинного обучения - это scikit learn. на самом деле я хочу запустить его на устройстве со сверхнизким энергопотреблением. поэтому мне нужно использовать саму формулу и, возможно, ее оптимизировать.

Majd Addin 27.05.2018 18:47

Я не думаю, что у scikit learn есть хороший механизм для экспорта на компилируемый язык. Было бы намного лучше использовать что-то вроде TensorFlow, которое позволит вам экспортировать модели и загружать их с помощью C++ API. повторная реализация всех этих алгоритмов для разумной работы на устройстве с низким энергопотреблением потребует много работы.

Frank 27.05.2018 18:55

ты прав. но я думаю, что использование классификатора (это своего рода формула) не должно быть таким сложным. например, формула нейронной сети: сумма + = веса * входы (для 2 или 3 слоев на каждом узле). Я имею в виду, что сама реализация должна быть простой, независимо от времени вычислений. (Спасибо за ваши комментарии)

Majd Addin 27.05.2018 19:17
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
2
4
1 381
1

Ответы 1

Не существует общего механизма для преобразование модели машинного обучения Python для кода C++, поскольку код Python требует полной реализации во время выполнения.

Мне также нужно было запускать классификаторы на маломощных встраиваемых устройствах / микроконтроллерах. И начали реализовывать некоторые из перечисленных вами алгоритмов на языке C, дружественном к встроенным, на основе моделей, обученных в scikit-learn.

  • Наивный Байес: залив
  • Случайные леса / деревья решений: Emtrees. В конце концов, также деревья с градиентным усилением (XGBoost, LightGBM).

Доступны и другие проекты классификаторов, удобные для встраивания:

  • Нейронные сети. uTensor позволяет запускать модели TensorFlow Lite на ARM Cortex с использованием CMSIS-NN.
  • K-ближайший сосед (kNN). Классический кНН очень просто реализовать. Но поскольку в нем хранятся все обучающие образцы, размер модели обычно проблематичен для встроенных устройств. Было предложено много альтернатив, например ProtoNN. Реализован в ELL

Для других алгоритмов вы можете найти различные реализации C / C++, но большинство из них предназначены для использования с операционной системой (например, Linux). В зависимости от того, насколько ограничено ваше устройство, мощь можно использовать повторно. Затем вам нужно только реализовать экспорт модели из Python и импорт модели в библиотеку C++.

Другие вопросы по теме