CountVectorizerにも同じ制限がありますか?それはどのように語彙に含まれていない文字列を扱うのですか?
見えない値は気にしません。
は、入力データの影響を受ける語彙サイズですか、またはボキャブラリサイズパラメータに従って固定されていますか?
ベクトルのサイズは、語彙サイズを超えてはならず、さらに別個の値の数によって制限されます。
が見えないカテゴリーがそのように「不明」として処理されるべきゼロの列としてエンコードされてはならないので、これが起こるまさにいくつかの
を取得します。しかし、問題はもう少し複雑です。 StringIndexer
は通常、OneHotEncoder
とペアになっています。デフォルトでは、ダミー変数トラップを避けるために、ベースカテゴリを0のベクタとしてエンコードします。だから、インデックス付けと同じアプローチを使用することはあいまいです。あなたはいつも ワンコメント:-)私の質問に答える、
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,[],[])|
// +--------+---------------------------+
おかげzero323 @:
は、たとえば、以下の検討すべてのポイントを説明するために語彙が 'vocabSize'パラメータに応じてサイズが固定されていません、これは 'min(distinct(values)、vocabSize)'です。 –