首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >拟火花:稀疏向量到枕叶稀疏矩阵

拟火花:稀疏向量到枕叶稀疏矩阵
EN

Stack Overflow用户
提问于 2016-11-11 23:07:11
回答 1查看 7.7K关注 0票数 12

我有一列短句的星星之火数据,还有一个带有范畴变量的列。我想在句子上执行tf-idf,在分类变量上执行one-hot-encoding,然后一旦它变得更小,就输出到驱动程序上的稀疏矩阵(对于一个scikit-learn模型)。

以稀疏的形式从火花中获取数据的最佳方法是什么?在稀疏向量上似乎只有一个toArray()方法,它输出numpy数组。然而,文档中确实有这样的说法: say稀疏数组可用于火花稀疏阵列。

还请记住,tf_idf值实际上是稀疏数组的一列。理想情况下,最好将所有这些特性放到一个大型稀疏矩阵中。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-11-11 23:59:01

一种可能的解决办法可以表述如下:

  • 将特征转换为RDD并提取矢量: 从pyspark.ml.linalg导入SparseVector从操作符导入吸引剂df = sc.parallelize([ (SparseVector(3,0,2,1.0,3.0),),(SparseVector(3,1,4.0),)].toDF(“特性”)SparseVector=df.rdd.map(“特性”)
  • 添加行索引: indexed_features = features.zipWithIndex()
  • 元组(i, j, value)的平坦到RDD: def yield (行):vec,i=zip中j,v的行(vec.indices,vec.values):产量i,j,v条目=indexed_features.flatMap(爆炸)
  • 收集和重塑: row_indices,col_indices,data = zip(*entries.collect())
  • 计算形状: shape =( df.count(),df.rdd.map(attrgetter("features")).first().size )
  • 创建稀疏矩阵: 从scipy.sparse import csr_matrix mat = csr_matrix((data,(row_indices,col_indices)),shape=shape)
  • 快速检查: mat.todense() 预期结果: 矩阵([1,0.,3.,0.,4.,0.])

另一个:

  • features的每一行转换为矩阵: 导入np as_matrix(vec):数据,索引= vec.values,vec.indices形状= 1,vec.size返回csr_matrix((数据,索引,np.array(0,vec.values.size)),形状) mats = features.map(as_matrix)
  • 并使用vstack减少: 从scipy.sparse导入vstack = mats.reduce(lambda,y: v堆栈( x,y)) 或者collectvstack mat =v堆栈(mats.collect())
票数 19
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40557577

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档