标签:div 循环结构 items orm 方法 就是 int 另一个 指定
基本概念:
根据样本个体之间的相似度
支持度support 置信度confident
示例:如果一个人买了商品X,那么他很有可能购买商品Y (本例有两个特征值0和1,表示是否购买)
过程思路:
1、在numpy中加载数据集
2、实现简单的排序
3、排序找出最佳规则
1 import numpy as np
2
3 #在numpy中加载数据集
4 dataset_filename = "affinity_dataset.txt" #要用到的数据文件名为"affinity_dataset.txt" ,注意:数据集文件与笔记本文件放到同一个目录下
5
6 X=np.loadtxt(dataset_filename) #文件内容赋值给一个数组
7
8 print(X[:5]) #打印数组内容
9
10 #实现简单的排序规则
11 num_apple_purchases = 0 #初始购买apple的人数为0
12 for sample in X: #遍历数组X中的每一行(sample)
13 if sample[3] == 1: #如果第三列(apple)的值为1,即买了apple
14 num_apple_purchases += 1 #购买apple的人数加1
15 print("{0} people bought apples".format(num_apple_purchases)) #打印购买apple的总数
16 # format是格式化语法,{0}指定位置
17
18 #变量说明
19 n_samples,n_features = X.shape
20 #语法:shape函数是numpy.core.fromnumeric中的函数,它的功能是查看矩阵或者数组的维数。
21 features = ["bread","milk","cheese","apples","bananas"] #列表
22
23 from collections import defaultdict
24 #使用defaultdict创建相应的字典,好处是当查找的键不存在,返回一个默认值
25 valid_rules = defaultdict(int) #统计规则应验的数量(买了一个同时买了另一个)
26 invalid_rules = defaultdict(int) #统计规则无效的数量(买了一个却没有买另一个)
27 num_occurances = defaultdict(int) #统计条件相同的规则数量(购买的个体的数量)
28
29 #通过循环结构依次对个体及特征值进行处理,统计个体与个体之间的相关性 条件:如果顾客买了一种商品
30 for sample in X: #遍历每一行
31 for premise in range(5): #遍历每一列
32 #判断是否买了该商品
33 if sample[premise] == 0: #如果数组中的值为0(没有买该商品)
34 continue #跳过本次循环
35
36 num_occurances[premise] += 1 #条件相同的规则数量+1(买了该商品)
37
38 for conclusion in range(n_features): #遍历结论
39 if premise == conclusion: #如果条件和结论相同(如果买了苹果,那么买了苹果)
40 continue #跳过本次循环
41
42 if sample[premise] == 1: #条件满足,顾客买了一种商品
43 valid_rules[(premise,conclusion)] += 1 #规则应验的数量加1
44
45 else: #以上条件均不满足,无效规则
46 invalid_rules[(premise,conclusion)] += 1 #规则无效的数量加1
47
48 #计算支持度support和置信度confidence
49 support = valid_rules #p(x)所有买X的人数
50 confidence = defaultdict(float)
51 for premise,conclusion in valid_rules.keys(): #遍历有效规则中的条件和结论
52 rule = (premise,conclusion) #定义规则的形
53 confidence[rule] = valid_rules[rule]/num_occurances[premise] #p(Y|X)=所有买X和Y的人数/所有买X的人数
54
55 #声明一个函数用于接收参数
56 def print_rule(premise,conclution,support,confidence,features): #features是特征列表的索引
57 #把索引替换成相应的特征
58 premise_name = features[premise]
59 conclusion_name = features[conclusion]
60 #输出想要的结果
61 print("rule:if a person buys {0} they will also buy {1}".format(premise_name,conclusion_name))
62 print("-suppotr:{0}".format(support[(premise,conclusion)]))
63 print("-confidence:{0:.3f}".format(confidence[(premise,conclusion)])) #.3f保留3位小数点
64
65
66 #代码测试:尝试更换条件和结论,看看输出结果如何
67 premise=1
68 conclusion=3
69 print(premise,conclusion,support,confidence,features)
70
71 #排序找出最佳的规则
72 from operator import itemgetter #itemgetter可以对嵌套的列表进行排序
73 sorted_support = sorted(support.items(),key=itemgetter(1),reverse=True) #sorted排序
74 #items()函数返回包含字典所有元素的列表,item getter(1)表示以字典各元素的值(support)作为排序依据,reverse = True表示降序排列
75
76 #输出支持度最高的前五条规则
77 for index in range(5):
78 print("rule #{0}".format(index+1))
79 premise,conclusion = sorted_support[index][0] #索引
80 print_rule(premise,conclusion,support,confidence,features)
81
82 #同理输出置信度最高的规则
83 sorted_confidence = sorted(confidence.items(),key=itemgetter(1),reverse = True)
84
85 for index in range(5):
86 print("rule #{0}".format(index + 1))
87 premise, conclusion = sorted_confidence[index][0]
88 print_rule(premise, conclusion, support, confidence, features)
标签:div 循环结构 items orm 方法 就是 int 另一个 指定
原文地址:https://www.cnblogs.com/wcy-going/p/11637940.html