为啥我的 Apriori 函数返回的是字母而不是项目? (错误的输出)
Posted
技术标签:
【中文标题】为啥我的 Apriori 函数返回的是字母而不是项目? (错误的输出)【英文标题】:Why is my Apriori function returning letters instead of items?? (wrong output)为什么我的 Apriori 函数返回的是字母而不是项目? (错误的输出) 【发布时间】:2021-06-08 16:55:58 【问题描述】:代码:
import pandas as pd
from mlxtend.preprocessing import TransactionEncoder
from apyori import apriori
dataset = [['egg','bread'],['milk'],['apple','milk'],['diapers'],['orange','egg','milk']]
te = TransactionEncoder()
te_ary = te.fit(dataset).transform(dataset)
final_df = pd.DataFrame(te_ary, columns=te.columns_)
print(final_df)
frq_itemsets= apriori(final_df, min_support=0.5, use_colnames=True)
association_results = list(frq_itemsets)
print(association_results)
输出:
apple bread china egg embroidery milk
0 False True False True False False
1 False False False False False True
2 True False False False False True
3 False False False False True False
4 False False True True False True
[RelationRecord(items=frozenset('a'), support=0.5, ordered_statistics=[OrderedStatistic(items_base=frozenset(), items_add=frozenset('a'), confidence=0.5, lift=1.0)]), RelationRecord(items=frozenset('e'), support=0.6666666666666666, ordered_statistics=[OrderedStatistic(items_base=frozenset(), items_add=frozenset('e'), confidence=0.6666666666666666, lift=1.0)]), RelationRecord(items=frozenset('i'), support=0.5, ordered_statistics=[OrderedStatistic(items_base=frozenset(), items_add=frozenset('i'), confidence=0.5, lift=1.0)])]
我做错了什么??我在 SO 上到处搜索,但似乎找不到这样的问题。
提前致谢。我希望这不是一个愚蠢的问题。有人可以帮忙吗?
【问题讨论】:
我对mlxtend
或 apyori
都不熟悉,但快速浏览似乎表明 [apriori
方法首先存在于 [mlxtend
](rasbt.github.io/mlxtend/user_guide/frequent_patterns/apriori) 所以任何使用另一个包的理由?其次,您使用apyori
中的apriori
的方式看起来更像是使用mlxtend
包中的函数的方式(参数、数据帧传递),在apyori
中,尝试直接传递您的dataset
和也许不是转换后的数据框?
嗨@Ben.T 感谢您的回复!当我使用from mlxtend.frequent_patterns import apriori
并打印结果时,我得到输出['support', 'itemsets']
。这些似乎是对象 apriori() 返回的列。这就是我尝试使用 apyori 的原因,因为我无法解决这个问题。
如果我将数据集直接输入 apriori() 我得到AttributeError: 'list' object has no attribute 'size'
【参考方案1】:
我相信apriori
存在误用,具体取决于您从哪个包中获得它。看看下面的区别
import pandas as pd
from mlxtend.preprocessing import TransactionEncoder
dataset = [['egg','bread'],['milk'],['apple','milk'],
['diapers'],['orange','egg','milk']]
te = TransactionEncoder()
te_ary = te.fit(dataset).transform(dataset)
final_df = pd.DataFrame(te_ary, columns=te.columns_)
print(final_df)
from mlxtend.frequent_patterns import apriori
# this method returns a dataframe, no need to use a list
df_freq = apriori(final_df, min_support=0.5, use_colnames=True)
print(df_freq)
# support itemsets
# 0 0.6 (milk)
from apyori import apriori
# this method returns a generator hence the use of list to get the result
print(list(apriori(dataset, min_support=0.5, )))
# [RelationRecord(items=frozenset('milk'), support=0.6,
# ordered_statistics=[OrderedStatistic(items_base=frozenset(),
# items_add=frozenset('milk'),
# confidence=0.6, lift=1.0)])]
【讨论】:
直到现在还没有得到它们输出中的包之间的区别谢谢!!但是,我仍然以这种形式获得OrderedStatistic(items_base=frozenset('b'), items_add=frozenset('.', 'u'), confidence=0.9511924998712203, lift=1.0), OrderedStatistic(items_base=frozenset('u'), items_add=frozenset('.', 'b'), confidence=1.0, lift=1.0),
的输出。我有一个更大的数据集,我正在努力获取规则,这真的是我的问题
@cat1234 没有数据集,很难说出为什么会得到这个结果。据说获得这种结果的可能是您的数据集不是字符串列表,而是简单的字符串列表。在您的实际情况中,type(dataset)
是什么,如果是列表,则为 type(dataset[0])
,如果是列表,则为 type(dataset[0][0])
以上是关于为啥我的 Apriori 函数返回的是字母而不是项目? (错误的输出)的主要内容,如果未能解决你的问题,请参考以下文章
为啥 Eunit 坚持我的函数返回 ok, value 而不是?
为啥我的 decipher.update 返回一个函数而不是解密的文本?节点JS