机器学习:基于Apriori算法对中医病症辩证关联规则分析

news2024/11/23 23:44:27

在这里插入图片描述

系列文章目录

作者:i阿极

作者简介:Python领域新星作者、多项比赛获奖者:博主个人首页

😊😊😊如果觉得文章不错或能帮助到你学习,可以点赞👍收藏📁评论📒+关注哦!👍👍👍

📜📜📜如果有小伙伴需要数据集和学习交流,文章下方有交流学习区!一起学习进步!💪


大家好,我i阿极。喜欢本专栏的小伙伴,请多多支持

专栏案例:机器学习案例
机器学习(一):线性回归之最小二乘法
机器学习(二):线性回归之梯度下降法
机器学习(三):基于线性回归对波士顿房价预测
机器学习(四):基于KNN算法对鸢尾花类别进行分类预测
机器学习(五):基于KNN模型对高炉发电量进行回归预测分析
机器学习(六):基于高斯贝叶斯对面部皮肤进行预测分析
机器学习(七):基于多项式贝叶斯对蘑菇毒性分类预测分析
机器学习(八):基于PCA对人脸识别数据降维并建立KNN模型检验
机器学习(十四):基于逻辑回归对超市销售活动预测分析
机器学习(十五):基于神经网络对用户评论情感分析预测
机器学习(十六):基于Kmeans聚类算法对银行客户进行分类
机器学习(十七):基于支持向量机(SVM)进行人脸识别预测
机器学习(十八):基于逻辑回归对优惠券使用情况预测分析
机器学习(十九):基于逻辑回归对某银行客户违约预测分析
机器学习(二十):LightGBM算法原理(附案例实战)
机器学习(二十一):基于朴素贝叶斯对花瓣花萼的宽度和长度分类预测
机器学习(二十二):基于逻辑回归(Logistic Regression)对股票客户流失预测分析

文章目录

  • 系列文章目录
  • 1、Apriori算法模型原理
  • 2、实验环境
  • 3、Apriori算法模型案例理解
  • 4、Apriori算法模型综合案例
    • 4.1案例背景
    • 4.2数据读取与预处理
    • 4.3 apyori库实现关联
    • 4.4mlxtend库实现关联
  • 总结


1、Apriori算法模型原理

Apriori算法是一种经典的关联规则挖掘算法,用于发现数据集中频繁出现的项集和关联规则。该算法基于一种称为"先验原理"的观念,即如果一个项集是频繁的,那么它的所有子集也必须是频繁的。通过利用这个原理,Apriori算法逐步构建频繁项集,并生成关联规则。

下面是Apriori算法的详细步骤:

  • 确定最小支持度阈值: 用户需要指定一个最小支持度阈值,用于筛选出频繁项集。支持度定义为某个项集在数据集中出现的频率。

  • 生成候选项集: 初始时,算法将每个项作为单独的候选项集。然后,通过扫描数据集,计算每个候选项集的支持度,并筛选出满足最小支持度阈值的频繁一项集。

  • 组合生成更高阶的候选项集: 对于频繁一项集,算法使用连接操作生成候选项集。连接操作是指将两个频繁项集合并为一个更高阶的候选项集。具体来说,对于每个频繁k-1项集,算法将其按字典序排序,并两两组合生成候选k项集。

  • 剪枝步骤: 在生成候选项集后,需要进行剪枝操作以减少计算量。剪枝操作通过检查候选项集的所有(k-1)项子集是否都是频繁项集来实现。如果存在某个(k-1)项子集不是频繁项集,则将候选项集删除。

  • 计算候选项集的支持度: 对剪枝后的候选项集,再次扫描数据集,计算它们的支持度,并筛选出满足最小支持度阈值的频繁项集。

  • 重复步骤3至步骤5: 重复进行组合生成候选项集、剪枝和计算支持度的步骤,直到无法生成更高阶的候选项集为止。

  • 生成关联规则: 在获得频繁项集后,可以生成关联规则。对于每个频繁项集,算法产生其所有非空子集作为候选规则。然后,通过计算置信度筛选出满足最小置信度阈值的关联规则。

2、实验环境

Python 3.9

Jupyter Notebook

Anaconda

3、Apriori算法模型案例理解

当我们使用Apriori算法来分析市场购物篮数据时,假设有以下几个项集和关联规则:

项集(物品组合):

  • {牛奶}
  • {面包}
  • {啤酒}
  • {牛奶, 面包}
  • {牛奶, 啤酒}
  • {面包, 啤酒}
  • {牛奶, 面包, 啤酒}

关联规则:

  • {牛奶} => {面包}
  • {面包} => {牛奶}
  • {啤酒} => {牛奶}
  • {牛奶, 面包} => {啤酒}
  • {面包, 啤酒} => {牛奶}
  • {牛奶, 啤酒} => {面包}

假设我们设置最小支持度阈值为3,即项集的出现次数至少为3次才被认为是频繁项集。

首先,我们生成频繁一项集。根据市场购物篮数据统计,我们得到以下频繁一项集:

{牛奶} (出现次数:4)
{面包} (出现次数:4)
{啤酒} (出现次数:3)

接下来,我们通过组合生成更高阶的候选项集。由于只有3个频繁一项集,我们可以直接生成候选二项集:

{牛奶, 面包}
{牛奶, 啤酒}
{面包, 啤酒}

然后,进行剪枝操作。根据先验原理,我们检查候选二项集的所有一项子集是否都是频繁一项集。由于{牛奶, 面包}、{牛奶, 啤酒}和{面包, 啤酒}的所有一项子集都是频繁一项集,它们都被保留。

接着,计算候选二项集的支持度。我们再次扫描市场购物篮数据,计算候选二项集的出现次数:

{牛奶, 面包} (出现次数:3)
{牛奶, 啤酒} (出现次数:2)
{面包, 啤酒} (出现次数:3)

根据最小支持度阈值为3,我们筛选出频繁二项集:

{牛奶, 面包} (出现次数:3)
{面包, 啤酒} (出现次数:3)

现在,我们已经得到了频繁二项集。我们可以继续进行组合生成候选三项集,然后进行剪枝和计算支持度的操作,直到无法生成更高阶的候选项集为止。

最后,通过频繁项集可以生成关联规则。关联规则是由频繁项集中的子集生成的。我们可以使用支持度和置信度来评估关联规则的强度和可靠性。在上述的案例中,我们已经给出了几个关联规则示例。

通过以上的案例,我们可以看到Apriori算法是通过迭代的方式从频繁一项集开始,不断生成候选项集并进行剪枝和计算支持度的操作,最终得到频繁项集和关联规则。这样,我们就可以发现市场购物篮中的常见组合和关联关系,为市场营销和推荐系统等提供支持和指导。

4、Apriori算法模型综合案例

4.1案例背景

在中医领域往往强调相生相克的辩证关系,即我们的五脏六腑不仅仅是一个个独立的个体,而是一个个具有相互联系的存在,有的时候某一个脏器出了问题,可能不仅仅是由于该脏器本身导致的,而是其关联的脏器一起导致的现象,举例来说,有的人经常感觉到心悸,按理说,这个是心脏的问题,但是在中医的角度,很可能是和心脏相关的脏器:肝出现了问题导致了心悸这一病症。

在中医理论中,常把五脏和中国的五行学说结合到一起,配合五行相生相克的关联规则去分析五脏之间的关联规则,如下表所示:
在这里插入图片描述

4.2数据读取与预处理

导入数据

import pandas as pd
df = pd.read_excel('中医辨证.xlsx')
df.head()

在这里插入图片描述

将”病人症状“列的值转为列表存储

df['病人症状'].tolist()

在这里插入图片描述

转换为双重列表结构

symptoms = []
for i in df['病人症状'].tolist():
    symptoms.append(i.split(','))
print(symptoms)

在这里插入图片描述

4.3 apyori库实现关联

调用apyori库中的apriori()函数来进行关联关系分析

from apyori import apriori
rules = apriori(symptoms, min_support=0.1, min_confidence=0.7)
results = list(rules)
for i in results:  # 遍历results中的每一个频繁项集
    for j in i.ordered_statistics:  # 获取频繁项集中的关联规则
        X = j.items_base  # 关联规则的前件
        Y = j.items_add  # 关联规则的后件
        x = ', '.join([item for item in X])  # 连接前件中的元素
        y = ', '.join([item for item in Y])  # 连接后件中的元素
        if x != '':  # 防止出现关联规则前件为空的情况
            print(x + ' → ' + y)  # 通过字符串拼接的方式更好呈现结果

在这里插入图片描述

4.4mlxtend库实现关联

from mlxtend.preprocessing import TransactionEncoder
TE = TransactionEncoder()  # 构造转换模型
data = TE.fit_transform(symptoms)  # 将原始数据转化为bool值
data

在这里插入图片描述

用DataFrame存储bool数据

import pandas as pd
df = pd.DataFrame(data, columns=TE.columns_) 
df.head()

在这里插入图片描述

from mlxtend.frequent_patterns import apriori
items = apriori(df, min_support=0.1, use_colnames=True)
items.head()

在这里插入图片描述

items[items['itemsets'].apply(lambda x: len(x)) >= 2]

在这里插入图片描述

from mlxtend.frequent_patterns import association_rules
rules = association_rules(items, min_threshold=0.7)
rules

在这里插入图片描述

for i, j in rules.iterrows():  # 遍历DataFrame二维表格的每一行
    X = j['antecedents']  # 关联规则的前件
    Y = j['consequents']  # 关联规则的后件
    x = ', '.join([item for item in X])  # 连接前件中的元素
    y = ', '.join([item for item in Y])  # 连接后件中的元素
    print(x + ' → ' + y)  # 通过字符串拼接打印关联规则

在这里插入图片描述


总结

Apriori算法的优点是简单易懂,容易实现,而且可以发现数据集中的频繁项集和关联规则。然而,对于大规模数据集,Apriori算法需要生成大量的候选项集,计算支持度的开销较大,效率较低。为了解决这个问题,后续还提出了改进的Apriori算法,如FP-Growth算法,利用了数据集的频繁模式树结构,加速了频繁项集的挖掘过程。

📢文章下方有交流学习区!一起学习进步!💪💪💪
📢首发CSDN博客,创作不易,如果觉得文章不错,可以点赞👍收藏📁评论📒
📢你的支持和鼓励是我创作的动力❗❗❗

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/570842.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Linux】进程间通信的有关基础概念

在以前我们使用多进程时,我们一般都是让父子进程分别执行各自的代码,进程之间几乎没有通信,但是实际过程中,进程间的通信是十分重要的的一件事情,一个复杂的程序一般都是有多个进程相互通信,协调进行来完成…

重磅发布 |《2023年消费品企业数字化转型调研白皮书》

数字经济时代,数字化转型对于消费品企业越来越重要,已成为消费品企业增加经济效益、提升竞争力的重要策略之一。随着数字化转型进入深水区,越来越多涉及到商业模式、业务模式和产业链生态的创新变革开始出现,给消费品企业带来了一…

【UE】windows包蓝图分辨率设置

【UE】windows包蓝图分辨率设置 屏幕模式(SetFullscreenMode) 模式说明全屏可以任意修改分辨率的全屏窗口化全屏适配显示器分辨率的全屏窗口化窗口化 分辨率修改方法(SetScreenResolution) 控制台修改分辨率方法(ExecuteConsoleCommand) 命令 &#xf…

股票量化分析工具QTYX使用攻略——挖掘主升浪中的人气个股(更新2.6.5)

搭建自己的量化系统 如果要长期在市场中立于不败之地!必须要形成一套自己的交易系统。 行情不等人!边学习边实战,在实战中学习才是最有效地方式。于是我们分享一个即可以用于学习,也可以用于实战炒股分析的量化系统——QTYX。 QTY…

如何有效运用测评自养号来提升阿里国际店铺权重

在阿里国际平台上提升销售并非易事,但是借助强大的营销策略和有效的自养号技术,你可以大幅度提升你的店铺销量。以下是一些具体的步骤和技巧。 1. 数据分析和市场调研 首先,要了解你的目标客户群体和市场趋势。分析你的销售数据&#xff0c…

chatgpt赋能python:Python编程教程:使用Python生成0到100的列表

Python编程教程:使用Python生成0到100的列表 Python是一种流行的编程语言,因其简单易学、强大而受到广泛欢迎。本文将介绍如何使用Python编程语言来生成0到100的数字列表。 什么是Python? Python是一种高级编程语言,由Guido van Rossum 在…

PHP+vue高校教学考研资料分享系统

运行环境:phpstudy/wamp/xammp等 开发语言:php 后端框架:Thinkphp5 前端框架:vue.js 服务器:apache 数据库:mysql 数据库工具:Navicat/phpmyadmin用户首次登录系统需要注册一个用户,用户在登陆平…

day4-项目软硬件环境分析和通讯结构体

硬件部分 fs4412开发板 3*zigbee模块 摄像头 gprs(用于通讯) fs4412部分 3个USB接口分别用于zigbee协调器、usb摄像头、gprs模块 陀螺仪与加速计作为数据采集端,发送到HTML USB-OTG用于安卓下载 电位器用于测量电压 蜂鸣器基于PWM来…

【LeetCode中等】二进制矩阵中的最短路径

给你一个 n x n 的二进制矩阵 grid 中,返回矩阵中最短 畅通路径 的长度。如果不存在这样的路径,返回 -1 。 二进制矩阵中的 畅通路径 是一条从 左上角 单元格(即,(0, 0))到 右下角 单元格(即,(…

在TP6.0引入Bootstrap4分页样式

1. TP6.0 默认分页 默认分页驱动类文件 vendor/topthink/think-orm/src/paginator/driver/Bootstrap.php 默认分页代码 <ul class"pagination"> <li><a href"?page1">&laquo;</a></li> <li><a hre…

​Win10更新清理怎么做?

“我有一台华硕二合一笔记本电脑&#xff0c;发现它开始运行缓慢。有时&#xff0c;屏幕会卡在加载界面上&#xff0c;不得不重新启动。为了让电脑更加流畅&#xff0c;我已经将其更新到Windows 10版本&#xff0c;现在希望通过Win10更新清理来进一步提升性能。请问如何进行Win…

电脑重装win11系统好还是win10好

随着Windows 11的发布&#xff0c;许多用户开始思考&#xff0c;是应该升级到Windows 11还是继续使用Windows 10&#xff1f;本文将为您比较Windows 11和Windows 10的优势与劣势&#xff0c;帮助您选择适合自己的操作系统。 工具/原料&#xff1a; 系统版本&#xff1a;window…

Windows Copilot,来了!

公众号关注 “GitHubDaily” 设为 “星标”&#xff0c;每天带你逛 GitHub&#xff01; 5 月 23 日&#xff0c;微软 2023 Build 开发者大会正式开幕&#xff0c;跟 Google I/O 和 Apple WWDC 一样&#xff0c;每年微软都会在 Build 大会上发布各种新产品。 由于最近几个月 Cha…

CNNs和视觉Transformer:分析与比较

探索视觉Transformer和卷积神经网络&#xff08;CNNs&#xff09;在图像分类任务中的有效性。 图像分类是计算机视觉中的关键任务&#xff0c;在工业、医学影像和农业等各个领域得到广泛应用。卷积神经网络&#xff08;CNNs&#xff09;是该领域的一项重大突破&#xff0c;被广…

软考网工计算题总结(一):总共33类题型,进来复习啦!

题型一&#xff1a; 1.地址编号从80000H到BFFFFH且按字节编址的内存容量为&#xff08;5&#xff09;KB,若用16KX4bit的存储芯片够成该内存&#xff0c;共需&#xff08;6&#xff09;片。 (5)A.128 B.256 C.512 D.1024 (6)A.8 B.16 C.32 D.64 【答案】B C 【解析】本题…

springboot入门简单使用

springboot入门简单使用 1、SpringBoot项目创建并配置mysql数据库创建项目编写Controller测试配置数据库 2、SpringBoot集成mybatis-plus初始化数据库安装mybatis-plus通过mybatis-plus将数据库数据通过接口显示 3、SpringBoot三层架构Controller、Service、Dao4、SpringBoot集…

【鲁棒、状态估计】用于电力系统动态状态估计的鲁棒迭代扩展卡尔曼滤波器研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

自动化测试技术相结合的测试方法

自动化测试技术相结合的测试方法 随着软件开发的不断进步和变革&#xff0c;测试也越来越重要。为了提高测试效率和质量&#xff0c;自动化测试技术相结合的测试方法得到了广泛应用。 自动化测试是一种利用工具和脚本自动执行测试任务的测试方法。通过自动化测试&#xff0c;可…

【产品设计】工具类产品,带一些社交元素

工具类产品要加入社交元素&#xff0c;关键在于找到工具与社交的结合点。 一、工具类的产品&#xff0c;可以这样加入社交元素 1、分开来看&#xff1a;工具类产品和社交类产品 工具类产品&#xff0c;顾名思义&#xff0c;以工具属性为主&#xff0c;核心突出的是一个“用”…

UE5.1.1C++从0开始(11.AI与行为树)

怕有些朋友不知道教程指的是哪一个&#xff0c;我在这里把教程的网址贴出来&#xff1a;https://www.bilibili.com/video/BV1nU4y1X7iQ?p1 这一章开始进入电脑玩家逻辑的编写&#xff0c;因为是第一次接触&#xff0c;所以老师也没有讲什么很难的问题&#xff0c;这里还是老样…