相关疑难解决方法(0)

当列包含向量时如何在PySpark中进行匹配和替换

我正在尝试在Pyspark中进行RandomForest回归。因为大多数变量都是具有许多因子级别的分类变量,所以我不得不对它们进行字符串索引,一键编码并使用Vectorassembler创建一列特征向量。Vectorassembler的输出是在训练数据框中创建“功能”列。train_OHE在完成上述所有转换之后,我们仅将此数据框称为。

我的代码可以正常工作。

现在,当我运行randomforest回归器时,似乎出现了一个奇怪的错误。 scala.MatchError: [null,(1598,[0,2,234,274,295,1596],[1.0,1.0,1.0,1.0,1.0,1.0])] (of class org.apache.spark.sql.catalyst.expressions.GenericRowWithSchema)

当我运行时train_OHE.show(),“功能”列中的前20个元素都看起来像[1598,[0,2,234,274,295,1596],[1.0,1.0,1.0,1.0,1.0,1.0]]-由于稀疏的矢量表示,因此可以接受。

我认为这是因为null其中一行中某处有多余的元素。

因此,我的问题是如何找出数据框中的哪一行导致了此问题。如果使用的是名义上的字符串,我会使用train_OHE['features'].like('%null%')。在这种稀疏的向量元素的情况下,如何找出这个故障行呢?我试过,train_OHE['features'].split(',').like('%null%')但出错了。

python machine-learning pyspark

5
推荐指数
0
解决办法
297
查看次数

如何在 Pyspark 的 VectorAssembler 中使用字符串变量

我想在 Pyspark 上运行随机森林算法。Pyspark 文档中提到VectorAssembler 仅接受数字或布尔数据类型。因此,如果我的数据包含 Stringtype 变量,例如城市名称,我是否应该对它们进行 one-hot 编码,以便进一步进行随机森林分类/回归?

这是我一直在尝试的代码,输入文件在这里

train=sqlContext.read.format('com.databricks.spark.csv').options(header='true').load('filename')
drop_list = ["Country", "Carrier", "TrafficType","Device","Browser","OS","Fraud","ConversionPayOut"]
from pyspark.sql.types import DoubleType
train = train.withColumn("ConversionPayOut", train["ConversionPayOut"].cast("double"))#only this variable is actually double, rest of them are strings
junk = train.select([column for column in train.columns if column in drop_list])
transformed = assembler.transform(junk)
Run Code Online (Sandbox Code Playgroud)

我不断收到错误消息IllegalArgumentException: u'Data type StringType is not supported.'

PS:抱歉问了一个基本问题。我来自 R 背景。在R中,当我们进行随机森林时,不需要将分类变量转换为数值变量。

random-forest pyspark

4
推荐指数
1
解决办法
6252
查看次数

标签 统计

pyspark ×2

machine-learning ×1

python ×1

random-forest ×1