Прошу прощения за довольно высокоуровневое описание без особого обоснования того, почему оно работает, но вы можете легко заполнить книги, отвечающие на этот вопрос, и уже 13:00, поэтому я должен сделать его кратким:
В дополнение к записи диапазона допустимых размеров для коробок и рюкзаков необходимо определить распределение вероятностей. Скорее всего, вы просто использовали бы (2D) нормальное распределение, а затем записали бы среднее значение и изменение вместо диапазона. Сделайте то же самое для переменных формы, цвета и т. Д. С подходящим распределением вероятности.
Затем сгенерируйте два набора данных с несколькими сотнями точек данных, таких как:
p_1 = (shape=rectangle, color=black, width=12, height=34)
p_2 = (shape=circle, color=red, width=34, height=11)
...
Для одного из наборов вручную классифицируйте их как объект, который лучше всего соответствует описанию. Это станет вашим набором проверки.
Возьмите другой набор данных и обучите алгоритм классификации, такой как Линейный дискриминант Фишера , использующий эти данные. Вы получаете преобразование T
, которое максимизирует «расстояние» между классами (группами точек данных, представляющих объект) и минимизирует «расстояние» между точками, принадлежащими к одной группе.
Когда ваша программа обнаруживает новый объект со свойствами
o = (shape=rectangle, color=black, width=42, height=26)
вы применяете преобразование, полученное из LD Фишера, и измеряете корреляцию (скалярное векторное произведение) для преобразований точек данных, которые вы классифицировали как, то есть вычисляете (T*o)*(T*p_backpack)'
и (T*o)*(T*p_box)'
, которые относятся к вероятности того, что объект o является собственно рюкзак / коробка.