2

ユーザーが行ったアクション (たとえば、コンテンツのモデレートなど) を含む巨大なジャーナルがあります。「大量」アクション、つまり密度が高すぎるアクションを見つけたいと思います(ユーザーはおそらくあまり考えずにこれらのアクションを作成しました:))。

これは、アクションを日付ごとに (線形空間で) クラスター化し、密度が高すぎるクラスターをマークすることになります。

私はクラスタリングのアルゴリズムと方法の専門家ではありませんが、クラスタの数がわからないため、 k-means クラスタリングではうまくいかないと思います。また、理想的には、アルゴリズムを「微調整」したいとも考えています。

何をアドバイスしますか?

PSここに私が見つけたいくつかのリソースがあります(Rubyで):

  • hierclust - 空間データ用の単純な階層クラスタリング ライブラリ
  • AI4R - いくつかのクラスタリング アルゴリズムを実装するライブラリ
4

2 に答える 2

4

K-means は、アプリオリに既知の数のクラスターに関心がある限り、おそらくうまく機能します。あなたはk-meansに基づいており、ベクトル量子化のためのデータ圧縮に使用されているLBGアルゴリズムについて読むことを検討するかもしれません。基本的には、重心が収束した後に重心を分割し、許容できる数のクラスターに達するまで分割し続ける反復 k-means です。

一方、データは 1 次元であるため、まったく別のことを行うことができます。

5 つの時点 (8、11、15、16、17) で行われたアクションがあるとします。これらのアクションのそれぞれについて、μ が時間に等しく、σ = 3 のガウス分布をプロットしてみましょう。

ここに画像の説明を入力

これらのガウス分布の値の合計がどのように見えるかを見てみましょう。

ここに画像の説明を入力

16前後をピークにアクションの密度を示しています。

この観察に基づいて、次の単純なアルゴリズムを提案します。

  1. 対象の時間範囲のゼロのベクトルを作成します。
  2. アクションごとにガウスを計算し、それをベクトルに追加します。
  3. ベクトルをスキャンして、α を掛けたベクトルの最大値より大きい値を探します。

ガウスの値は非常に迅速にゼロに収束するため、アクションごとにベクトルの小さなセクションのみを更新する必要があることに注意してください。

の値を調整することで、アルゴリズムを調整できます。

  1. α ∈ [0,1] は、アクティビティのピークがどれだけ重要であるかを示します。
  2. 互いに近いと見なされるアクションの距離に影響を与える σ、および
  3. ベクトルの要素ごとの期間 (分、秒など)。

アルゴリズムは、アクションの数に関して線形であることに注意してください。さらに、並列処理は難しくありません。データを複数のプロセスに分割してガウス分布を合計し、生成されたベクトルを合計します。

于 2012-12-08T15:44:53.017 に答える
1

密度ベースのクラスタリングを見てください。たとえば、 DBSCANと OPTICS。

これはまさにあなたが望むもののように聞こえます。

于 2012-12-09T07:52:32.093 に答える