Ospan Matrix или второе дыхание для Case-Based Reasoning
21 век стал временем для алгоритмов машинного обучения, и мы уже давно привыкли к ним и их постоянному улучшению. Зачастую мы говорим о разных heuristic алгоритмах или нейронных сетях, но порой нам необходимо использовать другие более линейные алгоритмы машинного обучения. Например: Case-Based Reasoning (CBR).
Осенью уже прошлого года передо мной стояла задача использовать CBR в проекте умного дома, что было само-собой не самой простой задачей, так как применение CBR с k-nearest neighbor не давала высоких результатов аккуратности классификации даже с использованием Mahalanobis Distance для определения расстояния между кейсами. Пришлось придумать свое решение для измерения расстояния, которое было названо Ospan Matrix. Если хотите узнать зачем искать конверсионную матрицу с помощью эвристических алгоритмов, прошу Вас к прочтению этой статьи.
Проблема
Проблема проекта была в том, что входные данные в алгоритм были очень большими в основном являлись бинарными. Другими словами, входные данные представляли собой вектор их 14 элементов, из которых только два (usertypeI и usertypeO) имели три состояния, остальные же были бинарными.
# Пример стандартных входных данных
{'healthO': 0, 'foodO': 0, 'entertainmentI': 0, 'securityO': 0, 'workO': 0, 'output': 1, 'workI': 0, 'healthI': 0, 'id': 0, 'energyI': 1, 'energyO': 0, 'securityI': 0, 'entertainmentO': 1, 'usertypeI': 2, 'usertypeO': 3, 'foodI': 0}
Решение
Стандартные алгоритмы расчета расстояний k-nearest neighbor не очень эффективны, когда данные представляют собой бинарные данные. В моем случае мы использовали генетический алгоритм для поиска convolution матрицы, чтобы эффективность поиска увеличились. В среднем алгоритм показал увеличение на 10% в сравнении с Mahalanobis дистанциями.
Все данные и вики по проекту можно посмотреть на ГитХабе:
https://github.com/BiggyBaron/VirtualAssistant