目录

  • 1 第1讲 概述
    • 1.1 数据仓库概述
      • 1.1.1 数据分析与数据挖掘
      • 1.1.2 分析与挖掘的数据类型视频
      • 1.1.3 数据分析与数据挖掘的方法
      • 1.1.4 数据分析与数据挖掘使用的技术
      • 1.1.5 应用场景及存在的问题
    • 1.2 数据分析与数据挖掘实践
    • 1.3 第一章实践
  • 2 第2章数据
    • 2.1 数据属性
    • 2.2 数据的基本统计描述
      • 2.2.1 中心趋势度量
      • 2.2.2 数据分散度量
      • 2.2.3 数据的图形表示
    • 2.3 数据的相似性和相异性
    • 2.4 章节题目
  • 3 数据预处理
    • 3.1 数据存在的问题
    • 3.2 数据清理
    • 3.3 数据集成
    • 3.4 数据归约
    • 3.5 数据变换与数据离散化
    • 3.6 第三章实践
  • 4 数据仓库与OLAP
    • 4.1 数据仓库基本概念
    • 4.2 数据仓库设计
    • 4.3 数据仓库实现
    • 4.4 联机分析处理
    • 4.5 元数据模型
    • 4.6 关联分析课件
    • 4.7 Apriori 短视频
    • 4.8 FP growth发现频繁项集视频资料
  • 5 回归分析
    • 5.1 回归分析的基本概念
    • 5.2 一元线性回归
    • 5.3 多元线性回归
    • 5.4 多项式回归
  • 6 频繁模式
    • 6.1 频繁模式概述
    • 6.2 Apriori算法
    • 6.3 FP-growth算法
    • 6.4 压缩频繁项集
    • 6.5 关联模式评估
    • 6.6 序列模式挖掘ppt
  • 7 分类
    • 7.1 分类概述
    • 7.2 决策树
      • 7.2.1 决策树(上)
      • 7.2.2 决策树(中)
      • 7.2.3 决策树(下)
    • 7.3 朴素贝叶斯分类
    • 7.4 惰性学习法
    • 7.5 神经网络
      • 7.5.1 神经网络(上)
      • 7.5.2 神经网络(下)
    • 7.6 分类模型的评估
      • 7.6.1 分类模型的评估(上)
        • 7.6.1.1 分类模型的评估(下)
    • 7.7 分类方法ppt
    • 7.8 KNN源码
    • 7.9 决策树分类源码
    • 7.10 贝叶斯分类器ppt
    • 7.11 支持向量机
  • 8 聚类分析
    • 8.1 聚类概述
      • 8.1.1 聚类分析PPT
    • 8.2 基于划分的聚类
    • 8.3 基于层次的聚类
    • 8.4 基于密度的聚类
    • 8.5 基于网格的聚类
  • 9 离群点检测
    • 9.1 离群点定义与类型
    • 9.2 离群点检测
FP growth发现频繁项集视频资料

FP GROWTH发现频繁项集FP-growth发现频繁项集



附实践代码:

# -*- coding:utf8 -*-

class treeNode:

    def __init__(self, nameValue, numOccur, parentNode):

        self.name = nameValue

        self.count = numOccur

        self.nodeLink = None

        self.parent = parentNode

        self.children = {}


    def inc(self, numOccur):

        self.count += numOccur


    def disp(self, ind=1):

        print '  '*ind, self.name, ' ', self.count

        for child in self.children.values():

            child.disp(ind+1)


def updateHeader(nodeToTest, targetNode):

    while nodeToTest.nodeLink != None:

        nodeToTest = nodeToTest.nodeLink

    nodeToTest.nodeLink = targetNode

def updateFPtree(items, inTree, headerTable, count):

    if items[0] in inTree.children:

        # 判断items的第一个结点是否已作为子结点

        inTree.children[items[0]].inc(count)

    else:

        # 创建新的分支

        inTree.children[items[0]] = treeNode(items[0], count, inTree)

        # 更新相应频繁项集的链表,往后添加

        if headerTable[items[0]][1] == None:

            headerTable[items[0]][1] = inTree.children[items[0]]

        else:

            updateHeader(headerTable[items[0]][1], inTree.children[items[0]])

    # 递归

    if len(items) > 1:

        updateFPtree(items[1::], inTree.children[items[0]], headerTable, count)


def createFPtree(dataSet, minSup=1):

    headerTable = {}

    for trans in dataSet:

        for item in trans:

            headerTable[item] = headerTable.get(item, 0) + dataSet[trans]

    for k in headerTable.keys():

        if headerTable[k] < minSup:

            del(headerTable[k]) # 删除不满足最小支持度的元素

    freqItemSet = set(headerTable.keys()) # 满足最小支持度的频繁项集

    if len(freqItemSet) == 0:

        return None, None

    for k in headerTable:

        headerTable[k] = [headerTable[k], None] # element: [count, node]


    retTree = treeNode('Null Set', 1, None)

    for tranSet, count in dataSet.items():

        # dataSet:[element, count]

        localD = {}

        for item in tranSet:

            if item in freqItemSet: # 过滤,只取该样本中满足最小支持度的频繁项

                localD[item] = headerTable[item][0] # element : count

        if len(localD) > 0:

            # 根据全局频数从大到小对单样本排序

            orderedItem = [v[0] for v in sorted(localD.items(), key=lambda p:p[1], reverse=True)]

            # 用过滤且排序后的样本更新树

            updateFPtree(orderedItem, retTree, headerTable, count)

    return retTree, headerTable


# 数据集

def loadSimpDat():

    simDat = [['r','z','h','j','p'],

              ['z','y','x','w','v','u','t','s'],

              ['z'],

              ['r','x','n','o','s'],

              ['y','r','x','z','q','t','p'],

              ['y','z','x','e','q','s','t','m']]

    return simDat

# 构造成 element : count 的形式

def createInitSet(dataSet):

    retDict={}

    for trans in dataSet:

        key = frozenset(trans)

        if retDict.has_key(key):

            retDict[frozenset(trans)] += 1

        else:

            retDict[frozenset(trans)] = 1

    return retDict


simDat = loadSimpDat()

initSet = createInitSet(simDat)

myFPtree, myHeaderTab = createFPtree(initSet, 3) # 最小支持度3

myFPtree.disp()