Машинно обучение за разработчици на Java, Част 1: Алгоритми за машинно обучение

Самоуправляващите се автомобили, софтуерът за разпознаване на лица и гласово управляваните високоговорители са изградени върху технологии и рамки за машинно обучение - и това са само първата вълна. През следващото десетилетие ново поколение продукти ще трансформира нашия свят, инициирайки нови подходи към разработването на софтуер и приложенията и продуктите, които създаваме и използваме.

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

Тази статия ще ви помогне да започнете. Ще започнете с първо впечатление за това как работи машинното обучение, последвано от кратко ръководство за внедряване и обучение на алгоритъм за машинно обучение. След като изучите вътрешността на алгоритъма за обучение и функциите, които можете да използвате, за да обучавате, оценявате и избирате най-подходящата функция за прогнозиране, ще получите преглед на използването на JVM рамка, Weka, за изграждане на решения за машинно обучение. Тази статия се фокусира върху контролирано машинно обучение, което е най-често срещаният подход за разработване на интелигентни приложения.

Машинно обучение за разработчици на Java, част 2

Готови ли сте за следващата стъпка? Втората половина на този урок ви показва как да разработите и внедрите вашия конвейер за данни за машинно обучение.

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

Машинното обучение се е развило от областта на изкуствения интелект, който се стреми да произвежда машини, способни да имитират човешкия интелект. Въпреки че машинното обучение е нова тенденция в компютърните науки, изкуственият интелект не е нова научна област. Тестът на Тюринг, разработен от Алън Тюринг в началото на 50-те години, е един от първите тестове, създадени, за да се определи дали компютърът може да има истински интелект. Според теста на Тюринг компютър може да докаже човешкия интелект, като подмами човек да повярва, че той също е човек.

Много модерни подходи за машинно обучение се основават на концепции от десетилетия. Това, което се промени през последното десетилетие, е, че компютрите (и разпределените изчислителни платформи) вече имат процесорната мощност, необходима за алгоритмите за машинно обучение. Повечето алгоритми за машинно обучение изискват огромен брой умножения на матрици и други математически операции за обработка. Изчислителната технология за управление на тези изчисления не е съществувала дори преди две десетилетия, но съществува днес.

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

Учене под наблюдение срещу учене без надзор

Управляваното обучение и ученето без надзор са най-популярните подходи към машинното обучение. И двете изискват захранването на машината с огромен брой записи от данни, за да се съпоставят и да се учат от тях. Такива записи на събрани данни са известни като вектори на характеристиките. В случай на отделна къща, векторът на характеристиките може да се състои от характеристики като общ размер на къщата, брой стаи и възрастта на къщата.

При контролирано обучение алгоритъм за машинно обучение е обучен да отговаря правилно на въпроси, свързани с вектори на характеристиките. За да обучи алгоритъм, машината се захранва с набор от вектори на характеристиките и съответния етикет. Етикетите обикновено се предоставят от човешки анотатор и представляват верния „отговор“ на даден въпрос. Алгоритъмът за обучение анализира вектори на функции и техните правилни етикети, за да намери вътрешни структури и връзки между тях. По този начин машината се научава да отговаря правилно на запитвания.

Като пример, интелигентно приложение за недвижими имоти може да бъде обучено с вектори на функции, включително размер, брой стаи и съответната възраст за редица къщи. Човешки етикети биха обозначили всяка къща с правилната цена на къщата въз основа на тези фактори. Като анализира тези данни, приложението за недвижими имоти ще бъде обучено да отговори на въпроса: „ Колко пари мога да получа за тази къща?

След приключване на тренировъчния процес новите входни данни няма да бъдат етикетирани. Устройството ще може да отговаря правилно на запитвания, дори за невидими, немаркирани вектори на функции.

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

Тази статия се фокусира върху контролирано машинно обучение, което е най-често срещаният подход към машинното обучение днес.

Контролирано машинно обучение

Цялото машинно обучение се основава на данни. За контролиран проект за машинно обучение ще трябва да маркирате данните по смислен начин за резултата, който търсите. В таблица 1 обърнете внимание, че всеки ред от домовия запис включва етикет за „цена на къщата“. Чрез корелация на данните на редовете с етикета за цената на къщата, алгоритъмът в крайна сметка ще може да прогнозира пазарната цена за къща, която не е в нейния набор от данни (имайте предвид, че размерът на къщата се базира на квадратни метри, а цената на къщата е на база евро).

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

ОСОБЕНОСТ ОСОБЕНОСТ ОСОБЕНОСТ ЕТИКЕТ
Размер на къщата Брой стаи Възраст на къщата Очаквана цена на къщата
90 м2 / 295 фута 2 стаи 23 години 249 000 €
101 м2 / 331 фута 3 стаи n / a 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 (θ)) за изчисляване на средната грешка или "цена" на дадена целева функция.

Грегор Рот