1

나는 HMM의 초보자이지만 UCI 인간 활동 인식 데이터 세트에 Jahmm을 사용하여 코드를 작성하려고했습니다. 데이터 세트는 561 개의 피쳐와 7352 개의 행을 포함하며 가속도계와 자이로 스코프의 xyz 관성 값을 포함하며 주로 걷기, 위층 걷기, 아래층 산책, 앉기, 서기 및 배치와 같은 6 가지 활동을 인식하기위한 것입니다. XYZ 관성 값정확도를 올리는 방법은 무엇입니까? - 지속적인 숨겨진 마르코프 모델 (Jahmm)을 사용하여 활동 인식

: 지금까지, 나는 다음과 같은 시도 6 개 활동 각각에 대해

  1. , 나는 만 사용 ( 가속도계와 자이로 스코프 모두에 대해) 각 축 6 HMM에 훈련 대응하는 HMM에 대한 데이터 열 . 각 활동에 대해서도 모든 축의 확률에 대해 (즉, 테스트 데이터에 적용 할 때) 동등한 가중치를 적용하고이를 모두 합산하여 각 활동의 합계를 구했습니다. 최대 확률은 선택된 것입니다. (저는 에 행운이 없었습니다. 다른 사람에 대해서도 같은 시간에 초저녁에 초 고감도 활동이 있습니다.) 참고 : "ObservationReal", 6 주 (실제로 상태 2 ~ 10) 및 단지 균등하게 HMM을위한 초기 값을 나눈 것입니다. 때로는 일부 의 NaN 값을 얻습니다.
  2. 위의 방법을 적용해도 의 데이터를 먼저 스케일링 (z- 스코어링) 한 후 시도했지만 아무런 효과가 없습니다.
  3. 또한 "ObservationVector"로 관성 값 코딩을 시도했지만 하지만 초기 Opdfs를 설정하는 방법을 알지 못했습니다 ( 긍정적 인 한정 매트릭스 여야 함). 내가 어떤 괜찮은 결과를 얻을 수 없기 때문에 기능 세트는 (그래서, 조정 된 데이터 Jahmm에서 실행 너무 많은 것을 발견

    1. : 특징 값으로

    즉, 정규화 된 데이터 (즉, 정규화 된 데이터 [-1,1])를 사용하여 열차를 실행하고 PCA 및 상관 관계에 대한 R 데이터를 테스트 한 후을 Jahmm 코드 (6 개의 6- 각각의 활동에 대해, 테스트 데이터로 최대 확률을 취하는 상태 HMM), 그리고 결과는 여전히 n 너무 좋아. 특히 앉는 활동 인 은 항상 약 20 %의 정확도를 보입니다. (위의 과 동일한 매개 변수)

  4. R (mtry = 8)과 동일한 데이터로 randomForest를 실행하고 중요도 값을 얻었습니다. 나는 119 개의 변수로 기관차와 정적 인 활동을 분리 한 다음, 89 개의 기능 (RF 중요도 값 기준)과 정적 활동 (Sitting, Standing, 5 가지 변수로 배치. 기관차와 정적 활동을 분리하는 것은 쉽습니다 (2 개 주, 100 %).이 방법은 HMM 매개 변수를 조정하여 전체 정확도가 86 % 밖에되지 않았습니다. (두 번째 레벨의 삼진 상태 HMM)
  5. 모든 활동에 대해 하나의 HMM을 6 가지 상태 (하나의 문서에서 읽은 것처럼 에 해당)로 교육했습니다. 하지만 그 후에 비터 비를 사용하는 방법을 알아내는 데는 을 사용할 수 없습니다.Viterbi에 List<Observation O> 테스트 시퀀스가 ​​필요하다고 알려주지 만 테스트 데이터로는 분명히 List<List<ObservationReal>>이 있습니다.

가 나는 또한 R에서 HMM 패키지를 시도 :

  1. depmixS4 - 비터가없는, 내가 어떻게 테스트 데이터 (와 사후 확률을 얻는 아무 생각이 그것은 probs을 제공합니다 와 함께 열차 데이터 만); 패키지의 작성자에게 연락을 시도했지만 그는 나를 도와 주려고했지만 을 시도해 보도록 지시 한 코드는 오류가 있습니다 (아직 이메일을 보내지 않았습니다).
  2. RHmm - 처음에는 매력처럼 작동합니다. 모든 기차 데이터가있는 단 하나의 6- 상태 HMM 을 교육했지만 테스트 데이터가 포함 된 나쁜 viterbi 시퀀스의 결과로 생성됩니다.

지금까지 내가 HMM에 대해 읽은 바에 따르면, 이러한 결과는 HMM에 비해 너무 낮습니다. 내가 뭔가 잘못하고 있는거야? 내가 말한 기술을 사용하기 전에 더 많은 사전 처리를해야합니까? HMM/Jahmm에서 데이터가 실제로 너무 큽니까? 나는 그것을 overfitting합니까? 지금 당황 스럽지만 실제로 프로젝트에 대한 활동 승인 및 HMM을 수행해야합니다. 나는 계속해서 HMM을 위해 Jahmm과 R을 시도한 사람들로부터 제안/피드백을 얻게되어 매우 기쁩니다. 나는 또한 그것이 다른 언어를 연구하기 위해 열리 며, 그것이 마침내 효과가 있다는 것을 의미합니다.

+0

귀하의 질문은 꽤 길며 HMM은 매우 전문화 된 주제입니다. 질문을 기초로 줄이거 나 여러 개의 작은 질문으로 나누면 대답 기회를 높일 수 있습니다. 예 : "초기 Opdfs를 설정하는 방법 파악"(그게 무엇이든)은 아마도 당신이 분리 할 수있는 질문 일 것입니다. – zapl

+0

감사합니다. 나는 그들을 제안 된대로 분리 할 것이다. – user3416268

답변

1

확장 가능한 Java 라이브러리를 검색하는 중에 질문에 비틀 거리고 있습니다. HMM을 올바르게 훈련하지 않은 것 같습니다. HMM을 처음 사용했을 때 올바른 결과를 얻을 수 없었습니다. 저는 R을 사용하여 HMM을 테스트하고 테스트했습니다. 여기에 도움이 될만한 몇 가지 제안이 있습니다.

  1. 상태 및 관찰 가능한 확률을 초기화 할 때 임의의 초기 상태를 올바르게 지정하십시오. 다음은 HMM 라이브러리를 사용하는 R 코드 스 니펫입니다.

    library(HMM) 
    .... 
    ... 
    ranNum<-matrix(runif(numStates*numStates, 0.0001, 1.000),nrow=numStates,ncol=numStates) 
    transitionInit <- ranNum/rowSums(ranNum) 
    
    
    ranNum<-matrix(runif(numStates*numSymbols, 0.0001, 1.000),nrow=numStates,ncol=numSymbols) 
    emissionInit <- ranNum/rowSums(ranNum) 
    rowSums(emissionInit) 
    
    hmm = initHMM(c(1:numStates),symbols,transProbs=transitionInit,emissionProbs=emissionInit) 
    
  2. 행을 짧은 시퀀스로 잘라보십시오. 슬라이딩 윈도우 기법을 사용하여 잘라내어 재교육을 피하고 시간을 절약하기 위해 여분의 슬라이스 기술을 제거했습니다.

  3. 당신은 정수 또는 기호

  4. 에 의해 관찰 된 문자열을 대체하여 메모리를 절약 할 수 있습니다 나는 BaumWelch를 사용하여 HMM 훈련하는 다음과 같은 사용 가능성 (안 확률)을 결정하기 위해 logForwardProbabilties를 측정 하였다. 당신은 순서

    bw = baumWelch(hmm,trainSet,maxIterations=numIterations, delta=1E-9, pseudoCount=1E-9) 
    
    logForwardProbabilities <- forward(bw$hmm,validationSet[cnt,]) 
    vProbs<-sum(logForwardProbabilities[,seqSize]) 
    

    의 최종 로그 가능성을 얻기 위해 각 국가의 대수 근사 합계해야하는이 음수, 당신은 훈련 6 HMM에 각을 계산 한 후 더 큰이 나타내는 것 중 볼 수있다 시퀀스.

이 정보가 나 또는 다른 사람에게 도움이되기를 바랍니다. 너무 늦지 않았다면.