private double GetConditionalProbability(List <double[]> vectors, int childId, int parentId, int childValue, int parentValue)
        {
            double probabilityChildAndParentEqual = (double)VecotorUtility.CountNumberOfTimesColumnsEquals(vectors, childId, parentId, childValue, parentValue) / vectors.Count;
            double probabilityParentEqualsValue   = (double)VecotorUtility.CountNumberOfTimesColumnEquals(vectors, parentId, parentValue) / vectors.Count;

            return(probabilityChildAndParentEqual / probabilityParentEqualsValue);
        }
예제 #2
0
 public override void Train(List <double[]> vectors)
 {
     foreach (var column in VecotorUtility.GetColumns(vectors))
     {
         int    numberOfZeros = column.Where(num => num == 0).Count();
         double probability   = (double)numberOfZeros / column.Count;
         this.featuresProbabilityIfZero.Add(probability);
     }
 }
        public ClassifierViewModel(String filePath)
        {
            this.vectors = FileUtility.ConvertCSVToList(filePath);
            var fileName = Path.GetFileName(filePath);

            if (fileName != "ArtificialData.csv")
            {
                VecotorUtility.ConvertListToBinary(vectors);
            }


            this.Classes = new List <Class>(CreateClasses(vectors));
        }
        private WeightedEdge <Node> GetWeightedEdge(Node source, Node target, List <double[]> vectors)
        {
            double weight = 0;
            double rows   = vectors.Count;

            for (int i = 0; i < 2; i++)
            {
                for (int j = 0; j < 2; j++)
                {
                    var    targetId = target.Id;
                    var    sourceId = source.Id;
                    double probIJ   = VecotorUtility.CountNumberOfTimesColumnsEquals(vectors, sourceId, targetId, i, j) / rows;
                    double probI    = VecotorUtility.CountNumberOfTimesColumnEquals(vectors, sourceId, i) / rows;
                    double probJ    = VecotorUtility.CountNumberOfTimesColumnEquals(vectors, targetId, j) / rows;
                    weight += probIJ * Math.Log(probIJ / (probI * probJ), 2);
                }
            }

            return(new WeightedEdge <Node>(source, target, weight));
        }
        public override void Train(List <double[]> vectors)
        {
            var nodes = new Queue <Node>();
            var root  = this.GetRootNode();

            root.probabilityGivenParentZero = (double)VecotorUtility.CountNumberOfTimesColumnEquals(vectors, root.Id, 0) / vectors.Count;
            root.probabilityGivenParentOne  = root.probabilityGivenParentZero;
            nodes.Enqueue(root);

            while (nodes.Count > 0)
            {
                var parentNode = nodes.Dequeue();

                foreach (var childNode in visualGraph.GetOutNeighbours(parentNode))
                {
                    childNode.probabilityGivenParentZero = GetConditionalProbability(vectors, childNode.Id, parentNode.Id, 0, 0);
                    childNode.probabilityGivenParentOne  = GetConditionalProbability(vectors, childNode.Id, parentNode.Id, 0, 1);
                    nodes.Enqueue(childNode);
                }
            }
        }