使用TFIDF在Spark MLLIB Kmeans中为文本clutsering索引超出范围

2024-05-14 21:37:00 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图使用spark MLlib运行k-means,但我得到了索引超出范围的错误。在

我已经拆分了我非常小的示例输入文件,输出如下这:在

['hello', 'world', 'this', 'is', 'earth']
['what', 'are', 'you', 'trying', 'to', 'do']
['trying', 'to', 'learn', 'something']
['I', 'am', 'new', 'at', 'this', 'thing']
['what', 'about', 'you']

现在我使用spark给出的TFIDF代码来实现稀疏表示。输出为:-

^{pr2}$

现在我运行MLlib在火花:-在

clusters = KMeans.train(tfidf_vectors, 2, maxIterations=10)  

def error(point):
    center = clusters.centers[clusters.predict(point)]
    return sqrt(sum([x**2 for x in (point - center)]))

WSSSE = tfidf_vectors.map(lambda point: error(point)).reduce(lambda x, y: x + y)
print("Within Set Sum of Squared Error = " + str(WSSSE))

clusters.save(sc, "myModelPath")
sameModel = KMeansModel.load(sc, "myModelPath")

但我在WSSSE步骤得到了索引超出范围的错误。 我做错什么了?在


Tags: toyou错误errorthiswhatsparkpoint
1条回答
网友
1楼 · 发布于 2024-05-14 21:37:00

我今天已经遇到了一个类似的问题,它看起来像是is a bug。TFIDF创建SparseVectors,如下所示:

>>> from pyspark.mllib.linalg import Vectors
>>> sv = Vectors.sparse(5, {1: 3})

使用大于最后一个非零值的索引访问值会导致异常:

^{pr2}$

快速但不是很有效的解决方法是将SparseVector转换为NumPy数组:

def error(point):                                                         
    center = clusters.centers[clusters.predict(point)]
    return sqrt(sum([x**2 for x in (point.toArray() - center)]))

相关问题 更多 >

    热门问题