我已经看到 StringIndexer
有不可见标签的问题(参见 here )。
我的问题是:
CountVectorizer
有同样的限制吗?它如何处理不在词汇表中的字符串? 最佳答案
它不关心看不见的值。
向量的大小不能超过词汇量,并进一步受到不同值数量的限制。
这正是发生的事情。不过问题稍微复杂一些。 StringIndexer
通常与 OneHotEncoder
配对,默认情况下,ojit_code 将基本类别编码为零向量以避免虚拟变量陷阱。因此,对索引使用相同的方法将是模棱两可的。
为了说明所有要点,请考虑以下示例:
import org.apache.spark.ml.feature.CountVectorizer
val train = Seq(Seq("foo"), Seq("bar")).toDF("text")
val test = Seq(Seq("foo"), Seq("foobar")).toDF("text")
//
val vectorizer = new CountVectorizer().setInputCol("text")
vectorizer.setVocabSize(1000).fit(train).vocabulary
// Array[String] = Array(foo, bar)
/* Vocabulary size is truncated to the value
provided by VocabSize Param */
vectorizer.setVocabSize(1).fit(train).vocabulary
// Array[String] = Array(bar)
/* Unseen values are ignored and if there are no known values
we get vector of zeros ((2,[],[])) */
vectorizer.setVocabSize(1000).fit(train).transform(test).show
// +--------+---------------------------+
// | text|cntVec_0a49b1315206__output|
// +--------+---------------------------+
// | [foo]| (2,[1],[1.0])|
// |[foobar]| (2,[],[])|
// +--------+---------------------------+
关于apache-spark - 处理看不见的分类字符串 Spark CountVectorizer,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39546671/