gpt4 book ai didi

python - 如何将向量转换为数组以进行频繁模式分析

转载 作者:行者123 更新时间:2023-11-28 22:21:20 25 4
gpt4 key购买 nike

我正在应用频繁的模式分析,需要一些输入类型方面的帮助。

首先,我使用 stringindexer 将我的类别变量转换为数字。

然后,我为每个分类值创建一个唯一的数字,如下所示:

add_100=udf(lambda x:x+100,returnType=FloatType())
add_1000=udf(lambda x:x+1000,returnType=FloatType())
df = df.select('cat_var_1', add_1000('cat_var_2').alias('cat_var_2_final'), add_10000('cat_var_3').alias('cat_var_3_final'))

我的下一步是创建一个具有以下特征的向量:

featuresCreator = ft.VectorAssembler(inputCols=[col for col in features], outputCol='features')
df=featuresCreator.transform(df)

最后,我尝试拟合我的模型:

from pyspark.ml.fpm import FPGrowth
fpGrowth = FPGrowth(itemsCol="features", minSupport=0.5, minConfidence=0.6)

model = fpGrowth.fit(df)

并得到这个错误:

u'requirement failed: The input column must be ArrayType, but got org.apache.spark.ml.linalg.VectorUDT@3bfc3ba7.

那么,问题是,如何将向量转换为数组?或者,我还有其他方法可以解决这个问题吗?

最佳答案

FPGrowth 采用数组而不是向量。由于 VectorAssembler 会给你一个向量作为输出,一个可能的简单解决方案是使用 UDF 将该输出转换为数组。

to_array = udf(lambda x: x.toArray(), ArrayType(DoubleType()))
df = df.withColumn('features', to_array('features'))

更好的解决方案是一次完成所有操作,即根本不使用 VectorAssembler。这样做的好处是根本不需要 UDF,因此速度更快。这利用了 pyspark 中内置的 array 函数。

from pyspark.sql import functions as F
df2 = df.withColumn('features', F.array('cat_var_1', 'cat_var_2', 'cat_var_3'))

关于python - 如何将向量转换为数组以进行频繁模式分析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48397543/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com