2016-09-17 3 views
1

StringIndexerには見えないラベルに問題があります(here参照)。目に見えないカテゴリの文字列を処理してください。Spark CountVectorizer

私の質問は以下のとおりです。

  1. CountVectorizerは同じ制限がありますか?それはどのように語彙に含まれていない文字列を扱うのですか?

  2. さらに、入力データの影響を受けた語彙サイズか、または語彙サイズパラメータに従って固定されていますか?

  3. 最後に、ロジスティック回帰などの単純な分類子を仮定して、目に見えないカテゴリをゼロの行としてエンコードして、「不明」として扱われるべきではありません予測?

答えて

0

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,[],[])| 
// +--------+---------------------------+ 
+1

おかげzero323 @:

は、たとえば、以下の検討すべてのポイントを説明するために語彙が 'vocabSize'パラメータに応じてサイズが固定されていません、これは 'min(distinct(values)、vocabSize)'です。 –

関連する問題