The user's context recognition is a supervised learning problem in which an instance \(\mathbf {x}\)  is associated to multiple concepts \(\mathbf {y}\)  (aka classes in machine learning). The concepts are organized in a ground-truth hierarchy \(\mathcal {H} = (C, I)\) , which is a direct acyclic graph (DAG) where nodes \(C = \lbrace 1,\dots ,c\rbrace \)  are the concepts and edges \(I \subset C \times C\)  are is-a relations, i.e., \(I = \lbrace (c_i, c_j) \, | \, c_i, c_j \in C \, \textrm {and}\, c_i \, \textrm {is a child of}\, c_j\rbrace \)  [1]}. The labels of the instances are indicator vectors \(\mathbf {y} \in \lbrace 0,1\rbrace ^c\) , where the \(i\) -th elements is 1 if \(\mathbf {x}\)  belong to \(i\) -th concept in \(\mathcal {H}\)  and 0 otherwise. The machine is trained on a stream of examples \(\mathbf {z}_t = (\mathbf {x}_t, \mathbf {y}_t)\)  drawn from a ground-truth distribution \(P(\mathbf {X}, \mathbf {Y})\)  that is always consistent with a ground-truth hierarchy \(\mathcal {H}\) , i.e., if there is an edge from class \(c_i\)  to class \(c_j\) , then \(y^i = 1\)  implies \(y^j = 1\)  and conversely \(y^j = 0\)  implies \(y^i = 0\) . The goal of this hierarchical classification tasks is to learn a classifier that recognize well the context on future sensor readings.
