- 3 марта 2014 г.
- Василис Вриниотис
- . Без комментариев
В предыдущей статье мы обсудили метод анализа оболочки данных и увидели, как его можно использовать в качестве эффективного алгоритма непараметрического ранжирования. В этом сообщении блога мы разработаем реализацию анализа оболочки данных в JAVA и будем использовать ее для оценки популярности веб-страниц и статей в социальных сетях. Код с открытым исходным кодом (под лицензией GPL v3), и вы можете бесплатно загрузить его с Гитхаб.
Обновление: платформа машинного обучения Datumbox теперь имеет открытый исходный код и бесплатна для скачать. Ознакомьтесь с пакетом com.datumbox.framework.algorithms.dea, чтобы увидеть реализацию Data Envelopment Analysis в Java.
Реализация анализа оболочки данных в JAVA
Код написан на языке JAVA и может быть загружен непосредственно с Гитхаб. Он находится под лицензией GPLv3, поэтому не стесняйтесь использовать его, модифицировать и свободно распространять.
Код реализует алгоритм Data Envelopment Analysis, использует библиотека lp_solve для решения задач линейного программирования и использует извлеченные данные из Веб-SEO-аналитика index, чтобы построить составную метрику популярности социальных сетей для веб-страниц на основе их доли в Facebook, Google Plus и Twitter. Все теоретические части алгоритма описаны в предыдущей статье, а в исходном коде вы можете найти подробные комментарии javadoc, касающиеся реализации.
Ниже мы приводим высокоуровневое описание архитектуры реализации:
1. библиотека lp_solve 5.5
Для решения различных задач линейного программирования мы используем библиотеку с открытым исходным кодом под названием lp_solve. Конкретная библиотека написана на ANSI C и использует оболочку JAVA для вызова методов библиотеки. Таким образом, перед запуском кода вы должны установить lp_solve в вашей системе. Бинарные файлы библиотеки доступны как для Линукс и Виндовс и вы можете прочитать больше информации об установке на lp_solve документация.
Прежде чем пытаться запустить код JAVA, убедитесь, что в вашей системе установлена конкретная библиотека. По любым проблемам, связанным с установкой и настройкой библиотеки, обращайтесь к документации lp_solve.
2. Класс DataEnvelopmentAnalysis
Это основной класс реализации алгоритма DEA. Он реализует общедоступный метод, называемый оценкаEfficiency(), который берет карту записей и возвращает их оценки DEA.
3. Объект DeaRecord
DeaRecord — это специальный объект, в котором хранятся данные нашей записи. Поскольку DEA требует разделения ввода и вывода, объект DeaRecord хранит наши данные отдельно таким образом, чтобы DEA мог с ними справиться.
4. Класс SocialMediaPopularity
SocialMediaPopularity — это приложение, которое использует DEA для оценки популярности страницы в социальных сетях на основе ее лайков в Facebook, Google +1 и твитов. Он реализует два защищенных метода: calculatePopularity() и AssessmentPercentiles(), а также два общедоступных метода: loadFile() и getPopularity().
Функция calculatePopularity() использует реализацию DEA для оценки оценок страниц на основе их количества в социальных сетях. Метод AssessmentPercentiles() получает оценки DEA и преобразует их в процентили. В целом процентили легче объяснить, чем баллы DEA; таким образом, когда мы говорим, что показатель популярности страницы составляет 70%, это означает, что конкретная страница более популярна, чем 70% страниц.
Чтобы иметь возможность оценить популярность конкретной страницы, у нас должен быть набор данных с количеством социальных сетей других страниц. Это имеет смысл, поскольку для того, чтобы предсказать, какая страница популярна, а какая нет, вы должны иметь возможность сравнивать ее с другими страницами в Интернете. Для этого мы используем небольшой анонимный образец из индекса Web SEO Analytics, представленный в формате txt. Вы можете создать свою собственную базу данных, извлекая количество социальных сетей с большего количества страниц в Интернете.
Метод loadFile() используется для загрузки вышеупомянутой статистики по DEA, а метод getPopularity() — это простой в использовании метод, который получает лайки Facebook, Google +1 и количество твитов страницы и оценивает ее популярность в социальных сетях. .
Использование реализации JAVA Data Envelopment Analysis
В классе DataEnvelopmentAnalysisExample я привожу 2 разных примера использования кода.
В первом примере непосредственно используется метод DEA для оценки эффективности организационных единиц на основе их результатов (ПРОДАЖИ, ПОСТУПЛЕНИЯ, ЗАПРОСЫ) и входных данных (ЗАПАСЫ, ЗАРАБОТНАЯ ПЛАТА). Этот пример взят из статьи DEAzone.com.
Map<String, DeaRecord> records = new LinkedHashMap<>(); records.put("Depot1", new DeaRecord(new double(){40.0,55.0,30.0}, new double(){3.0,5.0})); //...adding more records here... DataEnvelopmentAnalysis dea = new DataEnvelopmentAnalysis(); Map<String, Double> results = dea.estimateEfficiency(records); System.out.println((new TreeMap<>(results)).toString());
Во втором примере наше приложение Social Media Popularity используется для оценки популярности страницы с использованием данных из социальных сетей, таких как Facebook Likes, Google +1 и Tweets. Все подсчеты в социальных сетях помечаются как выходные, и мы передаем в DEA пустой входной вектор.
SocialMediaPopularity rank = new SocialMediaPopularity(); rank.loadFile(DataEnvelopmentAnalysisExample.class.getResource("/datasets/socialcounts.txt")); Double popularity = rank.getPopularity(135, 337, 9079); //Facebook likes, Google +1s, Tweets System.out.println("Page Social Media Popularity: "+popularity.toString());
Необходимые расширения
Предоставленный код является лишь примером того, как DEA можно использовать в качестве алгоритма ранжирования. Вот несколько расширений, которые необходимо сделать, чтобы улучшить реализацию:
1. Ускорение реализации
Конкретная реализация DEA оценивает оценки DEA всех записей в базе данных. Это замедляет реализацию, поскольку нам требуется решить столько задач линейного программирования, сколько записей в базе данных. Если нам не требуется вычислять оценку всех записей, мы можем значительно ускорить выполнение. Таким образом, небольшое расширение алгоритма может дать нам лучший контроль над тем, какие записи следует решать, а какие следует использовать только в качестве ограничений.
2. Расширение базы данных социальных сетей
Предоставленная база данных Social Media Counts состоит из 1111 образцов из индекса Web SEO Analytics. Чтобы иметь возможность оценить более точную оценку популярности, необходима большая выборка. Вы можете создать свою собственную базу данных, оценив количество социальных сетей на большем количестве страниц в Интернете.
3. Добавление дополнительных социальных сетей
Реализация использует Facebook Likes, Google +1 и количество твитов для оценки популярности статьи. Тем не менее, метрики из других социальных сетей могут быть легко учтены. Все, что вам нужно сделать, это создать базу данных со счетчиками социальных сетей из интересующих вас сетей и расширить класс SocialMediaPopularity, чтобы обрабатывать их соответствующим образом.
Заключительные комментарии по реализации
Чтобы иметь возможность расширить реализацию, вы должны хорошо понимать, как работает Data Envelopment Analysis. Это описано в предыдущей статье, поэтому обязательно прочтите руководство, прежде чем приступать к каким-либо изменениям. Кроме того, чтобы использовать код JAVA, в вашей системе должна быть установлена библиотека lp_solve (см. выше).
Если вы используете реализацию в интересном проекте Напишите нам и мы опубликуем ваш проект в нашем блоге. Также, если вам понравилась статья, пожалуйста, найдите минутку и поделитесь ею в Twitter или Facebook.