Классификация данных: размеры обучающих и тестовых векторов - PullRequest
1 голос
/ 12 января 2010

У меня есть приложение, которое решает, будет ли человек махать рукой, бегать или ходить. Идея в том, что я сегментировал действие, скажем, ручную волну, по его позам. Допустим,

Пример;

for human1:pose7-pose3-pose7-..... represents handwave
for human3:pose1-pose7-pose1-..... represents handwave
for human7:pose1-pose1-pose7-..... represents handwave
for human20:pose3-pose7-pose7-..... represents handwave

for human1 pose11-pose33-pose77-..... represents walking
for human2 pose31-pose33-pose77-..... represents walking
for human3 pose11-pose77-pose77-..... represents walking
for human20 pose11-pose33-pose11-..... represents walking

и я использовал вышеупомянутые векторы для обучения SVM и Neural Net в Matlab ..

Теперь я тестирую с ним тестовые изображения. Я снова разделил позы на тестовые изображения.

Для векторных размеров тестовых и обучающих наборов в MATLAB; SVM и Neural Net требуют одинакового размера вектора. Чтобы это работало;
Если я добавлю 0 (предположим, что это pose0 - это неправильная поза), чтобы сделать размеры равными, я получу действительно хорошую производительность.
Если я скопирую исходные позы в начале и добавлю их в конец, пока размеры не станут равными, производительность уменьшится.

Например;

train set: pose1-pose2-pose4-pose7-pose2-pose4-pose7
(1st method)test set: pose3-pose1-pose4-0-0-0-0 or
(2nd method)test set: pose3-pose1-pose4-pose3-pose1-pose4-pose3

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

У вас есть идеи? Привет

Ответы [ 2 ]

2 голосов
/ 13 января 2010

В вашем случае ваши данные состоят из набора экземпляров, каждый из которых имеет ряд функций (представляет собой слот, как в PoseSlot1, PoseSlot2, ..., PoseSlotN) и значение класса (размахивание рукой, бег или ходьба ).

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

Стандартный способ решения этой проблемы - пометить эти пустые слоты пропущенным значением , предполагая, что ваш алгоритм машинного обучения может обрабатывать пропущенные значения.

f1     f2    f3    f4    f5    f6    f7    class
-------------------------------------------------
pose1,pose2,pose4,pose7,pose2,pose4,pose7,running
pose3,pose1,pose4,    ?,    ?,    ?,    ?,walking

Теперь первый метод добавления pose0, который вы использовали, - это упрощение использования ? для пропущенного значения (аналогично добавлению новой позы для обозначения пропущенного значения вместо явного значения ?)

Другой способ повторения значений на самом деле создает проблему, а не решает ее, если вы об этом думаете ... вы фактически создаете взаимосвязанные функции, и, как вы знаете, большинство алгоритмов машинного обучения лучше всего работают с независимым набором функций ( обычно решается выполнением выбора функции в качестве шага предварительной обработки)

2 голосов
/ 12 января 2010

Я не думаю, что было бы неразумно получать лучшую производительность от вашего первого метода. Я предполагаю, что вы имеете в виду лучшую производительность, как в лучшей классификации. Я полагаю, что причиной этого будет то, что последовательности ручных волн обычно короче. Таким образом, когда вы заполняете «недопустимые» позы, вам намного легче различать различные действия с помощью того, включают ли они недопустимые позы, чем то, что они включают в себя.

...