クラスタリングアルゴリズムをテストする最良の方法は何ですか?私は停止基準を持つ凝集クラスタリングアルゴリズムを使用しています。クラスターが正しく形成されているかどうかをテストするにはどうすればよいですか?クラスタリングアルゴリズムをテストする最良の方法
答えて
これは、に依存しています。あなたがテストしたいものはです。
既知のアルゴリズムの独自の実装をテストするときは、結果を既知の優れた実装のものと比較するとよいでしょう。
階層的クラスタリングは、階層的であるため、品質に関してテストするのが難しいです。ランド指標などの一般的な数値は、厳密な区分にのみ有効です。階層的なクラスタリングから厳密なパーティショニングを得ることができますが、次にカットする高さを固定する必要があります。
事前にクラスタ化されたデータ(supervised learning)があり、そのクラスタリングアルゴリズムの結果をテストするのが理想的です。正確な分類の数を実行された分類の総数で割った数を数えて、正確な得点を得るだけです。
unsupervised learningを実行している場合、実際にアルゴリズムを評価する方法はありません。
グラフをどれくらいクラスター化できるか(粗粒度レベルで評価する)の良い経験則は、「固有値ギャップ」と関係がある。重み付けされたグラフA
が与えられると、固有値を計算し、それらをソートする(これは固有値スペクトルである)。プロットすると、ある点でスペクトルに大きなジャンプがある場合、グラフを分割する自然な対応するブロックがあります。
以下は、ほぼブロック対角行列で与えられたブロック数の固有値スペクトル(コード内でc
によってパラメータ化されている)に大きなギャップがある場合の例(numpy python)です。 、
from numpy import *
import pylab as plt
# Make a block diagonal matrix
N = 30
c = 5
A = zeros((N*c,N*c))
for m in xrange(c):
A[m*N:(m+1)*N, m*N:(m+1)*N] = random.random((N,N))
# Add some noise
A += random.random(A.shape) * 0.1
# Make symmetric
A += A.T - diag(A.diagonal())
# Show the original matrix
plt.subplot(131)
plt.imshow(A.copy(), interpolation='nearest')
# Permute the matrix for effect
idx = random.permutation(N*c)
A = A[idx,:][:,idx]
# Compute eigenvalues
L = linalg.eigvalsh(A)
# Show the results
plt.subplot(132)
plt.imshow(A, interpolation='nearest')
plt.subplot(133)
plt.plot(sorted(L,reverse=True))
plt.plot([c-.5,c-.5],[0,max(L)],'r--')
plt.ylim(0,max(L))
plt.xlim(0,20)
plt.show()
知られており、おそらく明らかがある場合、入力データを構築することが、時には有用である:(あなたのグラフノードを標識と同一)マトリックス順列は依然として同じスペクトルギャップを与えることに注意してください建設による回答。クラスタリングアルゴリズムでは、同じクラスター内の任意の2点間の最大距離が、異なるクラスター内の任意の2点間の最小距離よりも小さくなるように、Nクラスターでデータを構築することができます。もう1つの選択肢は、目に見えやすいクラスタを持つ2次元散布図としてプロット可能な多数の異なるデータセットを生成し、アルゴリズムの結果をこの構造と比較し、おそらくクラスタをまとめて移動させて、それら。
特定のクラスタリングアルゴリズムに関する知識があれば、よりうまくいくかもしれませんが、上記の方法では、明らかに明らかなバグを隠す可能性があります。
- 1. DbContextを使用するリポジトリをテストする最良の方法
- 2. HTML5ウェブサイトをテストする最良の方法は何ですか?
- 3. javascriptをテストする最良の方法は何ですか?
- 4. MVCリポジトリをテストする最良の方法は何ですか?
- 5. Atom Serverをテストする最良の方法は何ですか?
- 6. RedirectToActionをテストする最良の方法は何ですか?
- 7. データウェアハウスのパフォーマンスをテストする最良の方法は?
- 8. Silverlightアプリケーションの変更をテストする最良の方法
- 9. APIのユーザー認証をテストする最良の方法は?
- 10. 冗談での約束をテストする最良の方法
- 11. データベース/接続をテストする最良の方法
- 12. H2データベースでJPAをテストする最良の方法は?
- 13. REST XML APIをテストする最良の方法は?
- 14. Webサービスを消費してテストする最良の方法
- 15. データベース内の重複するキーをテストする最良の方法
- 16. 最良の方法
- 17. 展開する前にドッカーでテストを実行する最良の方法は
- 18. tdd/bddのレールでモンゴイドモデルをテストする最良の方法は何ですか?
- 19. Rails 5のアプリケーションコントローラレスキューステータスコードをテストする最良の方法は何ですか?
- 20. Dartの単体テストを作成する最良の方法は何ですか?
- 21. プライベートなステートレスコンポーネントの機能をテストする最良の方法は何ですか?
- 22. iPhoneとiPadのビューポートとスケーリングをテストするための最良の方法
- 23. GWTウィジェットのビューの実装をテストする最良の方法は
- 24. Internet Explorer(IE)の古いバージョンでjavascriptのブックマークレットをテストする最良の方法
- 25. rSpecでdelayed_jobチェーンをテストする最良の方法は何ですか?
- 26. DLL機能をテストする最良の方法は何ですか?
- 27. ラムダAPIをセットアップしてテストする最良の方法は何ですか?
- 28. LabでHapiJSプラグインをテストする最良の方法は何ですか?
- 29. RubyでアプリケーションAPIライブラリをテストする最良の方法は何ですか?
- 30. Silverlight 5クラスライブラリをテストする最良の方法は何ですか?
あなたはクラスター分析ではなく**分類**について話していることを除いて。 –
いいえ、クラスタリングについて話すとき、tskuzzyは正しい - 同じクラスのポイントが同じ共通クラスタにあるかどうかを確認します。 – Marek