Машинное обучение для разработчиков Java, часть 1. Алгоритмы машинного обучения

Беспилотные автомобили, программное обеспечение для распознавания лиц и динамики с голосовым управлением - все это построено на технологиях и фреймворках машинного обучения - и это только первая волна. В течение следующего десятилетия новое поколение продуктов изменит наш мир, положив начало новым подходам к разработке программного обеспечения, а также к приложениям и продуктам, которые мы создаем и используем.

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

Эта статья поможет вам начать работу. Вы начнете с первого впечатления о том, как работает машинное обучение, а затем получите краткое руководство по внедрению и обучению алгоритма машинного обучения. После изучения внутреннего устройства алгоритма обучения и функций, которые вы можете использовать для обучения, оценки и выбора наиболее подходящей функции прогнозирования, вы получите обзор использования инфраструктуры JVM Weka для создания решений для машинного обучения. В этой статье основное внимание уделяется машинному обучению с учителем, которое является наиболее распространенным подходом к разработке интеллектуальных приложений.

Машинное обучение для разработчиков Java, часть 2

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

Машинное обучение и искусственный интеллект

Машинное обучение развилось из области искусственного интеллекта, который стремится создавать машины, способные имитировать человеческий интеллект. Хотя машинное обучение - новая тенденция в информатике, искусственный интеллект - не новая научная область. Тест Тьюринга, разработанный Аланом Тьюрингом в начале 1950-х годов, был одним из первых тестов, созданных для определения того, может ли компьютер обладать реальным интеллектом. Согласно тесту Тьюринга, компьютер может доказать человеческий интеллект, обманув человека, заставив его поверить, что он тоже человек.

Многие современные подходы к машинному обучению основаны на концепциях, которым уже несколько десятилетий. Что изменилось за последнее десятилетие, так это то, что компьютеры (и распределенные вычислительные платформы) теперь обладают вычислительной мощностью, необходимой для алгоритмов машинного обучения. Большинство алгоритмов машинного обучения требуют обработки огромного количества умножений матриц и других математических операций. Вычислительной технологии для управления этими вычислениями не существовало даже два десятилетия назад, но она существует сегодня.

Машинное обучение позволяет программам выполнять процессы повышения качества и расширять свои возможности без участия человека. Программа, созданная с помощью машинного обучения, может обновлять или расширять собственный код.

Обучение с учителем и обучение без учителя

Обучение с учителем и обучение без учителя - самые популярные подходы к машинному обучению. Оба требуют загрузки в машину огромного количества записей данных для корреляции и изучения. Такие записи собранных данных обычно называют векторами признаков. В случае отдельного дома вектор признаков может состоять из таких характеристик, как общий размер дома, количество комнат и возраст дома.

При обучении с учителем алгоритм машинного обучения обучается правильно отвечать на вопросы, связанные с векторами признаков. Для обучения алгоритма в машину подается набор векторов признаков и соответствующая метка. Ярлыки обычно создаются человеком-аннотатором и представляют собой правильный «ответ» на заданный вопрос. Алгоритм обучения анализирует векторы признаков и их правильные метки, чтобы найти внутренние структуры и отношения между ними. Таким образом, машина учится правильно отвечать на запросы.

Например, интеллектуальное приложение по недвижимости может быть обучено векторам характеристик, включая размер, количество комнат и соответствующий возраст для ряда домов. На основе этих факторов специалист по маркировке маркирует каждый дом правильной ценой. Анализируя эти данные, приложение по недвижимости будет обучено отвечать на вопрос: « Сколько денег я могу получить за этот дом? »

После завершения процесса обучения новые входные данные не будут помечены. Машина сможет правильно отвечать на запросы даже для невидимых, немаркированных векторов признаков.

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

Эта статья посвящена машинному обучению с учителем, которое на сегодняшний день является наиболее распространенным подходом к машинному обучению.

Машинное обучение с учителем

Все машинное обучение основано на данных. Для проекта машинного обучения с учителем вам нужно будет обозначить данные значимым образом для достижения желаемого результата. Обратите внимание, что в таблице 1 каждая строка записи о доме содержит метку «цена дома». Сопоставляя данные строки с ценовой меткой дома, алгоритм в конечном итоге сможет предсказать рыночную цену на дом, не входящий в его набор данных (обратите внимание, что размер дома основан на квадратных метрах, а цена дома основана на евро).

Таблица 1. Домашние записи

ХАРАКТЕРНАЯ ЧЕРТА ХАРАКТЕРНАЯ ЧЕРТА ХАРАКТЕРНАЯ ЧЕРТА МЕТКА
Размер дома Количество комнат Возраст дома Ориентировочная стоимость дома
90 м2 / 295 футов 2 комнаты 23 года 249 000 €
101 м2 / 331 фут 3 комнаты н / д 338 000 €
1330 м2 / 4363 футов 11 комнат 12 лет 6 500 000 €

На ранних этапах вы, скорее всего, будете вручную маркировать записи данных, но со временем вы сможете обучить свою программу автоматизации этого процесса. Вы, наверное, видели это в почтовых приложениях, где перемещение электронной почты в папку для спама приводит к запросу «Это спам?» Когда вы отвечаете, вы обучаете программу распознавать почту, которую вы не хотите видеть. Спам-фильтр приложения учится маркировать будущую почту из того же источника или с похожим содержанием и удалять ее.

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

Как машины учатся предсказывать

Задача машинного обучения с учителем - найти правильную функцию прогнозирования для конкретного вопроса. Математически задача состоит в том, чтобы найти функцию ввода-вывода, которая принимает входные переменные x и возвращает значение прогноза y . Эта функция гипотезы (h θ ) является результатом тренировочного процесса. Часто функцию гипотезы также называют целевой функцией или функцией прогнозирования .

Грегор Рот

In most cases, x represents a multiple-data point. In our example, this could be a two-dimensional data point of an individual house defined by the house-size value and the number-of-rooms value. The array of these values is referred to as the feature vector. Given a concrete target function, the function can be used to make a prediction for each feature vector x. To predict the price of an individual house, you could call the target function by using the feature vector { 101.0, 3.0 } containing the house size and the number of rooms:

 // target function h (which is the output of the learn process) Function h = ...; // set the feature vector with house size=101 and number-of-rooms=3 Double[] x = new Double[] { 101.0, 3.0 }; // and predicted the house price (label) double y = h.apply(x); 

В листинге 1 значение переменной массива x представляет вектор признаков дома. Значение y, возвращаемое целевой функцией, - это прогнозируемая цена дома.

Задача машинного обучения - определить целевую функцию, которая будет работать как можно точнее с неизвестными, невидимыми экземплярами данных. В машинном обучении целевая функция (h θ ) иногда называется моделью . Эта модель - результат процесса обучения.

Грегор Рот

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

Typically, the learning process is explorative. In most cases, the process will be performed multiple times by using different variations of learning algorithms and configurations.

Eventually, all the models will be evaluated based on performance metrics, and the best one will be selected. That model will then be used to compute predictions for future unlabeled data instances.

Linear regression

Чтобы научить машину думать, первым делом нужно выбрать алгоритм обучения, который вы будете использовать. Линейная регрессия - один из самых простых и популярных алгоритмов контролируемого обучения. Этот алгоритм предполагает, что отношения между входными объектами и выводимой меткой линейны. Приведенная ниже универсальная функция линейной регрессии возвращает прогнозируемое значение, суммируя каждый элемент вектора признаков, умноженный на тета-параметр (θ) . Тета-параметры используются в процессе обучения для адаптации или «настройки» функции регрессии на основе данных обучения.

Грегор Рот

In the linear regression function, theta parameters and feature parameters are enumerated by a subscription number. The subscription number indicates the position of theta parameters (θ) and feature parameters (x) within the vector. Note that feature x0 is a constant offset term set with the value 1 for computational purposes. As a result, the index of a domain-specific feature such as house-size will start with x1. As an example, if x1 is set for the first value of the House feature vector, house size, then x2 will be set for the next value, number-of-rooms, and so forth.

Listing 2 shows a Java implementation of this linear regression function, shown mathematically as hθ(x). For simplicity, the calculation is done using the data type double. Within the apply() method, it is expected that the first element of the array has been set with a value of 1.0 outside of this function.

Listing 2. Linear regression in Java

 public class LinearRegressionFunction implements Function { private final double[] thetaVector; LinearRegressionFunction(double[] thetaVector) { this.thetaVector = Arrays.copyOf(thetaVector, thetaVector.length); } public Double apply(Double[] featureVector) { // for computational reasons the first element has to be 1.0 assert featureVector[0] == 1.0; // simple, sequential implementation double prediction = 0; for (int j = 0; j < thetaVector.length; j++) { prediction += thetaVector[j] * featureVector[j]; } return prediction; } public double[] getThetas() { return Arrays.copyOf(thetaVector, thetaVector.length); } } 

In order to create a new instance of the LinearRegressionFunction, you must set the theta parameter. The theta parameter, or vector, is used to adapt the generic regression function to the underlying training data. The program's theta parameters will be tuned during the learning process, based on training examples. The quality of the trained target function can only be as good as the quality of the given training data.

В приведенном ниже примере LinearRegressionFunctionбудет создан экземпляр для прогнозирования цены дома в зависимости от его размера. Учитывая, что x 0 должен быть постоянным значением 1.0, целевая функция создается с использованием двух тета-параметров. Тета-параметры являются результатом процесса обучения. После создания нового экземпляра цена дома размером 1330 квадратных метров будет прогнозироваться следующим образом:

 // the theta vector used here was output of a train process double[] thetaVector = new double[] { 1.004579, 5.286822 }; LinearRegressionFunction targetFunction = new LinearRegressionFunction(thetaVector); // create the feature vector function with x0=1 (for computational reasons) and x1=house-size Double[] featureVector = new Double[] { 1.0, 1330.0 }; // make the prediction double predictedPrice = targetFunction.apply(featureVector); 

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

Грегор Рот

Пока что график прогнозов выглядит достаточно хорошо. Координаты графика (точка пересечения и наклон) определяются тета-вектором { 1.004579, 5.286822 }. Но как узнать, что этот тета-вектор лучше всего подходит для вашего приложения? Подойдет ли функция лучше, если вы измените первый или второй тета-параметр? Чтобы определить наиболее подходящий вектор тета-параметров, вам понадобится функция полезности , которая оценит, насколько хорошо целевая функция выполняется.

Оценка целевой функции

В машинном обучении функция стоимости (J (θ)) используется для вычисления средней ошибки или «стоимости» заданной целевой функции.

Грегор Рот