Начав изучать библиотеку Weka я обнаружила, что в Интернете очень мало информации о ней на русском языке – как с ней работать и как ее использовать. Эта статья будет вводной для знакомства с библиотекой.

Что такое WEKA?

Начнем с того, что WEKA – это библиотека для анализа данных и машинного обучения, написанная на Java. Название расшифровывается как Waikato Environment for Knowledge Analysis. Это проект Университета Waikato в Новой Зеландии. Weka представляет собой набор современных алгоритмов машинного обучения и инструментов предварительной обработки данных. Скачать ее можно на сайте.

Weka
Weka

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

Загрузка данных в WEKA

Интерфейс WEKA

Открываем Weka. Weka содержит несколько приложений для работы с данными: Explorer, Experimenter, KnowledgeFlow, Workbrench, Simple CLI. Нас интересует Explorer. Это основной  графический интерфейс Weka. Explorer содержит 7 различных панелей.

Интерфейс WEKA
Интерфейс WEKA

Загрузка данных

Для начала загрузим данные. Делается это в панели Preprocess. Нажимаем Open file… и выбираем нужный файл. Для хранения данных Weka использует формат ARFF. ARFF – это аббревиатура от Attribute-Relation File Format. Файл типа ARFF выглядит следующим образом:

Данные в формате ARFF
Данные в формате ARFF

Файл ARFF состоит из двух частей: в первой части находится информация о данных – список атрибутов и их типы, а во второй части, после @data – сами данные. Первая строка файла – это название самого файла.

Weka также позволяет открывать файлы других типов. Для этого используется конвертер.

Предварительная обработка данных

Предварительная обработка данных проводится в панели Preprocess.

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

Для начала изучим данные. Наш набор данных состоит из 3276 примеров и 10 атрибутов.

Открытие данных в WEKA
Открытие данных в WEKA

Пропуски

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

Для того, чтобы заполнить пропуски в WEKA существует 2 фильтра: ReplaceMissingValues, который заполняет пропуски модой и средним значением и ReplaceMissingWithUserConstant, который заполняет пропуски заданным пользователем значением. Воспользуемся фильтром ReplaceMissingValues. Найти этот фильтр можно нажав Choose… и выбрав weka→filters→unsupervised→attribute→ReplaceMissingValues. Применим данный фильтр, нажав Apply.

Преобразование типа данных

Для того, чтобы мы могли работать с разными алгоритмами преобразуем тип атрибута potability в номинальный тип. Для этого воспользуемся фильтром NumericToNominal (находится он там же, где и предыдущий) и в настройках фильтра в строке attributeIndices укажем значение last (последний атрибут). Затем нажмем Apply.

Обучение

В панели Classify мы можем выбрать алгоритм машинного обучения и обучить наши данные.

Результаты обучения в WEKA зависят от типа класса, который мы предсказываем. Например, если мы хотим предсказать тип nominal, то мы получаем точность классификации и матрицу ошибок. А если мы хотим предсказать числовой (numeric) тип, то точность классификации и матрицу ошибок мы не получаем. В этом случае мы оцениваем качество модели по коэффициенту корреляции и другим характеристикам.

Выберем алгоритм RandomForest. Находится он в папке trees.

Для обучения модели будем использовать кросс-валидацию.

Кросс-валидация (перекрестная проверка) – это статистический метод оценки модели. В кросс-валидации данные разбиваются на k подмножеств, которые по очереди используются в обучающей и тестовой выборках. Одно подмножество используется для тестирования, а остальные (k-1) – для обучения. Процедура повторяется k раз и в результате мы получаем усредненные результаты. Задать количество подмножеств в WEKA можно в окошке Folds (по умолчанию там 10).

Оставляем значение по умолчанию и нажимаем Start. В результате мы получаем точность обучения, которая равна 66,88%, матрицу ошибок и другие оценки качества модели.

Результаты обучения модели
Результаты обучения модели

Заключение

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

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

Если вам понравилась WEKA и вы хотите изучить ее лучше, то на сайте futurelearn.com есть 3 курса от создателей WEKA – Data Mining with Weka, More Data Mining with Weka, Advanced Data Mining with Weka. К курсам можно присоединиться бесплатно, но тогда доступ к курсам будет ограниченный. Также видеоуроки этих курсов доступны в YouTube.

Комментарии (5)


  1. Divasoft
    21.11.2021 19:43
    +3

    Напомнило https://ru.wikipedia.org/wiki/GPSS который в институте много лет назад преподавали нам.


    1. lxsmkv
      21.11.2021 20:45

      Нам преподавали WinGPSS, с графической оболочкой. Дискретная симуляция — интересно. Мы аэропорт моделировали в курсовой. Жаль только, что не настолько распространненая область в IT.


  1. p-oleg
    21.11.2021 22:17

    Когда искал библиотеку для ML на Java, остановился на Deeplearning4j. У них на Github есть хорошие примеры для вхождения в тему, типа классики для классификатора цветков ириса и более сложные. Weka видел но как-то не зашло.

    Но вообще на Java ML библиотек немного, балом правит питон.


    1. Goupil
      22.11.2021 00:00

      В свое время много пользовался WEKA, так как она входит в программный пакет ImageJ-Fiji. Она довольно неплохо позволяла делать semi-supervised segmentation на сложных биологических картинках как раз с применением random forest. Сейчас я конечно же написал бы это в виде скрипта на питоне,или вообще применил бы u-net, но тогда неплохо работало.


    1. YuryB
      22.11.2021 22:28

      так на сколько я понимаю на пайтоне в основном обвязки вокруг плюсов. в принципе есть graalvm из под неё можно запускать всё что компилируется в llvm, т.е. и питон и Р и си++