关联分析

这篇博客详细介绍了关联分析的基本概念,包括置信度和支持度的定义,以及它们在寻找频繁项集和关联规则中的作用。文章讨论了Apriori算法和FP-Growth算法的实现思想,Apriori通过减少候选项集来优化,而FP-Growth则通过建立FP-Tree仅需两次遍历数据库来提高效率。
摘要由CSDN通过智能技术生成

1、综述

关联分析的目的是寻找交易记录中的频繁项集和关联规则

置信度:set{e1,e2,e3,...}等一起出现的概率

支持度:set{e1,e2,e3...}发生时set{en,em,...}也发生的概率

在频繁项集中寻找关联规则???why?? 置信度和支持度的大小关系??

2、实现思想

a、将item进行排列组合生成各种长度的项集set,满足支持度要求的项集为频繁项集;

b、apriori算法减小了候选项;

c、Fp-Growth算法只需要两次遍历数据库:(1):找出len-1的频繁项集;(2):利用len-1的项集建立FP-Tree

3、apriori实现

# -*- coding:utf8 -*-
__author__ = 'zhangpeng'

def loadDataSet():
    return [[1,3,4],[2,3,5],[1,2,3,5],[2,5]]

# 生成len-1的候选项集列表C1
def createC1(dataSet):
    C1 = []
    # 把len-1的不重复item加入C1中
    for transaction in dataSet:
        for item in transaction:
            if not [item] in C1:
                C1.append([item])
    C1.sort()
    # 把c1中每个item变成frozenset集合
    return map(frozenset,C1)

# 从len-k的候选项集列表Ck中选出频繁项集列表Lk
def scanD(D,Ck,minSupport):
    ssCnt = {}
    # 遍历数据集和len-k的候选集
    for transaction in D:
        for item in Ck:
            # set集合运算,判断transaction_set中是否包含item_set
            if transaction.issuperset(item):
                if not ssCnt.has_key(item):
                    ssCnt[item] = 1
                else:
                    ssCnt[item] += 1
    numItems = float(len(D))
    retList = []
    supportData = {}
    # 保留大于支持度的item_set
    for key in ssCnt:
        support = ssCnt[key]/numItems
        if support >= minSupport:
            retList.append(key)
            supportData[key] = support
    return retList,supportData

# 从len-(k-1)的频繁项集列表Lk_1中生成len-k的候选项集列表Ck
def aprioriGen(Lk_1,k):
    retList = []
    lenLk_1 = len(Lk_1)
    for i in range(lenLk_1):
        for j in range(i + 1, lenLk_1):
            # 如果两个项集前k-2个元素相同,则合并成len-k的list
            temp = frozenset(Lk_1[i] | Lk_1[j])
            if len(temp) == k and temp not in retList:
                retList.append(temp)
    return retList

# 寻找dataSet的频繁项集
def apriori(dataSet, minSupport = 0.5):
    C1 = createC1
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值