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); }
/// <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; }
/// <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; }