K-means は、アプリオリに既知の数のクラスターに関心がある限り、おそらくうまく機能します。あなたはk-meansに基づいており、ベクトル量子化のためのデータ圧縮に使用されているLBGアルゴリズムについて読むことを検討するかもしれません。基本的には、重心が収束した後に重心を分割し、許容できる数のクラスターに達するまで分割し続ける反復 k-means です。
一方、データは 1 次元であるため、まったく別のことを行うことができます。
5 つの時点 (8、11、15、16、17) で行われたアクションがあるとします。これらのアクションのそれぞれについて、μ が時間に等しく、σ = 3 のガウス分布をプロットしてみましょう。

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

16前後をピークにアクションの密度を示しています。
この観察に基づいて、次の単純なアルゴリズムを提案します。
- 対象の時間範囲のゼロのベクトルを作成します。
- アクションごとにガウスを計算し、それをベクトルに追加します。
- ベクトルをスキャンして、α を掛けたベクトルの最大値より大きい値を探します。
ガウスの値は非常に迅速にゼロに収束するため、アクションごとにベクトルの小さなセクションのみを更新する必要があることに注意してください。
の値を調整することで、アルゴリズムを調整できます。
- α ∈ [0,1] は、アクティビティのピークがどれだけ重要であるかを示します。
- 互いに近いと見なされるアクションの距離に影響を与える σ、および
- ベクトルの要素ごとの期間 (分、秒など)。
アルゴリズムは、アクションの数に関して線形であることに注意してください。さらに、並列処理は難しくありません。データを複数のプロセスに分割してガウス分布を合計し、生成されたベクトルを合計します。