Мы рады объявить о выпуске ML.NET 0.7 — последней версии кросс-платформенной и open source системы машинного обучения для разработчиков .NET (ML.NET 0.1 был выпущен на //Build 2018). Этот релиз направлен на расширение функциональности платформы. Подробнее под катом!
![](https://habrastorage.org/r/w780q1/webt/zc/tp/tr/zctptrt4nt-z0sn07am6i1hgv3m.jpeg)
![](https://habrastorage.org/r/w1560/webt/qu/qy/na/quqynaxfbkdyd1mbv-bfaojwnae.png)
Рекомендательные системы позволяют создавать персонифицированные рекомендации для продуктов в каталоге, песен, фильмов и т.д. Мы улучшили поддержку создания систем рекомендаций в ML.NET, добавив Matrix factorization (MF). Это — популярный подход к рекомендациям, когда можно получить данные о том, как пользователи оценивают те или иные элементы в каталоге. Например, вы можете знать, как пользователи оценивают некоторые фильмы. Благодаря этим знаниям можно порекомендовать другие фильмы, которые они, вероятно, тоже захотят посмотреть.
Мы добавили MF в ML.NET, потому что он часто значительно быстрее, чем Field-Aware Factorization Machines (которые мы добавили в ML.NET 0.3), и он может поддерживать рейтинги, которые являются численными (например, 1-5 звезд) вместо бинарных значений («Понравилось» или «не понравилось»). Несмотря на то, что мы добавили MF, вы все равно можете использовать FFM, если хотите использовать другую информацию за пределами рейтинга, который пользователь присваивает элементу (например, жанр фильма, дата выпуска фильма, профиль пользователя). Более подробное обсуждение различий можно найти здесь.
Пример использования MF можно найти здесь. Этот пример является общим, но вы можете себе представить, что строки матрицы соответствуют пользователям, столбцы матрицы соответствуют фильмам, а значения матриц соответствуют рейтингам. Эта матрица довольно скудна, поскольку пользователи оценивали только небольшое подмножество каталога.
MF ML.NET использует LIBMF.
![](https://habrastorage.org/r/w1560/webt/7j/sb/is/7jsbisymnxf9jirf1tbqdjxkrwi.png)
Обнаружение аномалий позволяет идентифицировать необычные значения или события. Он используется в таких сценариях, как обнаружение мошенничества (выявление подозрительных транзакций по кредитным картам) и мониторинг сервера (выявление необычной активности).
ML.NET 0.7 позволяет обнаруживать два типа аномального поведения:
Эти аномалии могут быть обнаружены на двух типах данных с использованием разных компонентов ML.NET:
Пример кода с использованием обнаружения аномалии в ML.NET можно найти здесь.
![](https://habrastorage.org/r/w1560/webt/fk/g_/-p/fkg_-pjmhp-m31teyh0t5stqs2c.png)
ML.NET предлагает множество преобразований данных (например, обработку текста, изображений, категориальных функций и т.д.). Однако для некоторых случаев использования требуются специфичные преобразования. Теперь мы добавили поддержку пользовательских преобразований, чтобы вы могли легко включать кастомные решения.
CustomMappingEstimator позволяет вам создавать собственные методы обработки данных и вносить их в pipeline ML.NET. Вот что он будет выглядеть в pipeline:
Ниже приведено определение того, что будет делать этот кастомный маппинг. В этом примере мы преобразуем текстовую метку («spam» или «ham») в логическую метку (true или false).
Более полный пример CustomMappingEstimator можно найти здесь.
![](https://habrastorage.org/r/w1560/webt/bn/wt/sn/bnwtsnmbecdp580xknxi2gsqelm.png)
В этом выпуске ML.NET теперь вы можете использовать модели машинного обучения на устройствах с архитектурой x86/32-бит (только для Windows). Ранее ML.NET ограничивался устройствами x64 (Windows, Linux и Mac). Обратите внимание, что некоторые компоненты, основанные на внешних связях (например, TensorFlow), недоступны в x86-Windows.
![](https://habrastorage.org/r/w1560/webt/sv/ir/lt/svirlta7q_oij4hg4mxgpvevbps.png)
NimbusML предоставляет экспериментальные привязки Python для ML.NET. Мы видели обратную связь от внешнего сообщества и внутренних команд разработки относительно использования нескольких языков программирования. Мы хотели, чтобы как можно больше людей могли использовать ML.NET.
ML.NET не только позволяет дата-сайнтистам использовать модели машинного обучения в Python (с компонентами, которые также могут использоваться в scikit-learn pipelines), но также позволяет сохранять модели, которые можно легко использовать в приложениях .NET через ML.NET (подробнее см. здесь).
В ML.NET 0.6 появился новый набор API для ML.NET, который обеспечивает повышенную гибкость. Эти API в версии 0.7 и последующих версий все еще развиваются, и мы хотели бы получить ваши отзывы для того чтобы сделать систему еще лучше.
Хотите принять участие? Оставьте отзыв на ML.NET GitHub!
![](https://habrastorage.org/r/w1560/webt/yu/bn/sf/yubnsf6xpcke2hqjtphiinbdilu.png)
Если вы еще этого не сделали, скачайте ML.NET здесь. А также исследуйте другие полезные ресурсы:
Ребята из AI-Community сейчас проводят онлайн-чемпионат по Data Science с призовым фондом в 600 000 рублей. Присоединяйтесь, кейс может вас заинтересовать.
![](https://habrastorage.org/webt/zc/tp/tr/zctptrt4nt-z0sn07am6i1hgv3m.jpeg)
Поддержка системы рекомендаций с Matrix Factorization
![](https://habrastorage.org/webt/qu/qy/na/quqynaxfbkdyd1mbv-bfaojwnae.png)
Рекомендательные системы позволяют создавать персонифицированные рекомендации для продуктов в каталоге, песен, фильмов и т.д. Мы улучшили поддержку создания систем рекомендаций в ML.NET, добавив Matrix factorization (MF). Это — популярный подход к рекомендациям, когда можно получить данные о том, как пользователи оценивают те или иные элементы в каталоге. Например, вы можете знать, как пользователи оценивают некоторые фильмы. Благодаря этим знаниям можно порекомендовать другие фильмы, которые они, вероятно, тоже захотят посмотреть.
Мы добавили MF в ML.NET, потому что он часто значительно быстрее, чем Field-Aware Factorization Machines (которые мы добавили в ML.NET 0.3), и он может поддерживать рейтинги, которые являются численными (например, 1-5 звезд) вместо бинарных значений («Понравилось» или «не понравилось»). Несмотря на то, что мы добавили MF, вы все равно можете использовать FFM, если хотите использовать другую информацию за пределами рейтинга, который пользователь присваивает элементу (например, жанр фильма, дата выпуска фильма, профиль пользователя). Более подробное обсуждение различий можно найти здесь.
Пример использования MF можно найти здесь. Этот пример является общим, но вы можете себе представить, что строки матрицы соответствуют пользователям, столбцы матрицы соответствуют фильмам, а значения матриц соответствуют рейтингам. Эта матрица довольно скудна, поскольку пользователи оценивали только небольшое подмножество каталога.
MF ML.NET использует LIBMF.
Сценарии обнаружения аномалий — обнаружение необычных событий
![](https://habrastorage.org/webt/7j/sb/is/7jsbisymnxf9jirf1tbqdjxkrwi.png)
Обнаружение аномалий позволяет идентифицировать необычные значения или события. Он используется в таких сценариях, как обнаружение мошенничества (выявление подозрительных транзакций по кредитным картам) и мониторинг сервера (выявление необычной активности).
ML.NET 0.7 позволяет обнаруживать два типа аномального поведения:
- Обнаружение спайков: Spikes приписываются внезапным временным всплескам в значениях входных данных. Это могут быть выбросы из-за сбоев в работе, кибер-атак, вирусного веб-контента и т.д.
- Change point detection: change-поинтами отмечают начало постоянных отклонений в поведении данных.
Эти аномалии могут быть обнаружены на двух типах данных с использованием разных компонентов ML.NET:
- IidSpikeDetector и IidChangePointDetector используются для данных, взятых из одного стационарного распределения (каждая точка данных не зависит от предыдущей).
- SsaSpikeDetector и SsaChangePointDetector используются для данных, имеющих компоненты сезонности/тренда (возможно, упорядоченных по времени, например, продаж продукта).
Пример кода с использованием обнаружения аномалии в ML.NET можно найти здесь.
Улучшенная настраиваемость ML.NET pipelines
![](https://habrastorage.org/webt/fk/g_/-p/fkg_-pjmhp-m31teyh0t5stqs2c.png)
ML.NET предлагает множество преобразований данных (например, обработку текста, изображений, категориальных функций и т.д.). Однако для некоторых случаев использования требуются специфичные преобразования. Теперь мы добавили поддержку пользовательских преобразований, чтобы вы могли легко включать кастомные решения.
CustomMappingEstimator позволяет вам создавать собственные методы обработки данных и вносить их в pipeline ML.NET. Вот что он будет выглядеть в pipeline:
var estimator = mlContext.Transforms.CustomMapping<MyInput, MyOutput>(MyLambda.MyAction, "MyLambda")
.Append(...)
.Append(...)
Ниже приведено определение того, что будет делать этот кастомный маппинг. В этом примере мы преобразуем текстовую метку («spam» или «ham») в логическую метку (true или false).
public class MyInput
{
public string Label { get; set; }
}
public class MyOutput
{
public bool Label { get; set; }
}
public class MyLambda
{
[Export("MyLambda")]
public ITransformer MyTransformer => ML.Transforms.CustomMappingTransformer<MyInput, MyOutput>(MyAction, "MyLambda");
[Import]
public MLContext ML { get; set; }
public static void MyAction(MyInput input, MyOutput output)
{
output.Label= input.Label == "spam" ? true : false;
}
}
Более полный пример CustomMappingEstimator можно найти здесь.
Поддержка x86 в дополнение к x64
![](https://habrastorage.org/webt/bn/wt/sn/bnwtsnmbecdp580xknxi2gsqelm.png)
В этом выпуске ML.NET теперь вы можете использовать модели машинного обучения на устройствах с архитектурой x86/32-бит (только для Windows). Ранее ML.NET ограничивался устройствами x64 (Windows, Linux и Mac). Обратите внимание, что некоторые компоненты, основанные на внешних связях (например, TensorFlow), недоступны в x86-Windows.
NimbusML — экспериментальное связывание Python для ML.NET
![](https://habrastorage.org/webt/sv/ir/lt/svirlta7q_oij4hg4mxgpvevbps.png)
NimbusML предоставляет экспериментальные привязки Python для ML.NET. Мы видели обратную связь от внешнего сообщества и внутренних команд разработки относительно использования нескольких языков программирования. Мы хотели, чтобы как можно больше людей могли использовать ML.NET.
ML.NET не только позволяет дата-сайнтистам использовать модели машинного обучения в Python (с компонентами, которые также могут использоваться в scikit-learn pipelines), но также позволяет сохранять модели, которые можно легко использовать в приложениях .NET через ML.NET (подробнее см. здесь).
Если вы его пропустили: отзыв о новом API
В ML.NET 0.6 появился новый набор API для ML.NET, который обеспечивает повышенную гибкость. Эти API в версии 0.7 и последующих версий все еще развиваются, и мы хотели бы получить ваши отзывы для того чтобы сделать систему еще лучше.
Хотите принять участие? Оставьте отзыв на ML.NET GitHub!
Дополнительные ресурсы
- Здесь представлены самые важные концепции ML.NET для понимания нового API.
- Здесь можно найти руководство, в котором показано, как использовать эти API для различных существующих и новых сценариев.
- Ссылка на API ML.NET со всей документацией по API приведена здесь.
Начинайте!
![](https://habrastorage.org/webt/yu/bn/sf/yubnsf6xpcke2hqjtphiinbdilu.png)
Если вы еще этого не сделали, скачайте ML.NET здесь. А также исследуйте другие полезные ресурсы:
- Учебники и гайды на Microsoft Docs
- Примеры кода
Минутка рекламы
Ребята из AI-Community сейчас проводят онлайн-чемпионат по Data Science с призовым фондом в 600 000 рублей. Присоединяйтесь, кейс может вас заинтересовать.