Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Python中实现FPGrowth算法?_Python_Apache Spark_Machine Learning_Pyspark - Fatal编程技术网

如何在Python中实现FPGrowth算法?

如何在Python中实现FPGrowth算法?,python,apache-spark,machine-learning,pyspark,Python,Apache Spark,Machine Learning,Pyspark,我在Python中成功地使用了apriori算法,如下所示: import pandas as pd from mlxtend.frequent_patterns import apriori from mlxtend.frequent_patterns import association_rules df = pd.read_csv('C:\\Users\\marka\\Downloads\\Assig5.csv') df = apriori(df, min_support=0.79, u

我在Python中成功地使用了apriori算法,如下所示:

import pandas as pd
from mlxtend.frequent_patterns import apriori
from mlxtend.frequent_patterns import association_rules

df = pd.read_csv('C:\\Users\\marka\\Downloads\\Assig5.csv')
df = apriori(df, min_support=0.79, use_colnames=True)
rules = association_rules(df, metric="lift", min_threshold=1)
rules[ (rules['lift'] >= 1) &
       (rules['confidence'] >= 1) ]
我想用FPGrowth算法看看是否得到了相同的结果,但我相信我用错了,因为我没有得到类似的输出。spark()的文档说明:

所以我的代码是:

from pyspark.mllib.fpm import FPGrowth
from pyspark import SparkConf
from pyspark.context import SparkContext
sc = SparkContext.getOrCreate(SparkConf().setMaster("local[*]"))
data = sc.textFile("C:\\Users\\marka\\Downloads\\Assig6.txt")
transactions = data.map(lambda line: line.strip().split(' '))
model = FPGrowth.train(transactions, minSupport=0.2, numPartitions=10)
result = model.freqItemsets().collect()
for fi in result:
    print(fi)
但我得到的不是一个真正的答案,而是下面的问题:我做错了什么

FreqItemset(items=['1\t1\t1\t1\t1\t1\t1\t0\t0\t0\t0\t1\t1\t0\t0\t1\t1\t1\t1\t1\t0\t0'], freq=24)
为了制作Assig6,我只是将我的原始csv重新保存为txt

我开始更改格式,并根据user10136092更新代码,但仍然得到了不想要的输出。这是我的代码、输出和新输入的示例图片

from pyspark.mllib.fpm import FPGrowth
from pyspark import SparkConf
from pyspark.context import SparkContext
sc = SparkContext.getOrCreate(SparkConf().setMaster("local[*]"))
data = sc.textFile("C:\\Users\\marka\\Downloads\\Assig2.txt")
data.map(lambda line: line.strip().split())
transactions = data.map(lambda line: line.strip().split(' '))
model = FPGrowth.train(transactions, minSupport=0.2, numPartitions=10)
result = model.freqItemsets().collect()
for fi in result:
    print(fi)
输出

FreqItemset(items=['Rock_salt\tFlashlights\tWater\tSnow_shovels\tBlankets\tCanned_food'], freq=34)

您的数据不是Spark FPGrowth算法的有效输入

在Spark中,每个篮子应表示为唯一标签列表,例如:

baskets = sc.parallelize([("Rock Salt", "Blankets"), ("Blankets", "Dry Fruits", Canned Food")])
不是二进制矩阵,就像您使用的另一个库一样。请先将您的数据转换为上述格式

此外,您的数据不是以空格分隔的,因此即使输入正确,您也应该像这样拆分

 data.map(lambda line: line.strip().split())

我认为该文件是用制表符分隔的,所以您应该用
'\t'
而不是
'


transactions=data.map(lambda行:line.strip().split('\t'))

感谢您的快速回复和富有洞察力的回复。我编辑了上面的帖子,仍然得到了不想要的输出。我在excel中查找并替换了我的1,删除了我的0,将其复制到文本文件,并添加了您提到的线条带。您能否提供其他提示,说明为什么它可能不起作用/示例文本文件与它起作用,以便我进行比较?@MarkMcGown您可能错过了此处提出的第二点-您的数据由制表符(
\t
)而不是空格分隔。在代码段中,您只需丢弃
data.map(lambda行:line.strip().split())
虽然它应该用作
事务
。谢谢,这会导致“”被视为篮子中的项目,所以我只需要删除空值。初学者的问题是,如果您已经添加了最后的快速提示,我很难找到如何执行此操作,我尝试了这个notempty=unique.filter(lambda x:x!=“”)哪一个Python库为FPGrowth提供了最好的性能?我一直在使用mlxtend,想知道是否有比这更好的实现。谢谢。
 data.map(lambda line: line.strip().split())