Интеллектуальный анализ данных с помощью программного пакета WEKA: Часть 3. Метод ближайших соседей и библиотека серверного приложения

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

Майкл Абернети, автор

Майкл Абернети (Michael Abernethy) в настоящее время работает руководителем группы тестировщиков в IBM WebSphere System Management, расположенной в Austin, TX. До этого он работал разработчиком Swing UI.



03.08.2012

Введение

В двух предыдущих статьях серии Интеллектуальный анализ данных с помощью программного пакета WEKA мы рассмотрели основные концепции интеллектуального анализа данных. Если вы не читали часть 1 и часть 2, мы рекомендуем вам ознакомиться с ними, так как в первых частях серии обсуждались вопросы, необходимые для понимания материала, изложенного в данной статье. Основные моменты, рассматриваемые в предыдущих статьях, касаются трех основных техник интеллектуального анализа данных, которые позволят вам преобразовать большие наборы несвязанных и на первый взгляд никак не применимых данных в имеющие определенный смысл и практически полезные схемы, структуры и правила. Первый изученный нами метод – метод регрессионного анализа используется для прогнозирования численного результата (например, стоимости дома), основываясь на аналогичных известных примерах. Второй метод, метод классификации, так же известный как метод классификационных деревьев или деревьев решений, позволяет создать дерево для прогнозирования возможного значения неизвестной величины (в рассмотренном примере мы попытались предсказать эффективность рекламной компании BMW). Кроме того, мы познакомились с методом кластеризации, который позволяет разбить имеющиеся данные на кластеры (группы) и для каждой из групп выявить свои тенденции и правила (в качестве конкретного примера использовались данные о продажах BMW). Все эти методы позволяют преобразовать ваши данные в полезную информацию, однако каждый из них использует свой собственный аналитический подход, свои типы и наборы данных, что, собственно, и определяет один из важнейших аспектов интеллектуального анализа данных: для того, чтобы разработать эффективную модель анализа, необходимо определить правильный набор входных данных.

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

В предыдущих статьях мы использовали программный пакет WEKA в качестве отдельного самостоятельного приложения, но насколько такой подход оправдан и полезен в реальной жизни? Очевидно, что он далек от идеала. Поскольку WEKA является Java-приложением, то оно включает в себя Java –библиотеку, которая может вызываться из другого приложения, выполняемого на стороне сервера. Такой подход, скорее всего, окажется более полезным для большинства читателей. Используя Java-библиотеку WEKA, вы можете написать код, анализирующий ваши данные, и «на лету» вносить все необходимые корректировки, вместо того чтобы дожидаться, пока кто-то извлечет ваши данные из хранилища, конвертирует в формат WEKA и прогонит их через WEKA Explorer.


Метод ближайших соседей

Метод ближайших соседей, так же известный как метод коллаборативной фильтрации или метод обучения на примерах, является весьма полезным способом интеллектуального анализа данных, позволяющим использовать накопленные примеры с известным результатом для прогнозирования ожидаемого результата для новых образцов данных. Подобное определение похоже на определение методов регрессионного анализа и классификации. Чем же новый метод отличается от них? Во-первых, как вы помните, метод регрессионного анализа используется для прогнозирования численного результата. Это его основное отличие от метода ближайших соседей. Метод классификации, как мы убедились на рассмотренных ранее задачах, использует каждое значение для создания дерева решений, по которому нужно пройти для определения конечного результата. Подобный подход может вызвать определенные сложности. Задумайтесь, например, о деятельности такой компании, как Amazon, и предоставляемой ей функциональности «Покупатели, которые купили X, также купили и Y». Представляете, сколько веток и узлов включало бы в себя классификационное дерево для подобного анализа, если бы компания Amazon использовала метод классификации? Список продуктов содержит несколько сотен тысяч разных наименований, так что вы можете представить себе объем результирующего дерева и его точность. Даже если вы дошли до последней ветки, то вы с удивлением обнаружите, что она содержит всего 3 продукта, в то время как Amazon обычно предлагает своим посетителям 12 продуктов. Так что классификационное дерево является не слишком подходящей моделью для такого анализа.

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

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

Математический алгоритм метода ближайших соседей

Как вы убедитесь сами, алгоритм метода ближайших соседей во многом схож с алгоритмом, используемым в методе кластеризации. Метод определяет расстояние между неизвестной точкой и всеми известными точками данных. Определение расстояния – вполне тривиальная процедура, легко выполняемая в рамках электронных таблиц, так что достаточно мощный компьютер справится с этой задачей практически мгновенно. Самый простой и наиболее распространенный способ определения расстояния – это нормализованное эвклидово расстояние. Описание звучит сложнее, чем собственно вычисление. Обратимся к конкретному примеру и попробуем определить, какой товар склонен приобрести покупатель № 5.

Листинг 1. Математическая модель метода ближайших соседей
Покупатель   Возраст  Доход    Приобретенный продукт
1            45       46k       Книга
2            39       100k      TV
3            35       38k       DVD
4            69       150k      Чехлы для автомобиля
5            58       51k       ???

Шаг 1:  Формула для определения расстояния
Расстояние = SQRT( ((58 - Возраст)/(69-35))^2) + ((51000 - Доход)/(150000-38000))^2 )

Шаг 2:  Вычисление баллов
Покупатель   Баллы       Приобретенный продукт
1            .385         Book
2            .710         TV
3            .686         DVD
4            .941         Car Cover
5            0.0          ???

Чтобы ответить на вопрос, какой товар с наибольшей вероятностью приобретет покупатель № 5, мы воспользовались алгоритмом метода ближайших соседей, приведенным выше, и получили в результате в качестве наиболее вероятной покупки книгу. Дело в том, что расстояние между покупателем № 5 и покупателем № 1 меньше (значительно меньше), чем расстояние между покупателем № 5 и любым другим покупателем. Основываясь на этой модели, можно утверждать, что поведение покупателя № 5 с большой долей вероятности совпадет с поведением ближайшего к нему покупателя.

Однако полезность метода ближайших соседей этим не исчерпывается. Этот алгоритм может быть расширен таким образом, что вместо одного ближайшего соседа можно было бы определять любое количество достаточно близких соответствий. Такое расширение алгоритма называется N ближайших соседей (например, три ближайших соседа). Например, если в рассмотренном выше примере требуется определить два наиболее вероятных приобретения покупателя № 5, то ответ будет книга и DVD. Если требуется определить 12 наиболее вероятных покупок, то следует воспользоваться алгоритмом 12 ближайших соседей (на самом деле Amazon использует более сложный метод, нежели просто 12 ближайших соседей).

Кроме того, алгоритм не ограничивается определением наиболее вероятной покупки, он может быть использован для получения бинарного ответа да/нет. Если в рассмотренном выше примере мы заменим значения в последнем столбце на «Да, Нет, Да, Нет» (для покупателей с первого по четвертый), то метод одного ближайшего соседа определит «Да» в качестве наиболее прогнозируемого ответа покупателя № 5, метод двух ближайших соседей тоже выдаст «Да» (покупатели №1 и № 3 ответили «Да»), и метод трех ближайших соседей тоже спрогнозирует положительный ответ (покупатели №1 и № 3 ответили «Да», покупатель № 2 ответил «Нет», так что среднее значение равно «Да»).

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

Набор данных для WEKA

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

Дилерский центр располагает данными о 4500 продажах расширенной гарантии. Этот набор обладает следующими атрибутами: распределение по доходам [0=$0-$30k, 1=$31k-$40k, 2=$41k-$60k, 3=$61k-$75k, 4=$76k-$100k, 5=$101k-$150k, 6=$151k-$500k, 7=$501k+], год/месяц покупки первого автомобиля BMW, год/месяц покупки последнего автомобиля BMW, воспользовался ли клиент расширенной гарантией.

Листинг 2. Файл данных для анализа методом ближайших соседей с помощью пакета WEKA
@attribute IncomeBracket {0,1,2,3,4,5,6,7}
@attribute FirstPurchase numeric
@attribute LastPurchase numeric
@attribute responded {1,0}

@data

4,200210,200601,0
5,200301,200601,1
...

Реализация метода ближайших соседей в WEKA

Почему мы решили использовать тот же самый набор данных, которым мы воспользовались для изучения метода классификации? Потому что, если вы помните полученный нами результат, метод классификации на этом наборе данных оказался недостаточно точным (59% точности – с таким же успехом можно просто пытаться угадать искомый ответ). Теперь мы попробуем построить модель с более высокой точностью прогнозирования и предоставить нашему вымышленному дилеру информацию, пригодную для практического использования.

Загрузим файл bmw-training.arff в WEKA, выполнив в закладке Preprocess уже знакомые вам шаги. Окно WEKA должно выглядеть так, как показано на рисунке 1.

Рисунок 1. Данные дилерского центра BMW для анализа методом ближайших соседей с помощью WEKA
Screenshot of the WEKA Preprocess tab after the sample data has been loaded

Точно так же, как мы проделали это для методов регрессионного анализа и классификации в предыдущих статьях, мы должны открыть закладку Classify. В панели Classify нужно выбрать опцию lazy, а затем Ibk (здесь IB означает Instance-Based – обучение на примерах, а k указывает на количество соседей, поведение которых мы хотим исследовать).

Рисунок 2. Алгоритм метода ближайших соседей для набора данных BMW
Screenshot of the Classify tab in WEKA with the IBk classifier selected

Теперь мы готовы приступить к созданию нашей модели в WEKA. Убедитесь, что вы выбрали опцию Use training set, чтобы использовать набор данных, который мы только что загрузили в WEKA. Нажмите кнопку Start и позвольте WEKA выполнить все необходимые вычисления. На рисунке 3 показано, как должно выглядеть окно WEKA по окончании вычислений, а результирующая модель приведена в листинге 3.

Рисунок 3. Модель метода ближайших соседей для набора данных BMW
BMW Nearest Neighbor model
Листинг 3. Результат вычислений IBk
=== Evaluation on training set ===
=== Summary ===

Correctly Classified Instances        2663               88.7667 %
Incorrectly Classified Instances       337               11.2333 %
Kappa statistic                          0.7748
Mean absolute error                      0.1326
Root mean squared error                  0.2573
Relative absolute error                 26.522  %
Root relative squared error             51.462  %
Total Number of Instances             3000     

=== Detailed Accuracy By Class ===

               TP Rate   FP Rate   Precision   Recall  F-Measure   ROC Area  Class
                 0.95      0.177      0.847     0.95      0.896      0.972    1
                 0.823     0.05       0.941     0.823     0.878      0.972    0
Weighted Avg.    0.888     0.114      0.893     0.888     0.887      0.972

=== Confusion Matrix ===

    a    b   <-- classified as
 1449   76 |    a = 1
 261 1214 |    b = 0

Как это соотносится с моделью, которую мы получили с помощью метода классификации? У модели, использующей метод ближайших соседей, показатель точности равен 89% - совсем неплохо для начала, учитывая то, что точность предыдущей модели составляла всего 59%. Практически 90% точности – это вполне приемлемый уровень. Давайте рассмотрим результаты работы метода в терминах ложных определений, чтобы вы смогли на конкретном примере увидеть, как именно WEKA может использоваться для решения реальных вопросов бизнеса.

Результаты использования модели на нашем наборе данных показывают, что у нас есть 76 ложноположительных распознаваний (2.5%) и 261 ложноотрицательных распознаваний (8.7%). В нашем случае ложноположительное распознавание означает, что модель считает, что данный покупатель приобретет расширенную гарантию, хотя на самом деле он отказался от покупки. Ложноотрицательное распознавание, в свою очередь, означает, что согласно результатам анализа данный покупатель откажется от расширенной гарантии, а на самом деле он ее купил. Предположим, что стоимость каждой рекламной листовки, рассылаемой дилером, составляет $3, а покупка одной расширенной гарантии приносит ему 400$ дохода. Таким образом, ошибки ложного распознавание в терминах расходов и доходов нашего дилера будут выглядеть следующим образом: 400$ - (2.5% * $3) - (8.7% * 400) = $365. Следовательно, ложное распознавание ошибается в пользу дилера. Сравним этот показатель с данными модели классификации: $400 - (17.2% * $3) - (23.7% * $400) = $304. Как вы видите, использование более точной модели повышает потенциальный доход дилера на 20%.

В качестве самостоятельного упражнения попробуйте изменить количество ближайших соседей в модели (для этого раскройте список параметров, щелкнув правой кнопкой мышки на поле "IBk -K 1...."). Вы можете выбрать произвольное значение для параметра "KNN" (К ближайших соседей). Вы увидите, что точность модели повышается по мере добавления соседей.

Обратите внимание на определенные недостатки модели ближайших соседей. Полезность этого метода вполне очевидна, когда речь идет о значительных наборах данных, таких, например, которыми обладает Amazon. Имея данные о 20 миллионах пользователей несложно получить достаточно точный результат – в базе потенциальных покупателей Amazon наверняка найдется человек, чьи предпочтения схожи с вашими. Модель, основанная на таком значительном объеме данных, безусловно, будет отличаться высокой точностью прогнозов. С другой стороны, модель становится практически бесполезной, если у вас есть лишь несколько записей для сравнения. На начальных этапах развития он-лайн магазинов электронной коммерции, их владельцы могли использовать данные примерно о 50 покупателях. На таком небольшом наборе данных рекомендации, полученные с помощью метода ближайших соседей, не совпадали с действительными покупками, так как предпочтения вашего ближайшего соседа были весьма далеки от ваших предпочтений.

Последняя проблема, связанная с использованием метода ближайших соседей состоит в том, что этот метод является высокозатратным с точки зрения проведения вычислений. В случае с компанией Amazon, располагающей данными о 20 миллионах покупателей, чтобы определить ближайших соседей, конкретного покупателя необходимо сравнить с каждым из оставшихся 20 миллионов. Ну во-первых, если ваш бизнес насчитывает 20 миллионов клиентов, то подобные вычисления не вызовут у вас серьезных проблем, так как вы, вполне очевидно, просто купаетесь в деньгах. Во-вторых, подобные вычисления – идеальная задача для облачных систем, так как в этом случае вычислительные процессы будут выполняться параллельно на нескольких десятках компьютеров, а после вычисления всех расстояний, результаты будут сравниваться между собой для определения ближайших наборов данных (как, например, это делает Google MapReduce). В-третьих, на практике столь масштабных вычислений не потребуется. Если необходимо определить, куплю ли я одну книгу, то для этого совсем не обязательно сравнивать меня со всеми 20 миллионами пользователей Amazon, достаточно будет найти ближайшего соседа среди покупателей книг. Подобный подход позволяет использовать лишь часть базы данных и сократить объем вычислений.

Запомните: интеллектуальный анализ данных не сводится к простому механизму загрузки входных данных и получения желаемого результата на выходе. Необходимо провести достаточно тщательное исследование данных для выбора наиболее подходящей модели для анализа. Кроме того, уменьшение объема входных данных позволит сократить время, необходимое для выполнения всех расчетов. Далее, полученный результат необходимо проанализировать с точки зрения его точности, только после этого вы можете одобрить применение вашей аналитической модели в реальной практике.

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


Использование WEKA на сервере

Одно из основных преимуществ WEKA состоит в том, что это не только самостоятельное приложение, но и автономный Java JAR-файл, который вы можете скопировать в папку библиотек на сервере и использовать в коде серверного приложения. Только представьте себе, сколько новых интересных и полезных возможностей вы сможете реализовать в своем приложении с помощью WEKA-библиотеки. Вы можете создать новый виджет Product Recommendation для магазина электронной коммерции, который будет работать по аналогии с виджетом, размещенном на сайте Amazon (очевидно, что доступ к подобной функциональности каждого клиента не может быть реализован с помощью отдельного приложения). Само приложение WEKA просто использует WEKA Java API, так что вы уже видели API в действии. Теперь давайте разберемся, как интегрировать его в ваш собственный код.

На самом деле, вы уже загрузили WEKA API JAR, это тот самый JAR-файл, который вы используете для запуска WEKA Explorer. Для того чтобы использовать этот файл в коде своего приложения, вам нужно добавить его в classpath вашей среды разработки Java, т.е. проделать все те стандартные шаги, которые требуются для включения стороннего JAR-файла в ваш код.

Как вы можете догадаться, центральным блоком WEKA API являются данные. Интеллектуальный анализ основан на данных, и все алгоритмы, которые мы изучили, вращаются вокруг данных. Так что давайте посмотрим, как нам преобразовать данные в формат, используемый WEKA API. Чтобы нам проще было разобраться в этом вопросе, начнем с данных, которые мы использовали в первой статье этой серии для определения стоимости дома.

Замечание: Здесь необходимо заметить, что навигация в WEKA API может вызвать определенные трудности. Прежде всего, проверьте версию пакета WEKA и версию API, которую вы используете. Разные версии API значительно отличаются друг от друга, так что код разных версий может не совпадать. Кроме того, несмотря на то, что API представляет законченную реализацию, существует не так много примеров для начинающих (собственно, поэтому вы и читаете эту статью). Я использую версию WEKA V3.6.

Листинг 4 демонстрирует, как нужно отформатировать данные для загрузки в WEKA.

Листинг 4. Загрузка данных в WEKA
// Определите каждый атрибут (или столбец) и присвойте ему номер
// Очевидно, что правильнее будет не присваивать явно номер столбцу,
// а получить его в качестве индекса в контейнере
Attribute a1 = new Attribute("houseSize", 0);
Attribute a2 = new Attribute("lotSize", 1);
Attribute a3 = new Attribute("bedrooms", 2);
Attribute a4 = new Attribute("granite", 3);
Attribute a5 = new Attribute("bathroom", 4);
Attribute a6 = new Attribute("sellingPrice", 5);

// Каждый элемент должен быть добавлен в FastVector
// пользовательский контейнер, используемый в данной версии WEKA.
// В более поздних версиях Weka эта ошибка исправлена,
// и используется только ArrayList
FastVector attrs = new FastVector();
attrs.addElement(a1);
attrs.addElement(a2);
attrs.addElement(a3);
attrs.addElement(a4);
attrs.addElement(a5);
attrs.addElement(a6);

// Каждый элемент данных должен создавать объект класса Instance
// Конструктор требует указать количество строк,
// которое должно быть определено. В нашем случае это
// хороший дизайн, так как вы можете передавать пустые значения, если они есть
Instance i1 = new Instance(6);
i1.setValue(a1, 3529);
i1.setValue(a2, 9191);
i1.setValue(a3, 6);
i1.setValue(a4, 0);
i1.setValue(a5, 0);
i1.setValue(a6, 205000);

....

// Каждый объект Instance необходимо добавить к большему контейнеру
// класса Instances. В конструкторе этого класса вам
// нужно определить имя, задать атрибуты, которые используются
// в наборе данных, и количество объектов Instance,
// которые будут добавлены. Это тоже не идеальный дизайн, 
// так как требуется заранее определить в конструкторе количество объектов,
// но вы все равно можете указать 0 в качестве первоначального значения,
// а затем добавить объекты Instance и получить правильное значение
// (другими словами, вам следует указать здесь «0»)
Instances dataset = new Instances("housePrices", attrs, 7);
dataset.add(i1);
dataset.add(i2);
dataset.add(i3);
dataset.add(i4);
dataset.add(i5);
dataset.add(i6);
dataset.add(i7);

// Для класса Instances нам нужно выбрать столбец для 
// конечного результата (т.е. зависимую переменную). Как вы помните,
// некоторые методы интеллектуального анализа данных используются
// для прогнозирования результата, и метод регрессионного анализа 
// как раз относится к таким методам
dataset.setClassIndex(dataset.numAttributes() - 1);

Теперь наш набор данных загружен в WEKA. Приведенный выше пример требует несколько больших усилий, чем нужно в действительности. Вы всегда можете написать свои собственные wrapper-классы для того, чтобы быстро извлечь данные из базы и экспортировать их в класс объектов WEKA. Если вы собираетесь использовать WEKA в качестве части серверного приложения, я настоятельно рекомендую вам потратить время на разработку таких wrapper-классов, потому что работать с данными так, как показано в примере выше, довольно утомительно. Как только ваши данные преобразованы в объекты instances, вы можете использовать любой метод для анализа имеющейся у вас информации, так что имеет смысл максимально облегчить и оптимизировать процесс загрузки данных в WEKA.

Теперь давайте пропустим наши данные через модель регрессионного анализа и убедимся, что результат совпадает с результатом, который мы получили с помощью Weka Explorer. Использовать метод регрессионного анализа с помощью WEKA API на готовом наборе данных достаточно просто, гораздо проще, чем загрузить сами данные.

Листинг 5. Создание модели регрессионного анализа в WEKA
// Создадим модель LinearRegression, являющуюся реализацией
// метода интеллектуального анализа данных, который мы хотим 
// использовать в нашем примере
LinearRegression linearRegression = new LinearRegression();

// Этот метод выполняет все шаги, необходимые для анализа
// данных методом регрессии. Он будет использовать весь
// имеющийся у нас набор данных
// Как только метод закончит работу, наш анализ готов
// и вы можете увидеть конечный результат
linearRegression.buildClassifier(dataset);

// Нас, прежде всего, интересуют вычисляемые коэффициенты нашей модели
// так как именно они определяют результирующее значение 
// неизвестного параметра
double[] coef = linearRegression.coefficients();

// Используя данные о моем доме (приведенные в первой статье),
// мы можем подставить конкретные значения и умножить их
// на коэффициенты, определенные моделью регрессионного анализа
// Обратите внимание, мы не используем coefficient[5], он 
// равен 0, так как соответствует результирующей переменной нашего тестового набора
double myHouseValue = (coef[0] * 3198) +
                      (coef[1] * 9669) +
                      (coef[2] * 5) +
                      (coef[3] * 3) +
                      (coef[4] * 1) +
                      coef[6];

System.out.println(myHouseValue);
// результат будет равен 219328.35717359098
// что совпадает с величиной, полученной в первой статье

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

В идеале, этот небольшой раздел рассчитан на то, чтобы вызвать определенный интерес к вопросам интеграции WEKA в код вашего серверного приложения. Если вы являетесь владельцем магазина электронной коммерции и хотите рекомендовать правильные продукты свои покупателям, если вы хотите повысить эффективность продаж с помощью купонов на скидку, оптимизировать рекламную компанию, проводимую с помощью AdWords, или улучшить целевые страницы рекламных объявлений, применение методов интеллектуального анализа данных поможет вам добиться лучших результатов. Используя возможности встраивания WEKA API, вы можете создать серверное приложение, переключающее целевые страницы рекламы и анализирующее данные для определения наиболее эффективной целевой страницы. Объединяя полученные результаты с результатами анализа рекламных компаний AdWords, вы сможете определить оптимальный способ привлечения посетителей на ваш сайт и повысите свой уровень продаж.


Заключение

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

Данная статья рассматривает еще один метод интеллектуального анализа данных, метод ближайших соседей. Этот алгоритм идеален для определения данных, наиболее близких к неизвестному значению, и использует набор известных параметров для определения неизвестной величины. Мы рассмотрели, насколько такой подход близок к тому, что вы видите каждые день в онлайн-магазинах в разделе рекомендуемых продуктов. С помощью анализа данных такие сайты как Amazon могут быстро (по крайней мере, для них, с помощью тысяч компьютеров, которыми они располагают) показать, что именно приобрели покупатели, похожие на вас.

Задача последней секции этой статьи – показать, что возможности применения WEKA не ограничиваются запуском отдельного приложения. ПО WEKA может использоваться в качестве самостоятельной Java-библиотеки, которую вы можете скопировать в среду своего серверного приложения и использовать WEKA API точно так же, как API любой другой библиотеки Java. Мы рассмотрели один из возможных способов загрузки данных с помощью WEKA API (хотя я по-прежнему настоятельно рекомендую вам потратить время на разработку удобной в использовании wrapper-программы, автоматически выполняющей импорт данных из вашей базы и их преобразование в формат WEKA). И в завершение, мы убедились, насколько просто создать модель регрессионного анализа данных и повторить результат, полученный с помощью приложения WEKA, но уже средствами API.

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

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


Загрузка

ОписаниеИмяРазмер
Код, используемый в примерах данной статьиos-weka3-Example.zip17 KБ

Ресурсы

Научиться

  • Согласно требованию проекта WEKA, все публикации об этом программном продукте должны ссылаться на документ The WEKA Data Mining Software: An Update, составленный Марком Холлом (Mark Hall), Эйбом Франком (Eibe Frank), Джеффри Холмсом (Geoffrey Holmes), Бернардом Пфарингером (Bernhard Pfahringer), Петером Рейтеманом (Peter Reutemann) и Яном Виттеном (Ian H. Witten).
  • Документацию о программном продукте WEKA и ответы на часто задаваемые вопросы вы найдете на Web-сайте проекта WEKA.
  • Описание функций WEKA API вы можете найти здесь.
  • Узнайте больше о формате ARFF, с помощью которого можно загружать свои данные в WEKA.
  • Корпорация IBM разработала свой собственный программный продукт для интеллектуального анализа данных. Статья Integrate InfoSphere Warehouse data mining with IBM Cognos reporting, Part 1 познакомит вас с этим программным продуктом.
  • Прослушать интересные интервью и дискуссии для разработчиков ПО можно с помощью подкастов ресурса developerWorks.
  • Следите за developerWorks в Твиттере.
  • Следите за предстоящими конференциями, выставками, Web-трансляциями и другими мероприятиями во всем мире, которые могут заинтересовать разработчиков открытого ПО IBM.

Получить продукты и технологии

Обсудить

  • Присоединяйтесь к группе Data Mining в My developerWorks.

Комментарии

developerWorks: Войти

Обязательные поля отмечены звездочкой (*).


Нужен IBM ID?
Забыли Ваш IBM ID?


Забыли Ваш пароль?
Изменить пароль

Нажимая Отправить, Вы принимаете Условия использования developerWorks.

 


Профиль создается, когда вы первый раз заходите в developerWorks. Информация в вашем профиле (имя, страна / регион, название компании) отображается для всех пользователей и будет сопровождать любой опубликованный вами контент пока вы специально не укажите скрыть название вашей компании. Вы можете обновить ваш IBM аккаунт в любое время.

Вся введенная информация защищена.

Выберите имя, которое будет отображаться на экране



При первом входе в developerWorks для Вас будет создан профиль и Вам нужно будет выбрать Отображаемое имя. Оно будет выводиться рядом с контентом, опубликованным Вами в developerWorks.

Отображаемое имя должно иметь длину от 3 символов до 31 символа. Ваше Имя в системе должно быть уникальным. В качестве имени по соображениям приватности нельзя использовать контактный e-mail.

Обязательные поля отмечены звездочкой (*).

(Отображаемое имя должно иметь длину от 3 символов до 31 символа.)

Нажимая Отправить, Вы принимаете Условия использования developerWorks.

 


Вся введенная информация защищена.


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=40
Zone=Open source
ArticleID=829151
ArticleTitle=Интеллектуальный анализ данных с помощью программного пакета WEKA: Часть 3. Метод ближайших соседей и библиотека серверного приложения
publish-date=08032012