private void GetOccurencesList(int position) { var uniques = GetUniqueValues(position); foreach (var unique in uniques) { var rows = GetRowNumbersForOccurences(unique); LastRowOccurences.Add(new Occurence(unique, DecisionRows.Count(array => array[position] == unique), rows)); } ShowLastDigitsAndOccurences(); ShowDecisionsCountMessage(); }
public List <DecisionColumn> CalculateDecisions() { DecisionColumns = new List <DecisionColumn>(); for (int i = 0; i < DecisionRows.First().Length - 1; i++) { var decisionColumn = new DecisionColumn(); var uniqueValues = DecisionRows.Select(value => value[i]).Distinct().ToList(); foreach (var uniqueValue in uniqueValues) { var decisionAttributeOccurence = new DecisionAttributeOccurence(uniqueValue); for (int j = 0; j < DecisionRows.Count; j++) { if (DecisionRows[j][i] == uniqueValue) { var lastColumnDecision = LastRowOccurences.Where(occurence => occurence.RowNumbers.Contains(j + 1)).Select(occurence => occurence.Decision).First(); if (lastColumnDecision == DecisionType.Positive) { decisionAttributeOccurence.PositiveRowNumbers.Add(j + 1); } else { decisionAttributeOccurence.NegativeRowNumbers.Add(j + 1); } } } decisionColumn.Attributes.Add(decisionAttributeOccurence); } DecisionColumns.Add(decisionColumn); } CalculateColumnsEntropies(); CalculateColumnInformationGain(); var rejectedList = DecisionColumns.Where(column => AlreadyUsedIndexes.Contains((int)column.ColumnIndex)); var bestOne = DecisionColumns.Except(rejectedList).MaxBy(column => column.InformationGain); //Nieużyta z największym przyrostem informacji var indexes = new List <int> { (int)bestOne.ColumnIndex }; DoUnknownThing(indexes, null); return(DecisionColumns); }
private double CalculateTotalEntropy() { var decisions = LastRowOccurences.Sum(occurence => occurence.Amount); return(LastRowOccurences.Sum(occurence => (double)occurence.Amount / decisions * occurence.Entropy)); }