public DiscernibilityMatrix(DecisionSystem ds,IEnumerable<int> reduct, double ruleValue) { var sa = new StandardApproximationSpace(ds, reduct); RuleValue = ruleValue; var columns = sa.LowerApproximation(RuleValue); //so sánh với các phần tử không thuộc lower approximation var rows = ds.Universe.Where(p => columns.All(p2 => p2[0] != p[0])).Where(p => p[ds.DecisionAttributes[0]] != RuleValue); Matrix = new List<List<List<pairID>>>(); foreach (var column in columns) { var dataRow = new List<List<pairID>>(); foreach (var row in rows) { var dataInstances = new List<pairID>(); foreach (var header in reduct) { if (row[header] != column[header]) { dataInstances.Add(new pairID(header, int.Parse(column[header].ToString()))); } } if(dataInstances.Count!=0) dataRow.Add(dataInstances); } if(dataRow.Count!=0) Matrix.Add(dataRow); } }
// Current only support only one denpendent attribute, // which is decision attr in DecisionSystem object private float CalcDependencyDegree(IEnumerable<int> targetAttrs) { // cardinal number of object univers StandardApproximationSpace apprSpace = new StandardApproximationSpace(this.DS, targetAttrs); int posCardNum = apprSpace.PositiveRegion(this.DS.DecisionAttribute).Count(); float dependDegree = (float)posCardNum / this.DS.ObjectCount; return dependDegree; }