python实现商品推荐_python数据挖掘商品推荐算法
利⽤亲和性分析进⾏商品推荐
importnumpyasnp
datat_filename=("affinity_")
X=t(datat_filename)
print(X[:5])
#⾯包、⽜奶、奶酪、苹果和⾹蕉
#计算数据集中有多少个⼈买了苹果
num_apple_purchas=0
forsampleinX:
ifsample[3]==1:
num_apple_purchas+=1
print("{0}⼈购买了苹果".format(num_apple_purchas))
#计算数据集中有多少个⼈买了⾹蕉
num_banana_purchas=0
forsampleinX:
ifsample[4]==1:
num_banana_purchas+=1
print("{0}⼈购买了⾹蕉".format(num_banana_purchas))
#统计数据集中所有有规则的数据,。⾸先分别为规则应验和规则⽆效这两种情况创建字典
#“如果顾客购买了苹果,他们也会买⾹蕉”就⽤(3,4)表⽰
fromcollectionsimportdefaultdict#使⽤默认字典,如果查找键不存在,会返回⼀个默认值
valid_rules=defaultdict(int)#有规则应验
invalid_rules=defaultdict(int)#规则⽆效
num_occurances=defaultdict(int)#条件相同的规则数量
#计算过程需要⽤循环结构依次对每个个体特征值进⾏处理,第⼀个特征为规则的前提条件--顾客购买了某⼀种商品
forsampleinX:
forpremiinrange(4):
ifsample[premi]==0:#如果个体不满⾜条件,即没有买当前商品,继续
continue
num_occurances[premi]+=1
forconclusioninrange(premi,5):
ifpremi==conclusion:
continue
ifsample[conclusion]==1:
valid_rules[(premi,conclusion)]+=1
el:
invalid_rules[(premi,conclusion)]+=1
#计算⽀持度
support=valid_rules
#计算置信度,遍历每条规则计算
confidence=defaultdict(float)
forpremi,conclusioninvalid_():
rule=(premi,conclusion)
confidence[rule]=valid_rules[rule]/num_occurances[premi]#⽤符合每⼀条规则的数量总数/元组中年第⼀条商品的数量
features=['⾯包','⽜奶','奶酪','苹果','⾹蕉']
#现在我们已经得到了⽀持度字典和置信度字典,现在定义函数输出每条规则以及⽀持度和置信度
defshow(premi,conclusion,support,confidence,features):
premi_name=features[premi]
conclusion_name=features[conclusion]
print('Rule:如果⼀个⼈购买了{0}他将也会买{1}'.format(premi_name,conclusion_name))
print('⽀持数是{0}'.format(support[(premi,conclusion)]))
print('置信度是{0:.3f}'.format(confidence[(premi,conclusion)]))
print('nn')
#print(confidence,type(confidence))
#print(support,type(support))
#if__name__=='__main__':
#prem=1
#con=3
#show(prem,con,support,confidence,features)
#得到所有规则的⽀持度和置信度之后,为了找出最佳规则,还需要根据⽀持度和置信度对规则进⾏排序。
#要找出⽀持度最⾼的规则,⾸先对⽀持度字典进⾏排序,字典的items()函数返回包含字典所有元素的列表,并且使⽤itemgetter()作为
键,对嵌套列表进⾏排序,
#itemgetter(1)表⽰以字典各元素的值(这⾥指⽀持度)为依据进⾏排序,rever=true表⽰降序排列
fromoperatorimportitemgetter
#根据⽀持度进⾏排序
sortd_support=sorted((),key=itemgetter(1),rever=True)
#根据置信度进⾏排序
sortd_confidence=sorted((),key=itemgetter(1),rever=True)
print(sortd_support)
#排序完成,输出⽀持度前五的规则
foriinrange(5):
print('Role规则#{0}'.format(i+1))
(premi,conclusion)=sortd_support[i][0]#获取元组值
show(premi,conclusion,support,confidence,features)
#输出置信度前五的规则
#foriinrange(5):
#print('Role规则#{0}'.format(i+1))
#(premi,conclusion)=sortd_confidence[i][0]#获取元组值
#show(premi,conclusion,support,confidence,features)
本文发布于:2022-11-25 04:57:02,感谢您对本站的认可!
本文链接:http://www.wtabcd.cn/fanwen/fan/90/16398.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |