private IDictionary<Type, TypedLearningPair> GetRandomNegativePairs(HistorySnapshot snapshot)
        {
            IDictionary<Type, TypedLearningPair> learningDict = new Dictionary<Type, TypedLearningPair>();
            int count = snapshot.Events.Count;
            int types = Enum.GetNames(typeof(EventName)).Length;
            Random rnd = new Random();
            for (int i = 0; i < count; i++)
            {
                string name = ((EventName) rnd.Next(types)).ToString();
                Type type = Significator.ToSignificantType(name);
                if (type == null)
                    continue;

                TypedLearningPair pair;
                if (!learningDict.ContainsKey(type))
                {
                    pair = new TypedLearningPair(type, false);
                    learningDict.Add(type, pair);
                }
                else
                {
                    pair = learningDict[type];
                }
                pair.Modify(Significator.ToSignificant(name));
            }
            return learningDict;
        }
        private IDictionary<Type, TypedLearningPair> GetPairs(HistorySnapshot snapshot, bool isTarget)
        {
            IDictionary<Type, TypedLearningPair> learningDict = new Dictionary<Type, TypedLearningPair>();
            foreach (IProcessAction action in snapshot.Events)
            {
                Type type = Significator.ToSignificantType(action.EventName);
                if (type == null)
                    continue;

                TypedLearningPair pair;
                if (!learningDict.ContainsKey(type))
                {
                    pair = new TypedLearningPair(type, isTarget);
                    learningDict.Add(type, pair);
                }
                else
                {
                    pair = learningDict[type];
                }
                pair.Modify(Significator.ToSignificant(action.EventName));
            }
            return learningDict;
        }