- Липень 7, 2014
- Василіс Врініотис
- . 1 коментар
У попередніх статтях ми детально розглянули Моделі сумішей процесу Діріхле і як їх можна використовувати в кластерному аналізі. У цій статті ми представимо реалізацію Java дві різні моделі DPMM: багатовимірна модель нормальної суміші Діріхле, яку можна використовувати для кластерування даних Гаусса, і модель суміші Діріхле-мультиноміальна, яка використовується для кластеризації документів. Код Java має відкритий вихідний код за ліцензією GPL v3 і його можна безкоштовно завантажити Github.
Оновлення: Система машинного навчання Datumbox тепер є відкритою та безкоштовною скачати. Перевірте пакет com.datumbox.framework.machinelearning.clustering, щоб побачити реалізацію моделей суміші процесів Діріхле на Java.
Реалізація моделі суміші процесу Діріхле в Java
Код реалізує модель суміші процесу Діріхле з Gibbs Sampler і використовує Apache Commons Math 3.3 як матричну бібліотеку. Він ліцензований під GPLv3, тому не соромтеся його використовувати, змінювати та вільно розповсюджувати, і ви можете завантажити реалізацію Java з Github. Зауважте, що всі теоретичні частини методу кластеризації ви можете знайти в попередніх 5 статтях і детальні коментарі Javadoc для реалізації у вихідному коді.
Нижче ми наведемо опис високого рівня коду:
1. Клас DPMM
DPMM є абстрактним класом і діє як база для різних моделей, реалізує Процес китайського ресторану і містить Згорнутий семплер Гіббса. Він має відкритий метод cluster(), який отримує набір даних у вигляді списку точок і відповідає за виконання кластерного аналізу. Іншими корисними методами класу є getPointAssignments(), який використовується для отримання призначень кластерів після завершення кластеризації, і getClusterList(), який використовується для отримання списку ідентифікованих кластерів. DPMM містить статичний вкладений абстрактний клас Cluster; він містить кілька абстрактних методів, що стосуються управління точками та оцінки заднього pdf, які використовуються для оцінки кластерних призначень.
2. Клас GaussianDPMM
GaussianDPMM є реалізацією багатовимірної моделі нормальної суміші Діріхле і розширює клас DPMM. Він містить усі методи, необхідні для оцінки ймовірностей за припущенням Гаусса. Крім того, він містить статичний вкладений клас Cluster, який реалізує всі абстрактні методи класу DPMM.Cluster.
3. Мультиноміальний клас DPMM
MultinomialDPMM реалізує модель суміші Діріхле-мультиноміальний і розширює клас DPMM. Подібно до класу GaussianDPMM, він містить усі методи, необхідні для оцінки ймовірностей відповідно до припущення мультиноміального-Діріхле, і містить статичний вкладений клас Cluster, який реалізує абстрактні методи DPMM.Cluster.
4. СРС клас
Клас SRS використовується для виконання простої випадкової вибірки з таблиці частот. Він використовується Gibbs Sampler для оцінки нових призначень кластерів на кожному кроці ітераційного процесу.
5. Точковий клас
Клас Point служить кортежем, який зберігає дані запису разом з його ідентифікатором.
6. Apache Commons Math Lib
Бібліотека Apache Commons Math 3.3 використовується для множення матриці, і це єдина залежність нашої реалізації.
7. Клас DMMExample
Цей клас містить приклади того, як використовувати реалізацію Java.
Використання реалізації Java
Користувач коду може налаштувати всі параметри змішаних моделей, включаючи типи моделі та гіперпараметри. У наступному фрагменті коду ми бачимо, як ініціалізується та виконується алгоритм:
List<Point> pointList = new ArrayList<>(); //add records in pointList //Dirichlet Process parameter Integer dimensionality = 2; double alpha = 1.0; //Hyper parameters of Base Function int kappa0 = 0; int nu0 = 1; RealVector mu0 = new ArrayRealVector(new double[]{0.0, 0.0}); RealMatrix psi0 = new BlockRealMatrix(new double[][]{{1.0,0.0},{0.0,1.0}}); //Create a DPMM object DPMM dpmm = new GaussianDPMM(dimensionality, alpha, kappa0, nu0, mu0, psi0); int maxIterations = 100; int performedIterations = dpmm.cluster(pointList, maxIterations); //get a list with the point ids and their assignments Map<Integer, Integer> zi = dpmm.getPointAssignments();
Нижче ми бачимо результати запуску алгоритму на синтетичному наборі даних, який складається з 300 точок даних. Окуляри спочатку були згенеровані 3 різними розподілами: N([10,50], I), N([50,10], I) і N([150,100], I).
Малюнок 1: Діаграма розсіювання демонстраційного набору даних
Алгоритм після виконання 10 ітерацій визначив такі 3 кластерні центри: [10.17, 50.11], [49.99, 10.13] і [149.97, 99.81]. Нарешті, оскільки ми розглядаємо все байєсівським способом, ми можемо не тільки надати одноточкові оцінки центрів кластерів, але й їх розподіл ймовірностей за допомогою формула .
Рисунок 2: Діаграма розсіювання ймовірностей центрів кластерів
На малюнку вище ми зображуємо ці ймовірності; червоні області вказують на високу ймовірність бути центром скупчення, а чорні області вказують на низьку ймовірність.
Щоб використовувати реалізацію Java в реальних програмах, ви повинні написати зовнішній код, який перетворює ваш вихідний набір даних у необхідний формат. Крім того, може знадобитися додатковий код, якщо ви хочете уявити результат, як ми бачимо вище. Нарешті, зверніть увагу, що бібліотека Apache Commons Math включена в проект, і, отже, для запуску демонстрацій не потрібно додаткової конфігурації.
Якщо ви використовуєте реалізацію в цікавому проекті, напишіть нам, і ми розмістимо ваш проект у нашому блозі. Також, якщо вам подобається стаття, знайдіть хвилинку та поділіться нею у Twitter або Facebook.
- AI
- ai мистецтво
- AI арт генератор
- ai робот
- штучний інтелект
- сертифікація штучного інтелекту
- робот зі штучним інтелектом
- роботи зі штучним інтелектом
- програмне забезпечення для штучного інтелекту
- blockchain
- блокчейн конференція AI
- coingenius
- розмовний штучний інтелект
- крипто конференція ai
- dall's
- Датабокс
- глибоке навчання
- у вас є гугл
- навчання за допомогою машини
- Машинне навчання та статистика
- plato
- платон ai
- Інформація про дані Платона
- Гра Платон
- PlatoData
- platogaming
- Програмування
- масштаб ai
- синтаксис
- зефірнет