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); }
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); } } }