[英]How to use StringIndexer to generate numeric variables?
我希望使用StringIndexer
作为对我的数据集中的1000多个类别进行排名的方法,从而生成一个表示相对频率的索引。 然后,我可以将该索引用作模型的数字功能。 不幸的是,默认情况下, StringIndex
存储一些元数据,将索引标记为分类,从而迫使我的模型将索引用作类别变量 。
有禁用此功能的某种方法,以便将index变量用作数字变量吗?
编辑:我正在使用字符串索引器作为ML管道中的一个阶段,因此解决方案将需要避免直接操纵数据帧。 另外,我将保存并加载此管道,因此自定义数据转换器可能不切实际。 我怀疑这不可能,因为目前正在编写Spark。
您可以索引数据,然后替换元数据。 假设您的数据如下所示:
import spark.implicits._
import org.apache.spark.ml.feature.StringIndexer
val indexer = new StringIndexer().setInputCol("raw").setOutputCol("indexed")
val df = Seq("a", "b", "b", "c", "c", "c").toDF("raw")
val indexed = indexer.fit(df).transform(df)
我们需要一个NumericAttribute
:
import org.apache.spark.ml.attribute.NumericAttribute
和元数据:
val meta = NumericAttribute.defaultAttr.withName("indexed").toMetadata
最后,我们可以使用as
方法替换元数据:
indexed.withColumn("indexed", $"indexed".as("indexed", meta))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.