web-dev-qa-db-ja.com

平均シフトクラスタリングで帯域幅を定義する方法は?

Java平均シフトクラスタリングアルゴリズムを使用してカラー量子化を実行するプログラムを作成しています。画像はRGBで、解像度は512x512です。入力の合計色を減らして画像ファイルのサイズを小さくしたいのですが画像。

平均シフトアルゴリズムでユークリッド二乗距離を計算するための帯域幅の定義に問題があります。

データに適切な帯域幅をどのようにして知っていますか?それを定義する公式はありますか?

2
user10057710

帯域幅は、カーネル関数の距離/サイズスケールです。つまり、平均を計算するために使用される「ウィンドウ」のサイズです。

データのすべての目的とすべてのインスタンスで適切に機能する帯域幅はありません。代わりに、次のいずれかを行う必要があります

  • アルゴリズムに適切な帯域幅を手動で選択します。または

  • 帯域幅を自動的に適応または推定するアルゴリズムを使用します(ただし、これはある程度の計算オーバーヘッドを意味します)。

    • Python sklearnモジュールは、最近傍分析に基づくestimate_bandwith()関数を提供します。
    • 豊富な研究 このトピックについて存在します。 Comaniciu、Ramesh、Meer(2001):可変帯域幅の平均シフトとデータ駆動型のスケール選択。

帯域幅またはカーネルについての議論では、最初に距離メトリックをすでに定義している必要があります。画像処理では、適切な色空間を選択する必要があります。目標によっては、RGBが最適な結果を生成しない場合があります。

3
amon