- 15 января 2017 г.
- Василис Вриниотис
- . 1 Комментарий
Вышла версия Datumbox Framework v0.8.0, в которой реализовано несколько мощных функций! В этой версии представлены новые алгоритмы предварительной обработки, выбора функций и выбора модели, новые мощные механизмы хранения, которые обеспечивают лучший контроль над тем, как модели и кадры данных сохраняются/загружаются, несколько предварительно обученных моделей машинного обучения и множество улучшений памяти и скорости. Загрузите его сейчас с Гитхаб или Центральный репозиторий Maven.
Одной из основных целей версии 0.8.0 было улучшение механизмов хранения фреймворка и сделать обучение на диске доступным для всех поддерживаемых алгоритмов. Новые механизмы хранения обеспечивают лучший контроль над тем, как и когда сохраняются модели. Одно важное изменение заключается в том, что модели не сохраняются автоматически после завершения работы метода fit(), вместо этого необходимо явно вызвать метод save(), указав имя модели. Это позволяет нам не только отказаться от более простых временных алгоритмов, не проходя этап сериализации, но и сохранять/загружать кадры данных:
Configuration configuration = Configuration.getConfiguration(); Dataframe data = ...; //load a dataframe here MaximumEntropy.TrainingParameters params = new MaximumEntropy.TrainingParameters(); MaximumEntropy model = MLBuilder.create(params, getConfiguration()); model.fit(data); model.save("MyModel"); //save the model using the specific name model.close(); data.save("MyData"); //save the data using a specific name data.close(); data = Dataframe.Builder.load("MyData", configuration); //load the data model = MLBuilder.load(MaximumEntropy.class, "MyModel", configuration); //load the model model.predict(data); model.delete(); //delete the model
В настоящее время мы поддерживаем два механизма хранения: механизм InMemory, который очень быстр, поскольку загружает все в память, и механизм MapDB, который работает медленнее, но позволяет проводить обучение на диске. Вы можете контролировать, какой движок вы используете, изменяя ваши datumbox.configuration.properties, или вы можете программно изменять объекты конфигурации. Каждый движок имеет свой собственный файл конфигурации, но опять же вы можете изменить все программно:
Configuration configuration = Configuration.getConfiguration(); //conf from properties file configuration.setStorageConfiguration(new InMemoryConfiguration()); //use In-Memory engine //configuration.setStorageConfiguration(new MapDBConfiguration()); //use MapDB engine
Обратите внимание, что в обоих движках есть настройка каталога, которая определяет, где хранятся модели (inMemoryConfiguration.directory и mapDBConfiguration.directory свойства в конфигурационных файлах). Убедитесь, что вы изменили их, иначе модели будут записаны во временную папку вашей системы. Для получения дополнительной информации о том, как вы структурируете файлы конфигурации, посмотрите на Пример кода проект.
Благодаря новому механизму хранения теперь можно публично делиться предварительно обученные модели которые охватывают области анализа тональности, обнаружения спама, определения языка, классификации тем и всех других моделей, доступных через API Datumbox. Ты можешь сейчас скачать и используйте все предварительно обученные модели в своем проекте, не требуя вызова API и не ограничиваясь количеством ежедневных вызовов. В настоящее время опубликованные модели обучаются с использованием механизма хранения InMemory и поддерживают только английский язык. В будущих выпусках я планирую обеспечить поддержку большего количества языков.
В новой структуре есть несколько изменений в общедоступных методах многих классов (поэтому она не имеет обратной совместимости). Наиболее заметное отличие заключается в способе инициализации моделей. Как мы видели в предыдущем примере кода, модели не создаются напрямую, вместо этого для создания или загрузки модели используется класс MLBuilder. Параметры обучения предоставляются непосредственно разработчику, и их нельзя изменить с помощью установщика.
Еще одно улучшение связано с тем, как мы выполняем выбор модели. В v0.8.0 представлен новый пакет modelselection, который предлагает все необходимые инструменты для проверки и измерения производительности наших моделей. В подпакете метрик мы предоставляем наиболее важные метрики проверки для классификации, кластеризации, регрессии и рекомендации. Обратите внимание, что ValidationMetrics удаляются из каждого отдельного алгоритма и больше не хранятся вместе с моделью. Фреймворк предлагает новый подпакет разделителей, который позволяет разбивать исходный набор данных с использованием разных схем. В настоящее время разделение K-кратности выполняется с использованием класса KFoldSplitter, в то время как разделение набора данных на обучающий и тестовый наборы может быть достигнуто с помощью ShuffleSplitter. Наконец, для быстрой проверки модели фреймворк предлагает класс Validator. Вот как можно выполнить K-кратную перекрестную проверку в паре строк кода:
ClassificationMetrics vm = new Validator<>(ClassificationMetrics.class, configuration) .validate(new KFoldSplitter(k).split(data), new MaximumEntropy.TrainingParameters());
Новый пакет предварительной обработки заменяет старые преобразователи данных и дает лучший контроль над тем, как мы масштабируем и кодируем данные перед алгоритмами машинного обучения. Для масштабирования числовых переменных поддерживаются следующие алгоритмы: MinMaxScaler, StandardScaler, MaxAbsScaler и BinaryScaler. Для кодирования категориальных переменных в логические значения вы можете использовать следующие методы: OneHotEncoder и CornerConstraintsEncoder. Вот как вы можете использовать новые алгоритмы:
StandardScaler numericalScaler = MLBuilder.create( new StandardScaler.TrainingParameters(), configuration ); numericalScaler.fit_transform(trainingData); CornerConstraintsEncoder categoricalEncoder = MLBuilder.create( new CornerConstraintsEncoder.TrainingParameters(), configuration ); categoricalEncoder.fit_transform(trainingData);
Еще одним важным обновлением является тот факт, что был переписан пакет Feature Selection. В настоящее время все алгоритмы выбора признаков сосредоточены на определенных типах данных, что позволяет объединять различные методы в цепочку. В результате классы TextClassifier и Modeler получают список параметров селектора функций, а не только один.
Как упоминалось ранее, все алгоритмы теперь поддерживают обучение на дисках, включая те, которые используют матрицы (единственное исключение — машины опорных векторов). Новый механизм механизма хранения даже позволяет настроить некоторые алгоритмы или кадры данных для хранения в памяти, а другие — на диске. Несколько улучшений скорости были введены в первую очередь из-за нового механизма механизма хранения, а также из-за настройки отдельных алгоритмов, например, в семействе DPMM.
И последнее, но не менее важное: новая версия обновляет все зависимости до их последних версий и удаляет некоторые из них, такие как commons-lang и lp_solve. Commons-lang, который использовался для синтаксического анализа HTML, заменен более быстрой пользовательской реализацией HTMLParser. lp_solve заменяется простым симплексным решателем Java, что означает, что Datumbox больше не требует установки определенных системных библиотек в операционной системе. Более того, lp_solve пришлось убрать, потому что он использует LGPLv2, несовместимую с лицензией Apache 2.0.
Версия 0.8.0 содержит еще несколько новых функций и улучшений фреймворка. Подробный обзор изменений см. Список изменений.
Не забудьте клонировать код Платформа Datumbox v0.8.0 с Github, проверьте Примеры кода и загрузите предварительно обученные модели машинного обучения из Зоопарк Датумбокс. Я с нетерпением жду ваших комментариев и предложений.