私は小規模なプロジェクトに対してk平均クラスタリングアルゴリズムを実装しようとしています。私はあなたがnumpyの配列の操作を使用して更新機能を記述する場合numpy配列関数を使用して要素を更新する
K-手段ではなく、手動で配列をループし、値を自分で更新するので、はるかに高速であることを示唆しているthis articleに出くわしました。
私は正確に配列の各要素を反復して更新しています。データセットz
の各要素について、最も近い重心からのクラスター配列を各要素の反復によって割り当てます。
for i in range(z):
clstr[i] = closest_center(data[i], cen)
と私は、グレースケール画像を使用しておりますので、私の更新機能が
def closest_center(x, clist):
dlist = [fabs(x - i) for i in clist]
return clist[dlist.index(min(dlist))]
で、私はユークリッド距離を計算し、絶対値を使用しています。
opencv
にもこのアルゴリズムがあります。鉱山は70秒以上かかるが、アルゴリズムを実行するには2秒以下で済む。記事が示唆していることを知ることができますか?
私の画像はグレースケールとしてインポートされ、2dのnumpyの配列として表されます。 1d配列を処理する方が簡単だから、さらに1d配列に変換しました。
なぜこれを自分で実装したいのですか? 'scipy'はすでにk-meansクラスタリングアルゴリズムを持っています。 –
@AkshatMahajan画像処理における小さなプロジェクトです。私は既にOpenCV経由でアクセスしています。まだ私はinbuilt関数を使用せずにそれにする必要があります。 –
より良いアイデアを得るためには、より多くのコードを共有する必要があります。ユークリッド距離を使ってはいけないのですか? – Romain