您的位置:首页 > 编程语言 > Python开发

支持度与置信度(找出所有规则)--《python数据挖掘入门与实践》

2018-03-05 20:35 666 查看
上一篇求出了指定规则的支持度与置信度本文的目的是找出所有的规则,即全部支持度与置信度为了计算所有规则的置信度与支持度 ,需要创建几个字典,用于存放计算结果使用defaultdictfrom collections import defaultdictvalid_rules=defaultdict(int)invalid_rules=defaultdict(int)num_occurances=defaultdict(int)
多个嵌套for循环来实现统计for sample in X:                                 #对每一行进行循环for premise in range(n_features):            #对每列进行循环if sample[premise] == 0: continue        #判断该行的某一列列元素是否位0,即是否购买,若为0,跳出本轮循环,测试下一列num_occurences[premise] += 1             #记录有购买的一列 sample[premise]for conclusion in range(n_features):     #当读取到某一列有购买后,再次循环每一列的值if premise == conclusion:            #排除相同的一列,若循环到同一列,则跳出循环,比较下一列continueif sample[conclusion] == 1:          #当sample[conclusion] 的值为1时,满足了当顾客购买前一件商品时也买了这种商品valid_rules[(premise, conclusion)] += 1  #记录下该规则出现的次数else:invalid_rules[(premise, conclusion)] += 1  #当不满足时即 sample[conclusion]=0 时,记录下不满足该规则的次数support = valid_rules                               #支持度=规则出现的次数confidence = defaultdict(float)                     #强制将置信度转为浮点型for premise, conclusion in valid_rules.keys():confidence[(premise, conclusion)] = valid_rules[(premise, conclusion)] / num_occurences[premise] #计算某一规则的置信度,并将其存在字典confidence中代码里每一premise 与 conclusion都是一一对应的,多重for循环与判断还是稍显复杂的,但看懂了还是很好理解的最后输出每种情况的支持度与置信度for premise, conclusion in confidence:     #根据字典的两个参数来取值premise_name = features[premise]       #我们之前定义了features列表,它的每一列都对应数组的每一列,即商品名称conclusion_name = features[conclusion] #商品名称print("Rule: 如果顾客购买 {0} 那么他可能同时购买 {1}".format(premise_name, conclusion_name))print(" - Confidence: {0:.3f}".format(confidence[(premise, conclusion)]))print(" - Support: {0}".format(support[(premise, conclusion)]))print("")
Rule: 如果顾客购买 cheese 那么他可能同时购买 apples- Confidence: 0.610- Support: 25Rule: 如果顾客购买 cheese 那么他可能同时购买 bananas- Confidence: 0.659- Support: 27Rule: 如果顾客购买 apples 那么他可能同时购买 cheese- Confidence: 0.694- Support: 25Rule: 如果顾客购买 apples 那么他可能同时购买 bananas- Confidence: 0.583- Support: 21Rule: 如果顾客购买 bananas 那么他可能同时购买 cheese- Confidence: 0.458- Support: 27Rule: 如果顾客购买 bananas 那么他可能同时购买 apples- Confidence: 0.356- Support: 21Rule: 如果顾客购买 bread 那么他可能同时购买 milk- Confidence: 0.519- Support: 14Rule: 如果顾客购买 bread 那么他可能同时购买 apples- Confidence: 0.185- Support: 5Rule: 如果顾客购买 milk 那么他可能同时购买 bread- Confidence: 0.304- Support: 14Rule: 如果顾客购买 milk 那么他可能同时购买 apples- Confidence: 0.196- Support: 9Rule: 如果顾客购买 apples 那么他可能同时购买 bread- Confidence: 0.139- Support: 5Rule: 如果顾客购买 apples 那么他可能同时购买 milk- Confidence: 0.250- Support: 9Rule: 如果顾客购买 bread 那么他可能同时购买 cheese- Confidence: 0.148- Support: 4Rule: 如果顾客购买 cheese 那么他可能同时购买 bread- Confidence: 0.098- Support: 4Rule: 如果顾客购买 milk 那么他可能同时购买 bananas- Confidence: 0.413- Support: 19Rule: 如果顾客购买 bananas 那么他可能同时购买 milk- Confidence: 0.322- Support: 19Rule: 如果顾客购买 bread 那么他可能同时购买 bananas- Confidence: 0.630- Support: 17Rule: 如果顾客购买 bananas 那么他可能同时购买 bread- Confidence: 0.288- Support: 17Rule: 如果顾客购买 milk 那么他可能同时购买 cheese- Confidence: 0.152- Support: 7Rule: 如果顾客购买 cheese 那么他可能同时购买 milk- Confidence: 0.171- Support: 7
得到如上的结果我们可以看出 顾客购买苹果,也会买奶酪 以及 顾客购买奶酪,也会购买香蕉的支持度和置信度都很高Rule: 如果顾客购买 cheese 那么他可能同时购买 bananas- Confidence: 0.659- Support: 27Rule: 如果顾客购买 apples 那么他可能同时购买 cheese- Confidence: 0.694- Support: 25根据以上规则,我们可以在苹果促销的同时在旁边摆上奶酪,或者在促销奶酪的同时在旁边摆上香蕉
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: