Пару недель мне нужно было использовать некоторые модели машинного обучения Weka. Я знал, что Weka славится своим графическим интерфейсом, но не знал, что могу получить доступ к их библиотеке с помощью кода Java. К счастью, вы можете использовать Weka с кодированием на Java, функции объясняются на https://weka.sourceforge.io/doc.stable/.

В отличие от многих библиотек Python, таких как Pandas и Tensorflow, Weka Java не дает много прямых примеров того, как выполнять функции. Пришлось искать в сети примеры того, как правильно вызывать функции, и это был долгий процесс. Этот пост в блоге представляет собой краткое руководство по вызову основных функций для Weka Java. Надеюсь, это руководство поможет другим использовать эту замечательную библиотеку для машинного обучения. Weka Java отлично подходит для машинного обучения на быстрых потоковых данных, многие функции выполняются быстро, а данные обрабатываются по образцу/строке данных (каждая строка кадра данных называется экземпляром).

Мне очень понравилось изучать weka, потому что они используют «другую» терминологию и думают о теме машинного обучения по сравнению с обычным машинным обучением python/pandas/scikit_learn/tensorflow/pytorch.

Загрузите библиотеки

Я использовал ядро ​​​​ijava для запуска фрагментов кода weka в jupyter-notebook; см. ссылку в разделе «Справочник». Импортируйте необходимые файлы jar. Вы можете использовать *.jar для импорта всех зависимых файлов jar, как я сделал ниже, если вы не можете найти сжатый/толстый jar со всеми необходимыми исполняемыми файлами классов.

Основная функциональность weka для начала классификации!

[0] Загрузить CSV-файл

Глядя на изображение выше, у нас было 4 функции столбца и один столбец метки/класса в файле csv. Метка «связь» — это просто имя фрейма данных, атрибут — это столбец, а все строки данных внутри CSV-файла называются экземплярами. Одна строка называется экземпляром.

[1] Создание экземпляров данных из массивов потоковых данных/java.

Функция data_generator успешно создала «фрейм данных»/экземпляры данных.

[2] Изменить тип класса с числового на номинальный или двоичный.

На изображении выше обратите внимание на слово «числовой» рядом с функциями атрибута и меткой класса. По мере того, как вы будете больше работать с библиотекой weka, некоторые функции, такие как SMOTE или SGD, сообщат, что они требуют, чтобы метка класса была типа «номинальной». Номинальный тип — это строковые значения. Вы можете использовать фильтр (я предпочитаю думать об этом как о методе/конвейере предварительной обработки для преобразования данных), чтобы изменить тип данных метки класса с числового на номинальный. Функцию фильтра можно использовать для многих других преобразований данных, а не только для изменения типа данных столбца.

Если эта команда не работает, я обнаружил, что функция Discretize также может преобразовывать числовые столбцы в номинальные столбцы.

[3] Обучить классификатор

Помимо обучения модели, вы можете обновить существующую модель, используя новую выборку данных/экземпляр. Обновление модели в отношении новой выборки данных аналогично обновлению градиентов с помощью вычисленных потерь (т. е. с использованием GradientTape в Tensorflow) в отношении новой выборки данных; мы видим, что вес модели был изменен из-за «updateClassifier».

[4] Оценка модели

Данные, которые я использовал, были случайно составленными данными, поэтому вполне разумно, что точность может составлять 54%.

Библиотека Weka большая! Функции, которые я упомянул здесь, являются просто необходимыми функциями для запуска базовой модели. В целом, библиотека Weka очень полезна, но ей не хватает примеров использования функций, и поэтому трудно получить доступ/преобразовать данные легко, как в pandas/python.

Как всегда удачных тренировок! 👋

Рекомендации

  1. Запуск фрагментов кода Weka Java в juyper-notebook был возможен благодаря ядру iJava: https://github.com/SpencerPark/IJava.
  2. Загрузка файла jar Weka: https://jar-download.com/artifacts/nz.ac.waikato.cms.weka/weka-stable/3.8.0/source-code. Обратите внимание, что если вы используете более новые функции, такие как SMOTE, они не включены в загрузку. Поэтому вам нужно будет искать эти jar-файлы отдельно и связывать их со своей записной книжкой.
  3. Библиотека Века. https://weka.sourceforge.io/doc.stable/