コード例 #1
0
ファイル: Apriory.cs プロジェクト: KatrineRoss/my_apriory
        /// <summary>
        /// Возвращает достоверность правила.
        /// </summary>
        /// <param name="X">Элевент из левой части правила.</param>
        /// <param name="XY">Комбинация Х с элементов из правой части правила.</param>
        /// <param name="allFrequentItems"></param>
        /// <returns></returns>
        private double GetConfidence(string[] X, string[] XY, ItemsDictionary allFrequentItems)
        {
            double supportX  = FindItemByProducts(X, allFrequentItems).Support;
            double supportXY = FindItemByProducts(XY, allFrequentItems).Support;

            return(supportXY / supportX);
        }
コード例 #2
0
ファイル: Apriory.cs プロジェクト: KatrineRoss/my_apriory
        /// <summary>
        /// Генерация ассоциативных правил.
        /// </summary>
        /// <param name="allFrequentItems">Все наиболее встречающиеся элементы.</param>
        /// <returns></returns>
        private HashSet <Rule> GenerateRules(ItemsDictionary allFrequentItems)
        {
            var rulesList = new HashSet <Rule>();

            foreach (var item in allFrequentItems)
            {
                if (item.ProductSet.Length > 1)
                {
                    IEnumerable <string[]> subsetsList = GenerateSubsets(item.ProductSet);

                    foreach (var subset in subsetsList)
                    {
                        string[] remaining = GetRemaining(subset, item.ProductSet);
                        Rule     rule      = new Rule(subset, remaining, 0);

                        if (!rulesList.Contains(rule))
                        {
                            rulesList.Add(rule);
                        }
                    }
                }
            }

            return(rulesList);
        }
コード例 #3
0
ファイル: Apriory.cs プロジェクト: KatrineRoss/my_apriory
        /// <summary>
        /// Запускает процесс поиска ассоциативных правил.
        /// </summary>
        /// <param name="minSupport">Минимальная поддержка (определяется частотностью вхождения элемента).</param>
        /// <param name="minConfidence">Минимальная надёжность (определяется тем, как часто правило срабатывает).</param>
        /// <param name="items">Список предметов.</param>
        /// <param name="transactions">Список транзакций.</param>
        /// <returns></returns>
        public Output processTransaction(double minSupport, double minConfidence, IEnumerable <string> items, ApriorySet[] transactions)
        {
            IList <Item>    frequentItems    = GetL1FrequentItems(minSupport, items, transactions);
            ItemsDictionary allFrequentItems = new ItemsDictionary();

            allFrequentItems.ConcatItems(frequentItems);
            IDictionary <string[], double> candidates = new Dictionary <string[], double>();
            double transactionsCount = transactions.Length;

            do
            {
                candidates    = GenerateCandidates(frequentItems, transactions);
                frequentItems = GetFrequentItems(candidates, minSupport, transactions.Length);
                allFrequentItems.ConcatItems(frequentItems);
            } while (candidates.Count != 0);

            HashSet <Rule> rules       = GenerateRules(allFrequentItems);
            IList <Rule>   strongRules = GetStrongRules(minConfidence, rules, allFrequentItems);

            return(new Output
            {
                StrongRules = strongRules,
                FrequentItems = allFrequentItems
            });
        }
コード例 #4
0
        public static string printFrequentItems(ItemsDictionary items)
        {
            string result = "";

            foreach (Item item in items)
            {
                result += printProductSet(item.ProductSet) + "\n";
            }

            return(result);
        }
コード例 #5
0
ファイル: Apriory.cs プロジェクト: KatrineRoss/my_apriory
        /// <summary>
        /// Добавление нового правила, удовлетворяющего условию минимальной достоверности.
        /// </summary>
        /// <param name="rule">Правило.</param>
        /// <param name="XY">Правая часть правила (результирующий набор)</param>
        /// <param name="strongRules">Список правил, удовлетворяющих минимальной достоверности.</param>
        /// <param name="minConfidence">Минимальная достоверность.</param>
        /// <param name="allFrequentItems">Все частовстречающиеся элементы.</param>
        private void AddStrongRule(Rule rule, string[] XY, List <Rule> strongRules, double minConfidence, ItemsDictionary allFrequentItems)
        {
            double confidence = GetConfidence(rule.X, XY, allFrequentItems);

            if (confidence >= minConfidence)
            {
                Rule newRule = new Rule(rule.X, rule.Y, confidence);
                strongRules.Add(newRule);
            }

            confidence = GetConfidence(rule.Y, XY, allFrequentItems);

            if (confidence >= minConfidence)
            {
                Rule newRule = new Rule(rule.Y, rule.X, confidence);
                strongRules.Add(newRule);
            }
        }
コード例 #6
0
ファイル: Apriory.cs プロジェクト: KatrineRoss/my_apriory
        /// <summary>
        /// Получение ассоциативных правил, удовлетворяющих условие минимальной достоверности.
        /// </summary>
        /// <param name="minConfidence">Минимальная достоверность.</param>
        /// <param name="rules">Хэш с правилами.</param>
        /// <param name="allFrequentItems">Все частовстречающиеся элементы.</param>
        /// <returns></returns>
        private IList <Rule> GetStrongRules(double minConfidence, HashSet <Rule> rules, ItemsDictionary allFrequentItems)
        {
            var strongRules = new List <Rule>();

            foreach (Rule rule in rules)
            {
                string[] xy = new string[rule.X.Length + rule.Y.Length];

                xy = rule.X.Concat(rule.Y).ToArray();

                AddStrongRule(rule, xy, strongRules, minConfidence, allFrequentItems);
            }

            //strongRules.Sort();
            return(strongRules);
        }