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(したがって、あなたのノルムのジェネレータとして使用される対角線ガウス)に等しくなります。
重量を追加するとどういう意味ですか? k-meansは、距離計算を使用して、2つのインスタンスのフィーチャがどれほど類似しているかを試してみます。あなたは、 "近所"が特定の単語の出現を太りすぎないようにしたいと言っていますか?逆に言えば、つぶやきの間に「距離」を超過するようにしたいということです。また、あなたのデータは何らかの方法で正規化されていますか? – flyingmeatball
@flyingmeatballたとえば、コーパスの一般的な単語(つぶやきの%30以上に表示される)とユーザー名(「@」で始まるトークン)のため、機能として "@sasha" )。しかし、私はユーザー名ではない機能を見逃したくありません。 私のデータのパイプラインはCountVectorizer - > K-Means – fuxes
私は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