什么是 StringIndexer 、 VectorIndexer 以及如何使用它们?
Posted
技术标签:
【中文标题】什么是 StringIndexer 、 VectorIndexer 以及如何使用它们?【英文标题】:What is StringIndexer , VectorIndexer, and how to use them? 【发布时间】:2017-10-26 23:47:16 【问题描述】:Dataset<Row> dataFrame = ... ;
StringIndexerModel labelIndexer = new StringIndexer()
.setInputCol("label")
.setOutputCol("indexedLabel")
.fit(dataFrame);
VectorIndexerModel featureIndexer = new VectorIndexer()
.setInputCol("s")
.setOutputCol("indexedFeatures")
.setMaxCategories(4)
.fit(dataFrame);
IndexToString labelConverter = new IndexToString()
.setInputCol("prediction")
.setOutputCol("predictedLabel")
.setLabels(labelIndexer.labels());
什么是StringIndexer、VectorIndexer、IndexToString,它们有什么区别?我应该如何以及何时使用它们?
【问题讨论】:
【参考方案1】:字符串索引器 - 如果您希望机器学习算法将列识别为分类变量,或者如果要将文本数据转换为保持分类上下文的数字数据,请使用它。
e,g 将天数(星期一、星期二...)转换为数字表示。
Vector Indexer - 如果我们不知道传入数据的类型,请使用它。因此,我们将区分分类数据和非分类数据的逻辑留给了使用 Vector Indexer 的算法。
e,g - 来自 3rd Party API 的数据,其中数据被隐藏并直接提取到训练模型中。
Indexer to string - 与 String indexer 正好相反,如果最终输出列是使用 String Indexer 索引的,则使用此索引器,现在我们要将其数字表示转换回文本,以便更好地理解结果。
【讨论】:
【参考方案2】:我只知道这两个:
StringIndexer 和 VectorIndexer
字符串索引器:
将单个列转换为索引列(类似于 R 中的因子列)矢量索引器:
用于索引 featuresCol 列中的分类预测变量。请记住, featuresCol 是由向量组成的单列(请参阅 featuresCol 和 labelCol)。每行都是一个向量,其中包含来自每个预测变量的值。 如果您有字符串类型的预测器,您首先需要使用 StringIndexer 对这些列进行索引。 featuresCol 包含向量,向量不包含字符串值。看看这里例如:https://mingchen0919.github.io/learning-apache-spark/StringIndexer-and-VectorIndexer.html
【讨论】:
链接已损坏。 我发现页面已移至github.com/MingChen0919/learning-apache-spark - 一个非常好的资源! @Amit Haim 。请你用通俗的术语解释一下向量索引器的含义。我发现很难理解 Vector indexer 的用例 @ColinG 请帮忙 你知道什么时候你会使用一个和另一个吗?以上是关于什么是 StringIndexer 、 VectorIndexer 以及如何使用它们?的主要内容,如果未能解决你的问题,请参考以下文章
特征处理1_StringIndexer与OneHotEncoder
应用 StringIndexer 更改 PySpark 数据框中的列
Spark StringIndexer和IndexToString