17

ドキュメントのセットを入力として受け取る Spark の MLLib を使用して NaiveBayes 分類器を構築しようとしています。

機能としていくつかのもの (つまり、作成者、明示的なタグ、暗黙のキーワード、カテゴリ) を入れたいのですが、ドキュメントを見ると、aLabeledPointには double のみが含まれているようです。つまり、 のように見えLabeledPoint[Double, List[Pair[Double,Double]]ます。

代わりに、コードの残りの部分からの出力として得られるものは、のようなものになりますLabeledPoint[Double, List[Pair[String,Double]]

自分で変換できましたが、奇妙に思えます。MLLib を使用してこれを処理するにはどうすればよいですか?

答えはHashingTFクラス (つまり、ハッシュ機能) にあると思いますが、それがどのように機能するのかわかりません。何らかの容量値が必要なようですが、キーワードとトピックのリストは実質的に制限されていません (または、より良いのは不明です)。始まり)。

4

1 に答える 1

10

HashingTFハッシング トリックを使用して、制限されていない可能性のある数の特徴を制限されたサイズのベクトルにマッピングします。機能の衝突の可能性がありますが、コンストラクターでより多くの機能を選択することで、これを小さくすることができます。

機能のコンテンツだけでなく、いくつかのメタデータに基づいて機能を作成するには (たとえば、ドキュメントに「cats」という単語を含めるのではなく、「cats」のタグを付ける)、HashingTFクラスに「tag:これにより、単語を含むタグは、単語だけではなく別のスロットにハッシュされます。

を使用して機能カウント ベクトルを作成した場合HashingTFは、0 を超えるカウントを 1 に設定することで、それらを使用してバッグ オブ ワード機能を作成できます。次のIDFように、クラスを使用して TF-IDF ベクトルを作成することもできます。

val tfIdf = new IDF().fit(featureCounts).transform(featureCounts)

あなたの場合、ドキュメントごとの単語数をすでに計算しているようです。これはHashingTF、カウントを行うように設計されているため、クラスでは機能しません。

この論文では、機能の衝突が言語アプリケーションでそれほど問題にならない理由について、いくつかの議論があります。本質的な理由は、ほとんどの単語が一般的ではない (言語の特性による) ことと、衝突が単語の頻度とは無関係であること (ハッシュ特性による) であるため、モデルに役立つほど一般的な単語が両方ともハッシュされる可能性は低いためです。同じスロット。

于 2014-12-09T23:50:33.607 に答える