使用Orange提取关联规则时遇到的问题?

我的数据集尺寸为(878049, 6)

数据集看起来像这样:

enter image description here

我想提取类别列与其他列之间的关联规则。因此,根据文档,我尝试使用Orange-Associate进行以下操作:

In:import Orangedata = Orange.data.Table("data.csv")In:data.domain.attributesOut:   (DiscreteVariable('Category', values=['ARSON', 'ASSAULT', 'BAD CHECKS', 'BRIBERY', 'BURGLARY', ...]), DiscreteVariable('Descript', values=['ABANDONMENT OF CHILD', 'ABORTION', 'ACCESS CARD INFORMATION, PUBLICATION OF', 'ACCESS CARD INFORMATION, THEFT OF', 'ACCIDENTAL BURNS', ...]), DiscreteVariable('DayOfWeek', values=['Friday', 'Monday', 'Saturday', 'Sunday', 'Thursday', ...]), DiscreteVariable('PdDistrict', values=['BAYVIEW', 'CENTRAL', 'INGLESIDE', 'MISSION', 'NORTHERN', ...]), DiscreteVariable('Resolution', values=['ARREST, BOOKED', 'ARREST, CITED', 'CLEARED-CONTACT JUVENILE FOR MORE INFO', 'COMPLAINANT REFUSES TO PROSECUTE', 'DISTRICT ATTORNEY REFUSES TO PROSECUTE', ...]))In:from orangecontrib.associate.fpgrowth import *  X, mapping = OneHot.encode(data, include_class=True)XOut:array([[False, False, False, ..., False, False, False],       [False, False, False, ..., False, False, False],       [False, False, False, ..., False, False, False],       ...,        [False, False, False, ..., False, False, False],       [False, False, False, ..., False, False, False],       [False, False, False, ..., False, False, False]], dtype=bool)In: sorted(mapping.items())Out:[(0, (0, 0)), (1, (0, 1)), (2, (0, 2)), (3, (0, 3)), (4, (0, 4)), (5, (0, 5)), (6, (0, 6)), (7, (0, 7)),.... (950, (4, 15)), (951, (4, 16))]

然后:

In:itemsets = dict(frequent_itemsets(X, .4))len(itemsets)Out:1 In: class_items = {item                for item, var, _ in OneHot.decode(mapping, data, mapping)                if var is data.domain.class_var}In:sorted(class_items)Out:[]

我认为问题出在我没有正确生成Orange表。因此,我应该如何使用Orange加载数据集以生成关联规则?

更新

根据@K3—rnc的回答,我尝试了以下操作:

itemsets = dict(frequent_itemsets(X, .1))print (len(itemsets))print( itemsets)for itemset, _support in itemsets:    print(' '.join('{}={}'.format(var.name, val)                   for _, var, val in OneHot.decode(itemset, data, mapping)))18{frozenset({935}): 206403, frozenset({20}): 92304, frozenset({928}): 119908, frozenset({924}): 129211, frozenset({946}): 526790, frozenset({921}): 116707, frozenset({946, 932}): 93924, frozenset({919}): 121584, frozenset({932}): 157182, frozenset({21}): 126182, frozenset({922}): 125038, frozenset({16}): 174900, frozenset({929}): 105296, frozenset({918}): 133734, frozenset({16, 946}): 156586, frozenset({925}): 89431, frozenset({923}): 124965, frozenset({920}): 126810}---------------------------------------------------------------------------ValueError                                Traceback (most recent call last)<ipython-input-83-83a24c082126> in <module>()      2 print (len(itemsets))      3 print( itemsets)----> 4 for itemset, _support in itemsets:      5     print(' '.join('{}={}'.format(var.name, val)      6                    for _, var, val in OneHot.decode(itemset, data, mapping)))ValueError: not enough values to unpack (expected 2, got 1)

然而,我仍然遇到相同的问题…我无法提取关联规则。


回答:

您试图在没有数据域中任何类变量的情况下诱导分类规则。如果您打印data.domain,您会看到您只有常规属性和元数据。

[Category, DayOfWeek, PdDistrict, Resolution] {Descript, Address}

要解决这个问题,您需要将其中一个属性设置为类变量。

new_domain = Orange.data.Domain(list(data.domain.attributes[1:]),              data.domain.attributes[0],              metas=data.domain.metas)

这将把’Category’属性设置为类变量。当然,您可以通过上面的例子设置自己的类变量。如果您现在打印new_domain,您应该会看到类似这样的内容:

[DayOfWeek, PdDistrict, Resolution | Category] {Descript, Address}

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注