Pergunta

Eu tenho um aplicativo que decide se um humano está onda de mãos, correndo ou caminhando. A idéia é que eu segmentei uma ação, por exemplo, onda de mão, para suas poses. Digamos

Exemplo;

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

e usei os vetores acima para treinar SVM e rede neural no Matlab ..

Agora eu testo com as imagens de teste. Novamente, eu tenho poses segmentadas para imagens de teste.

Para os tamanhos de vetor de conjuntos de testes e trens no MATLAB; SVM e rede neural requer tamanhos de vetores. Para fazê -lo funcionar;
Se eu anexar 0 (assuma como pose0-Que é uma pose inválida), para tornar os tamanhos iguais, eu tenho um desempenho muito bom.
Se eu copiar poses iniciais no início e anexá -las ao final até que os tamanhos sejam o desempenho igual diminuir.

Por exemplo;

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

Eu esperaria ter uma melhor classificação com o segundo método, pois os valores anexados são valores reais para poses. Mas pose0 não é uma pose real.

Você tem alguma ideia ? Cumprimentos

Foi útil?

Solução

No seu caso, seus dados consistem em uma coleção de instâncias, cada uma com vários recursos (slot poses, como no PosesLot1, PosesLot2, ..., PosesLotn) e o valor da classe (onda de mão, corrida ou caminhada).

Seu problema é que o número de recursos não é o mesmo para todas as classes, o IE Running tem 7 poses enquanto a caminhada tem 3 poses, por exemplo.

A maneira padrão de lidar com esse tipo de questão é marcar esses slots vazios por um Valor ausente, assumindo que seu algoritmo de aprendizado de máquina pode lidar com valores ausentes.

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

Agora, o primeiro método que você usou para anexar pose0 é uma simplificação para usar ? por falta de valor (semelhante a adicionar uma nova pose para denotar um valor ausente, em vez de um explícito ? valor)

A outra maneira de repetir valores realmente cria um problema em vez de resolver um se você pensar bem. Você está na verdade criando recursos correlacionados e, como você sabe, a maioria dos algoritmos de aprendizado de máquina funciona melhor em um conjunto independente de recursos (geralmente resolvidos por executando uma seleção de recursos como etapa de pré-processamento)

Outras dicas

Não acho que seja irracional obter melhor desempenho do seu primeiro método. Presumo que você quer dizer melhor desempenho como em uma melhor classificação. A razão para isso presumo que as seqüências de ondas de mãos sejam normalmente mais curtas. Assim, quando você preenche com "inválido", coloca muito mais fácil distinguir as diferentes ações por meio de incluir poses inválidas do que as poses reais que incluem.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top