0

私はScikitを使用しています。#oscarsについてつぶやきのコーパス(テキストのみ)をクラスタリングするために学びます。K-Meansクラスタリングのためにフィーチャの重みを変更するにはどうすればよいですか?

@LeonardoDiCaprioのようなユーザー名や#redcarpetのようなハッシュタグがプリプロセンスでより重要であると考えることができるのは本当に便利です。

より重要な機能であるために、一般的なユーザー名とハッシュタグに重要度を追加することが可能かどうかを知りたいと思います。

+0

重量を追加するとどういう意味ですか? k-meansは、距離計算を使用して、2つのインスタンスのフィーチャがどれほど類似しているかを試してみます。あなたは、 "近所"が特定の単語の出現を太りすぎないようにしたいと言っていますか?逆に言えば、つぶやきの間に「距離」を超過するようにしたいということです。また、あなたのデータは何らかの方法で正規化されていますか? – flyingmeatball

+0

@flyingmeatballたとえば、コーパスの一般的な単語(つぶやきの%30以上に表示される)とユーザー名(「@」で始まるトークン)のため、機能として "@sasha" )。しかし、私はユーザー名ではない機能を見逃したくありません。 私のデータのパイプラインはCountVectorizer - > K-Means – fuxes

+0

私はSGDClassifierでこのようなことに遭遇しました。 fitメソッドに与えられたパラメータsample_weightを持ちます。おそらくK-手段にはそういうものがあります。見てください:http://scikit-learn.org/stable/auto_examples/linear_model/plot_sgd_weighted_samples.html#example-linear-model-plot-sgd-weighted-samples-py – Shovalt

答えて

5

K-手段はよくだけで、あなたが「重量」とは、特定の機能は、あなたが

のようなものを希望したい場合は、ベクトルAとBの間の距離は、このように

|| A - B || = sqrt(SUM_i (A_i - B_i)^2) 

として表現されるユークリッド空間、のために定義されます

|| A - B ||_W = sqrt(SUM_i w_i(A_i - B_i)^2) 

これは、フィーチャiが(w_i> 1の場合)より重要になる結果となるため、異なる値(単語の袋/単語のセットという意味では、 2つの文書はこの特定の単語の量が異なります。別の言葉で違うものとはかなり異なっている)。

どのように強制することができますか?まあ、基本的な数学はあなたが必要なすべてです!あなたは簡単に他の言葉でその

|| A - B ||_W = || sqrt(W)*A - sqrt(W)*B || 

見ることができます - あなたはあなたのTFIDFの変圧器を取り出し(またはあなたが一定の大きさのベクトルにテキストをマッピングするために使用するものは何でも)、興味のある単語の原因となっている機能を確認するには、 (次元数に等しいサイズの)1のベクトルを作成し、関心のある単語の値を大きくして(たとえば10x)、このことを平方根にします。次に、このウェイトベクトルでブロードキャスト(np.multiply)を「ポイントワイズ」に乗算することによって、すべてのデータを単純に前処理します。それだけであなたが必要なのは、あなたの言葉がこの明確に定義されたやり方でもっと重要になります。数学的観点からは、これはユークリッドの代わりにマハラノビス距離を導入し、共分散行列はw * I(したがって、あなたのノルムのジェネレータとして使用される対角線ガウス)に等しくなります。

+0

よく言っています - それはいくつかの裁判を取るかもしれません@fuxes 「価値ある」用語を乗算するためにどのような価値を使用するかを理解するためのエラーが含まれています。一般的に、モデルは多かれ少なかれ、さまざまな体重の更新で正確かどうかを測定し、全体的なパフォーマンスをテストセットと比較することができます。 – flyingmeatball

関連する問題