Classificação de dados: tamanhos de treinamento e vetores de teste
-
20-09-2019 - |
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
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.