October 4, 2004
Modeling ADLs with Timed HMMs
Here are some results for using HMM's to recognize ADLs. First about the data set:
This was the dataset that Matthai first recorded at his house. It consists of 17 non-researchers performing 12 activities one from each of 12 classes. The 12 classes were chosen randomly from a total set of 14 classes, so in each user trace there are 2 classes not represented. The classes of activities performed correspond to ADLs on the form that Intel scrounged up that care-givers fill out during home-care visits.
Each user wore an RFID antenna glove and performed their activities in a house that was tagged with 108 RFID tags. The sequence of activities has no information as they were randomly ordered. Each activity was performed atomically with no interruptions. Here are some statistics related to the data:
Activity Class | # of traces in dataset | Average Duration in seconds |
Personal Appearance | 16 | 91 |
Oral Hygiene | 13 | 108 |
Toileting | 15 | 111 |
Hand Washing | 11 | 75 |
Housecleaning | 16 | 134 |
Appliance Usage | 13 | 92 |
Prepare a snack | 12 | 174 |
Prepare a drink | 19 | 135 |
Control the temperature | 15 | 67 |
Laundry | 11 | 146 |
Leisure | 15 | 152 |
Telephone Usage | 17 | 149 |
Infant Care | 17 | 160 |
Take Medication | 14 | 74 |
Here is a graph of the activity durations:
Here is the aggregate of all of those durations approximated by a gamma function
To model this domain with HMMs I segmented each of the traces into their 12 composite activities. I calculated P(RFID objects given activity) for each activity including the possibility of a "nothing" observation. Then I constructed an HMM in which there was one node for each activity. Each node has a self-transition whose probability was calculated based on mean activity duration. Each node also had 13 uniformly distributed out-transitions to the other activity nodes. The HMM started with a uniform prior over all of the activities. I then performed 17 fold cross-validation on the user traces and determined the viterbi path through the state space that corresponded to left out user trace. Here are the results:
Total Number of Activities performed: | 204 | |
Number of missed Activities (False Negatives) | 17 | |
* | Average duration of missed activity | 82 second |
* | Average number of objects touched in a missed activity | 2.3 |
Number of added Activities (False Positives) | 6 | |
Number of confused Activities | 17 | |
* | Toileting interpreted as washing hands | 7 times |
* | Washing hands interpreted as toileting | 1 time |
* | Using a dishwasher interpreted as making a snack | 1 time |
* | Making a drink interpreted as making a snack | 1 time |
* | Personal appearance interpreted as washing hands | 1 time |
* | Personal appearance interpreted as brushing teeth | 2 times |
* | Cleaning interpreted as making a drink | 1 time |
* | Using an appliance interpreted as making a drink | 1 time |
* | Making a drink interpreted as using an appliance | 1 time |
* | Leisure interpreted as controlling temperature | 1 time |
Overall Recall (Correctly guessed activities)/(All true activities) = 160/204 | 78% | |
Overall Precision (Correctly guessed activiites)/(All guessed activities) = 187/193 | 97% |