首页 数据库 mysql教程 Apriori算法的Python实现

Apriori算法的Python实现

Jun 07, 2016 pm 04:09 PM
python 实现 算法

Apriori算法是数据挖掘中频发模式挖掘的鼻祖,从60年代就开始流行,其算法思想也十分简单朴素,首先挖掘出长度为1的频繁模式,然后k=2 将这些频繁模式合并组成长度为k的频繁模式,算出它们的频繁次数,而且要保证其所有k-1长度的子集也是频繁的,值得注意的

Apriori算法是数据挖掘中频发模式挖掘的鼻祖,从60年代就开始流行,其算法思想也十分简单朴素,首先挖掘出长度为1的频繁模式,然后k=2

将这些频繁模式合并组成长度为k的频繁模式,算出它们的频繁次数,而且要保证其所有k-1长度的子集也是频繁的,值得注意的是,为了避免重复,合并的时候,只合并那些前k-2个字符都相同,而k-1的字符一边是少于另一边的。

以下是算法的Python实现:

__author__ = 'linfuyuan'
min_frequency = int(raw_input('please input min_frequency:'))
file_name = raw_input('please input the transaction file:')
transactions = []


def has_infrequent_subset(candidate, Lk):
    for i in range(len(candidate)):
        subset = candidate[:-1]
        subset.sort()
        if not ''.join(subset) in Lk:
            return False
        lastitem = candidate.pop()
        candidate.insert(0, lastitem)
    return True


def countFrequency(candidate, transactions):
    count = 0
    for transaction in transactions:
        if transaction.issuperset(candidate):
            count += 1
    return count


with open(file_name) as f:
    for line in f.readlines():
        line = line.strip()
        tokens = line.split(',')
        if len(tokens) > 0:
            transaction = set(tokens)
            transactions.append(transaction)
currentFrequencySet = {}
for transaction in transactions:
    for item in transaction:
        time = currentFrequencySet.get(item, 0)
        currentFrequencySet[item] = time + 1
Lk = set()
for (itemset, count) in currentFrequencySet.items():
    if count >= min_frequency:
        Lk.add(itemset)
print ', '.join(Lk)

while len(Lk) > 0:
    newLk = set()
    for itemset1 in Lk:
        for itemset2 in Lk:
            cancombine = True
            for i in range(len(itemset1)):
                if i < len(itemset1) - 1:
                    cancombine = itemset1[i] == itemset2[i]
                    if not cancombine:
                        break
                else:
                    cancombine = itemset1[i] < itemset2[i]
                    if not cancombine:
                        break
            if cancombine:
                newitemset = []
                for char in itemset1:
                    newitemset.append(char)
                newitemset.append(itemset2[-1])
                if has_infrequent_subset(newitemset, Lk) and countFrequency(newitemset, transactions) >= min_frequency:
                    newLk.add(&#39;&#39;.join(newitemset))
    print &#39;, &#39;.join(newLk)
    Lk = newLk
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

Rimworld Odyssey温度指南和Gravtech
1 个月前 By Jack chen
初学者的Rimworld指南:奥德赛
1 个月前 By Jack chen
PHP变量范围解释了
4 周前 By 百草
撰写PHP评论的提示
3 周前 By 百草
在PHP中评论代码
3 周前 By 百草

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

热门话题

Laravel 教程
1604
29
PHP教程
1509
276
如何在Python中创建虚拟环境 如何在Python中创建虚拟环境 Aug 05, 2025 pm 01:05 PM

创建Python虚拟环境可使用venv模块,步骤为:1.进入项目目录执行python-mvenvenv创建环境;2.Mac/Linux用sourceenv/bin/activate、Windows用env\Scripts\activate激活;3.使用pipinstall安装包、pipfreeze>requirements.txt导出依赖;4.注意避免将虚拟环境提交到Git,并确认安装时处于正确环境。虚拟环境能隔离项目依赖防止冲突,尤其适合多项目开发,编辑器如PyCharm或VSCode也

如何在Python中的多个过程之间共享数据? 如何在Python中的多个过程之间共享数据? Aug 02, 2025 pm 01:15 PM

使用multiprocessing.Queue可在多个进程间安全传递数据,适合多生产者和消费者的场景;2.使用multiprocessing.Pipe可实现两个进程间的双向高速通信,但仅限两点连接;3.使用Value和Array可在共享内存中存储简单数据类型,需配合Lock避免竞争条件;4.使用Manager可共享复杂数据结构如列表和字典,灵活性高但性能较低,适用于复杂共享状态的场景;应根据数据大小、性能需求和复杂度选择合适方法,Queue和Manager最适合初学者使用。

Python Boto3 S3上传示例 Python Boto3 S3上传示例 Aug 02, 2025 pm 01:08 PM

使用boto3上传文件到S3需先安装boto3并配置AWS凭证;2.通过boto3.client('s3')创建客户端并调用upload_file()方法上传本地文件;3.可指定s3_key作为目标路径,若未指定则使用本地文件名;4.应处理FileNotFoundError、NoCredentialsError和ClientError等异常;5.可通过ExtraArgs参数设置ACL、ContentType、StorageClass和Metadata;6.对于内存数据,可使用BytesIO创建字

如何使用Python中的列表实现堆栈数据结构? 如何使用Python中的列表实现堆栈数据结构? Aug 03, 2025 am 06:45 AM

PythonlistScani ImplementationAking append () Penouspop () Popopoperations.1.UseAppend () Two -Belief StotetopoftHestack.2.UseP OP () ToremoveAndreturnthetop element, EnsuringTocheckiftHestackisnotemptoavoidindexError.3.Pekattehatopelementwithstack [-1] on

Python时间表库示例 Python时间表库示例 Aug 04, 2025 am 10:33 AM

使用Pythonschedule库可轻松实现定时任务,首先通过pipinstallschedule安装库,接着导入schedule和time模块,定义需要定时执行的函数,然后使用schedule.every()设置时间间隔并绑定任务函数,最后通过while循环中调用schedule.run_pending()和time.sleep(1)持续运行任务;例如每10秒执行一次任务可写为schedule.every(10).seconds.do(job),支持按分钟、小时、天、周等周期调度,也可指定具体

如何在崇高文本中运行Python代码 如何在崇高文本中运行Python代码 Aug 04, 2025 pm 04:25 PM

EnsurePythonisinstalledandaddedtoPATHbycheckingversioninterminal;2.Savefilewith.pyextension;3.UseCtrl Btorunviadefaultbuildsystem;4.CreateacustombuildsystemifneededbygoingtoTools>BuildSystem>NewBuildSystem,enteringthecorrectcmdforyourPythonvers

在Python中调试内存泄漏的常见策略是什么? 在Python中调试内存泄漏的常见策略是什么? Aug 06, 2025 pm 01:43 PM

Usetracemalloctotrackmemoryallocationsandidentifyhigh-memorylines;2.Monitorobjectcountswithgcandobjgraphtodetectgrowingobjecttypes;3.Inspectreferencecyclesandlong-livedreferencesusingobjgraph.show_backrefsandcheckforuncollectedcycles;4.Usememory_prof

Python的生存分析 Python的生存分析 Aug 03, 2025 pm 12:58 PM

生存分析用于研究事件发生的时间,Python中常用lifelines和scikit-survival实现。1.安装lifelines库并准备包含时间与事件状态的数据;2.使用Kaplan-Meier估计器绘制生存曲线以可视化事件未发生的概率;3.通过Cox比例风险模型分析变量对事件时间的影响,并检查模型假设;4.注意删失数据的处理,确保event列正确标记删失与事件发生。

See all articles