在关系数据库中寻找统计关联

2 投票
2 回答
1125 浏览
提问于 2025-04-17 10:16

我有一个很大的SQL数据库,里面存储了州特征和奖励指标之间的关系。例如:

A ^ B ^ C ^ D ^ Action(E) => 0.1
F ^ G ^ W ^ D ^ Action(R,P,H) => 0.9
A ^ T ^ U ^ Y ^ Action(A,S) => 0.2

我的特征可能是离散的、连续的,或者是名义上的。我想找到一套规则或模式,来最大化这个奖励指标。请问有什么好的工具可以用来挖掘这些数据,以找到最强的统计相关性(最好是用Python写的,或者能在Python中使用)?

2 个回答

0

你提到的“想要找到一套规则或模式来最大化奖励指标”的问题,听起来很像是强化学习。如果你在某个状态下执行一个动作后,转移到另一个新状态,并且你在寻找一个最佳策略(也就是在状态x时该采取什么动作),那么你的问题基本上就是强化学习的问题。如果你知道转移概率(比如在状态x下执行动作a后,转移到状态y的概率),那么你可以看看马尔可夫决策过程(MDP)。如果你不知道转移概率,那就可以研究一下Q学习。需要注意的是,根据你的状态空间的大小,你可能需要一些聪明的办法来让强化学习有效运作,但如果是4维的情况,那应该没问题。虽然我不知道有没有强化学习的Python实现,但应该是有的。你也可以看看吴恩达博士的强化学习讲座

1

有一系列成熟的技术专门用于你提问中提到的情况。虽然这些技术有很多实现的库,但即使是许多数据分析师也不太了解它们。

这类技术被称为频繁项集(或频繁项集学习);另外还有关联规则和市场篮子分析这两个术语,但后者使用得比较少。(顺便说一下,也许这些名字听起来模糊,导致它们相对不为人知)。

arules背景文档的第一句话是:

挖掘频繁项集和关联规则是一种流行且经过充分研究的方法,用于发现大型数据集中变量之间有趣的关系。

从分类上讲,AR/FI是一种无监督的机器学习技术,根据HTF的说法,它是“寻找峰值”或“模式发现”的简化版。

无论如何,这两个术语——单独使用或一起使用,都是进行网络搜索的最佳初始查询词。你可以在维基百科上找到这两个术语的条目;其中关于关联规则的条目提供了一个很好的高层次概述,足够详细,适合程序员阅读。因此,这两个术语描述了这项技术;“Apriori”和“Eclat”是最广泛使用的原始关联规则算法的实现,这个算法最初是在IBM Almaden研究中心开发的。

使用apriori时,你需要传入你想要算法测试的数据库字段;同时还要传入一个阈值关联,也就是支持水平。我通常选择5%,然后根据需要调整,直到得到我想要的规则数量(支持水平越高,返回的规则越少)。

apriori返回的就是这些关联规则本身。

如果你想用Python库来做AR/FI,那么我知道的唯一一个是Orange(可能还有其他的)。(Orange有一个图形用户界面,你可能知道,但它也有一个很好的Python脚本接口)。我自己没有使用过Orange,但我简单看了一下它的关联规则模块,似乎实现方式和我个人使用过的AR库相似。我觉得这个教程(用Python写的)非常不错。

我建议可以通过Python使用R的强大AR/FI支持,使用R绑定库RPy2

我只用过R这个语言/平台来做关联规则,并且对所有五个AR/FI库都有一定的了解。在我第一个AR/FI项目中,我选择R并不是因为AR/FI库的可用性或质量,而是因为它的关系数据库驱动程序(支持MySQL、PostgreSQL和SQLite)使用起来非常简单;现在也有针对最常用的NoSQL事务数据库(如MongoDB和CouchDB)的驱动程序/绑定。MySQL的驱动程序/绑定让我能够通过R连接到我的数据库,并将数据直接传递给apriori算法。

撰写回答