首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SparkR摘要()提取

SparkR摘要()提取
EN

Stack Overflow用户
提问于 2017-05-03 08:15:00
回答 1查看 390关注 0票数 1

对于SparkR中使用随机森林回归的汇总()方法,我有一个问题。建模过程工作良好,但我对算法的结果之一的featureImportance很感兴趣。我想将featureImportance变量存储到一个SparkDataFrame中来可视化它们,但是我不知道如何传输/提取它们。

代码语言:javascript
复制
model <- spark.randomForest(x1, x2 , x3, type = "regression", maxDepth = 30, maxBins = 50, numTrees=50, impurity="variance", featureSubsetStrategy="all")

summaryRF <- summary(model)

summaryRF$feature:
1. 'x1'
2. 'x2'
3. 'x3'

summaryRF$featureImportances: 
'(3,[0,1,2],[0.01324152135,0.0545454422,0.0322122334])'

有什么解决方案可以从list对象中获取featureImportance值并将其存储在SparkDataFrame中吗?

使用collect()方法提供以下错误代码:

(函数(类、fdef、mtable)中的错误:无法为函数“collect”找到用于签名“字符”的继承方法

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-05-03 09:04:26

summaryRF不再是SparkDataFrame了,这就是为什么collect不能工作的原因:)

summaryRF$featureImportances是一个character string (在Spark方面,它是一个当前不能(v.2.1.0)序列化的SparseVector,我猜这就是为什么它会被强迫进入string)。

因此,据我所知,您必须通过直接操作字符串来提取相关的位:

代码语言:javascript
复制
# extract the feature indexes and feature importances strings:
fimpList <- strsplit(gsub("\\(.*?\\[","",summaryRF$featureImportances),"\\],\\[")

# split the index and feature importances strings into vectors (and remove "])" from the last record):
fimp <- lapply(fimpList, function(x) strsplit(gsub("\\]\\)","",x),","))

# it's now a list of lists, but you can make this into a dataframe if you like:
fimpDF <- as.data.frame(do.call(cbind,(fimp[[1]])))

eta:顺便说一下,Spark中的索引从0开始,所以如果您想在加入summaryRf$features中的特性名称时合并到summaryRF$featureImportances中的特性索引,那么您必须考虑到这一点:

代码语言:javascript
复制
featureNameAndIndex <- data.frame(featureName = unlist(summaryRf$features),
                                  featureIndex = c(0:(length(summaryRf$features)-1))),
                                  stringsAsFactors = FALSE)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43754683

复制
相关文章

相似问题

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