首页 > 编程知识 正文

apriori算法的性质,apriori算法的应用场景

时间:2023-05-06 08:10:36 阅读:138602 作者:3163

要学习APP奥里算法,首先需要了解几个概念。 是项集、支持度、可靠度、最小支持度、最小可靠度、频繁项集。

项集:尊敬的枕头,即项的集合。 (eg )牛奶、面包组成一个集合(牛奶、面包),其中牛奶和面包为项,(牛奶、面包)为项集,称为二元集。 (说白了,其实是集合)

支持度:项集合a、b同时发生的概率称为相关规则的支持度。

可靠度:发生项集a时,项集b发生的概率为相关规则的可靠度。

支持度和信任度的概念有点抽象,具体可以看到以下例子。

图中的数据是顾客购物的情况,各id对应的items是一个项目集。 目前,有必要研究{milk,diaper}与{beer}的相关性,计算支持度和可信度。

计算如下。

计算支持计算度(milk,diaper ) beer}} )同时发生的概率,相当于)计算milk,diaper,beer )出现的次数在数据条中所占的比重,即2/5。

计算可信度(milk,diaper )发生时,() beer}} )发生的概率占(milk,diaper,beer )发生次数的计算)的比重、发生概率

最小支持度:最小支持度是指人为实际意义上规定的阈值,表示项集统计意义上的最低重要性。

最小可靠度:最小可靠度也是人类在实际意义上规定的阈值,显示了相关规则的最低可靠度。

当支持度和置信度同时达到最小支持度和最小置信度时,该关联规则是强规则。

频繁项集:满足最小支持的所有项集。 被称为频繁的项目集。

(频繁项集合的性质) 1、频繁项集合的所有非空子集也是频繁项集合; 2、如果a项集不是频繁项集,则其它项集或事务处理与a项集的和集也不是频繁项集。)

在理解以上定义的基础上,如何从大量数据中找到不同项的关联规则呢? 让我们具体看看Apriori算法的实现过程。

Apriori的实现过程:首先找出所有的频繁项集,然后从频繁项集中找出符合最小置信度的项集,最终得到具有强规则的项集,即我们所需项的相关性。

例如:

数据如下

算法的过程如下

首先计算所有的频繁项集合,这里的最小支持度为0.2

L1、L2、L3的各项集合都是频繁出现项集合,计算各频繁出现项集合的可靠度。 这里L1不需要计算。 计算结果如下

(想知道寻找频繁项目集的详细过程的话,请研究一下含蓄的大楼等着作《python数据分析与挖掘实战》。 那里有详细的过程。

至此,Apriori算法的所有过程都完成了。

然后python实现Apriori算法

#-- coding : utf-8-- from _ _ future _ _ import print _ functionimportpandasaspd #自定义连接函数,L_{k-1}到c x ) ) ) L=len ) x[0]r=[]forIinrange ) len(x ) ) ) ) )=x [ j ] [ l-1 ] : r.append (x [ I ] [ : l ) x[i][l-1]] ) ) return r# ) )是ms=u'-- ' ) : result=PD.data frame (index=[ ' support ', ' confidence']输出结果support_series=1.0*d.sum(/len ) d ) # 支持度序列column=list )基于定义support_ series (support _ ) support _ )的支持度来确定k=0whilelen(column ) 1: k=k1 print (k ) n正在进行第%s次搜索. ' %k ) column=connect_string ) column,ms ) print(u )数: %s.'%len(column ) ) SF=d_2=PD.dataframe(list ) map ) SF,column ),index=[ms.join(I ) for I in column ] ].t support _ series _ 2

一轮支持度筛选 support_series = support_series.append(support_series_2) column2 = [] for i in column: #遍历可能的推理,如{A,B,C}究竟是A+B-->C还是B+C-->A还是C+A-->B? i = i.split(ms) for j in range(len(i)): column2.append(i[:j]+i[j+1:]+i[j:j+1]) cofidence_series = pd.Series(index=[ms.join(i) for i in column2]) #定义置信度序列 for i in column2: #计算置信度序列 cofidence_series[ms.join(i)] = support_series[ms.join(sorted(i))]/support_series[ms.join(i[:len(i)-1])] for i in cofidence_series[cofidence_series > confidence].index: #置信度筛选 result[i] = 0.0 result[i]['confidence'] = cofidence_series[i] result[i]['support'] = support_series[ms.join(sorted(i.split(ms)))] result = result.T.sort_values(['confidence','support'], ascending = False) #结果整理,输出 print(u'n结果为:') print(result) return result

Apriori算法调用,进行关联性分析
数据如下

代码如下

#-*- coding: utf-8 -*-#使用Apriori算法挖掘菜品订单关联规则from __future__ import print_functionimport pandas as pdfrom apriori import * #导入自行编写的apriori函数inputfile = '../data/menu_orders.xls'outputfile = '../tmp/apriori_rules.xls' #结果文件data = pd.read_excel(inputfile, header = None)print(u'n转换原始数据至0-1矩阵...')ct = lambda x : pd.Series(1, index = x[pd.notnull(x)]) #转换0-1矩阵的过渡函数b = map(ct, data.as_matrix()) #用map方式执行data = pd.DataFrame(list(b)).fillna(0) #实现矩阵转换,空值用0填充print(u'n转换完毕。')del b #删除中间变量b,节省内存support = 0.2 #最小支持度confidence = 0.5 #最小置信度ms = '---' #连接符,默认'--',用来区分不同元素,如A--B。需要保证原始表格中不含有该字符find_rule(data, support, confidence, ms).to_excel(outputfile) #保存结果

结果如下
support confidence
e—a 0.3 1.000000
e—c 0.3 1.000000
c—e—a 0.3 1.000000
a—e—c 0.3 1.000000
c—a 0.5 0.714286
a—c 0.5 0.714286
a—b 0.5 0.714286
c—b 0.5 0.714286
b—a 0.5 0.625000
b—c 0.5 0.625000
a—c—e 0.3 0.600000
b—c—a 0.3 0.600000
a—c—b 0.3 0.600000
a—b—c 0.3 0.600000

本文主要参考书籍含蓄的楼房等著《python数据分析与挖掘实战》
本文主要参考博客https://blog.csdn.net/baimafujinji/article/details/53456931

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。