public int CompareTo(object other)
        {
            Freq_Item otherTemperature = other as Freq_Item;

            if (this._support_count == otherTemperature._support_count)
            {
                return(0);
            }
            if (this._support_count < otherTemperature._support_count)
            {
                return(1);
            }
            return(-1);
        }
Example #2
0
        /// <summary>
        /// 生成频繁-2项集
        /// </summary>
        public void genFreq_two_itemsets()
        {
            int       count = 0;
            ArrayList temp_freq_itemsets = new ArrayList();
            ArrayList count_ArrayList    = new ArrayList();

            Frequent_Itemset obj_Frequent_Itemset;

            Frequent_Itemset[] obj_freq_itemsets;

            int   count_Support = 0;
            float total_Support = 0;

            int[] freq_one_items_id = new int[freq_one_items.Count];

            for (int n = 0; n < freq_one_items.Count; n++)
            {
                Freq_Item obj = (Freq_Item)freq_one_items[n];
                freq_one_items_id[n] = obj.itemid;
            }

            for (int n = 0; n < freq_one_items_id.Length - 1; n++)
            {
                int itemid_1 = freq_one_items_id[n];
                for (int m = n + 1; m < freq_one_items_id.Length; m++)
                {
                    int itemid_2 = freq_one_items_id[m];
                    // 扫描数据集,得到共同用户数目
                    for (int userid = 1; userid < sourceUsers.Length; userid++)
                    {
                        // 如果该用户喜欢这两个项目
                        if ((discretize[userid][itemid_1] == true) && (discretize[userid][itemid_2] == true))
                        {
                            count_Support++;
                        }
                    }

                    // 计算这两个项目的支持度
                    float support = (float)((float)count_Support / (float)sourceUsers.Length);

                    obj_Frequent_Itemset = new Frequent_Itemset(itemid_1, itemid_2, count_Support, support);
                    temp_freq_itemsets.Add(obj_Frequent_Itemset);
                    total_Support += support;

                    count_Support = 0;
                }
            }
            obj_freq_itemsets = new Frequent_Itemset[temp_freq_itemsets.Count];
            int _count_zero = 0;

            foreach (Frequent_Itemset item in temp_freq_itemsets)
            {
                if (item.Support == 0)
                {
                    _count_zero++;
                }

                obj_freq_itemsets[count++] = item;
            }

            Array.Sort(obj_freq_itemsets);

            // 计算所有不为零频繁2项集的支持度平均值 设为支持度阈值
            float Min_Support = total_Support / (float)(obj_freq_itemsets.Length - _count_zero);

            Frequent_Itemset.min_support = Min_Support;

            foreach (Frequent_Itemset obj_freq_itemset in obj_freq_itemsets)
            {
                if (obj_freq_itemset.Support > Frequent_Itemset.min_support)   // 支持度大于支持度阈值
                {
                    freq_itemsets.Add(obj_freq_itemset);
                }
            }
            // 最小支持度计数
            Frequent_Itemset last_two = (Frequent_Itemset)freq_itemsets[freq_itemsets.Count - 1];

            Frequent_Itemset.min_support_count = last_two.support_count;
        }
Example #3
0
        /// <summary>
        /// 生成频繁-1项集
        /// </summary>
        public void genFreq_one_itemsets()
        {
            cReadinData obj_readData = new cReadinData(0);

            sourceUsers = cReadinData.getBaseUser();       // 读入训练数据
            testUsers   = cReadinData.getTestUser();       // 读入测试数据
            float  itemSupport;
            int    count         = 0;
            double total_support = 0;

            discretize = new bool[sourceUsers.Length][];
            bool[] testUser_discretize = new bool[testUsers[1].Ratings.Length];

            ArrayList temp_one_items = new ArrayList();
            Freq_Item obj_freq_item;

            Freq_Item[] obj_freq_items;

            // 得到训练用户喜好矩阵
            for (int i = 1; i < sourceUsers.Length; i++)
            {
                discretize[i] = new bool[sourceUsers[i].Ratings.Length];
                discretize[i] = sourceUsers[i].discretizeRating();
            }

            // 得到测试用户喜好矩阵
            for (int i = 1; i < testUsers.Length; i++)
            {
                testUser_discretize = testUsers[i].discretizeRating();
            }

            int count_zero = 0;

            for (int itemid = 1; itemid < sourceUsers[1].Ratings.Length; itemid++)
            {
                // for循环扫描数据集,得到用户中喜欢id为itemid的项目的人数
                for (int userid = 1; userid < sourceUsers.Length; userid++)
                {
                    // 如果id为userid的用户喜欢id为itemid的项目
                    if (discretize[userid][itemid] == true)
                    {
                        count++;
                    }
                }
                // 得到该项目的支持度值
                itemSupport = (float)((float)count / (float)sourceUsers.Length);

                obj_freq_item = new Freq_Item(itemid, count, itemSupport);
                temp_one_items.Add(obj_freq_item);

                // 计算支持度计数为零的项目数量
                if (itemSupport == 0)
                {
                    count_zero++;
                }

                // 支持度计数累加为和
                total_support += itemSupport;
                count          = 0;
            }

            // 支持度阈值(平均值)
            float min_support_one = (float)((float)total_support / (float)(temp_one_items.Count));

            Freq_Item.min_support = min_support_one;

//             obj_freq_items = new Freq_Item[temp_one_items.Count];
//
//             int count_one_item = 0;
//             foreach (Freq_Item obj in temp_one_items)
//             {
//                 obj_freq_items[count_one_item++] = obj;
//             }
            // 按照支持度排序
            //   Array.Sort(obj_freq_items);

            // 生成频繁-1项集
            foreach (Freq_Item obj in temp_one_items)
            {
                if (obj.support > min_support_one)
                {
                    freq_one_items.Add(obj);
                }
            }
            // 最小支持度计数
            Freq_Item last_one = (Freq_Item)freq_one_items[freq_one_items.Count - 1];

            Freq_Item.min_support_count = last_one.support_count;
        }
        /// <summary>
        /// 生成频繁-1项集
        /// </summary>
        public void genFreq_one_itemsets()
        {
            cReadinData obj_readData = new cReadinData(0);
            sourceUsers = cReadinData.getBaseUser();       // 读入训练数据
            testUsers = cReadinData.getTestUser();         // 读入测试数据
            float itemSupport;
            int count = 0;
            double total_support = 0;

            discretize = new bool[sourceUsers.Length][];
            bool[] testUser_discretize = new bool[testUsers[1].Ratings.Length];

            ArrayList temp_one_items = new ArrayList();
            Freq_Item obj_freq_item;
            Freq_Item[] obj_freq_items;

            // 得到训练用户喜好矩阵
            for (int i = 1; i < sourceUsers.Length; i++)
            {
                discretize[i] = new bool[sourceUsers[i].Ratings.Length];
                discretize[i] = sourceUsers[i].discretizeRating();
            }

            // 得到测试用户喜好矩阵
            for (int i = 1; i < testUsers.Length; i++)
            {
                testUser_discretize = testUsers[i].discretizeRating();
            }

            int count_zero = 0;

            for (int itemid = 1; itemid < sourceUsers[1].Ratings.Length; itemid++)
            {
                // for循环扫描数据集,得到用户中喜欢id为itemid的项目的人数
                for (int userid = 1; userid < sourceUsers.Length; userid++)
                {
                    // 如果id为userid的用户喜欢id为itemid的项目
                    if (discretize[userid][itemid] == true)
                        count++;
                }
                // 得到该项目的支持度值
                itemSupport = (float)((float)count / (float)sourceUsers.Length);

                obj_freq_item = new Freq_Item(itemid, count, itemSupport);
                temp_one_items.Add(obj_freq_item);

                // 计算支持度计数为零的项目数量
                if (itemSupport == 0)
                {
                    count_zero++;
                }

                // 支持度计数累加为和
                total_support += itemSupport;
                count = 0;
            }

            // 支持度阈值(平均值)
            float min_support_one = (float)((float)total_support / (float)(temp_one_items.Count));
            Freq_Item.min_support = min_support_one;

            //             obj_freq_items = new Freq_Item[temp_one_items.Count];
            //
            //             int count_one_item = 0;
            //             foreach (Freq_Item obj in temp_one_items)
            //             {
            //                 obj_freq_items[count_one_item++] = obj;
            //             }
            // 按照支持度排序
             //   Array.Sort(obj_freq_items);

            // 生成频繁-1项集
            foreach (Freq_Item obj in temp_one_items)
            {
                if (obj.support > min_support_one)
                {
                    freq_one_items.Add(obj);
                }
            }
            // 最小支持度计数
            Freq_Item last_one = (Freq_Item)freq_one_items[freq_one_items.Count - 1];
            Freq_Item.min_support_count = last_one.support_count;
        }