예제 #1
0
        private bool CalculateNextStep(float minSupport)
        {
            var tempList = new List <CNode>();

            if (CNodes.First().ElementIDs.Count == 1)
            {
                for (var i = 0; i < CNodes.Count; i++)
                {
                    for (var k = i + 1; k < CNodes.Count; k++)
                    {
                        var newNode = new CNode(CNodes[i].ElementIDs[0]);
                        newNode.AddElement(CNodes[k].ElementIDs[0]);
                        newNode.CalculateSupport(Data.Rows);
                        tempList.Add(newNode);
                    }
                }
            }
            else
            {
                foreach (var groups in CNodes.GroupByElements(CNodes.First().ElementIDs.Count - 1))
                {
                    var groupsCount = groups.Count();
                    for (var i = 0; i < groupsCount - 1; i++)
                    {
                        for (var k = i + 1; k < groupsCount; k++)
                        {
                            if (k == groupsCount)
                            {
                                break;
                            }

                            var newNode = groups.ElementAt(i).FullCopyMe();
                            newNode.AddElement(groups.ElementAt(k).ElementIDs.Last());
                            newNode.CalculateSupport(Data.Rows);

                            if (newNode.Support >= minSupport)
                            {
                                tempList.Add(newNode);
                            }
                        }
                    }
                }
            }

            if (tempList.Count >= 1)
            {
                //this.CNodes = CNode.ClearSame(tempList);// => this action deletes last cNode
                this.CNodes = tempList;
                return(true);
            }
            return(false);
        }
예제 #2
0
        private void _CalculateCNodes(float minSupport, List <CNode> cNodes = null)
        {
            CNodes = cNodes ?? CNodes;

            if (CNodes == null)
            {
                FirstCNodes();
            }

            foreach (var node in CNodes)
            {
                node.CalculateSupport(Data.Rows);
            }

            CNodes.RemoveAll(node => node.Support < minSupport);
            EachLevelOfNodes.Add(CNodes);

            if (CNodes.Count > 1 && CalculateNextStep(minSupport))
            {
                _CalculateCNodes(minSupport, this.CNodes);
            }

            Rules = AssociationRule.GetLastLevelRules(EachLevelOfNodes);
        }