0

私は、多数のオブジェクトの間で計算した類似性行列を持っています。各オブジェクトは他のオブジェクトと非ゼロの類似性を持つことができます。私は別のタスクのためにこの行列を生成しましたが、今度は新しい分析のためにクラスター化したいと思います。Scikitのスペクトルクラスタリングで事前計算されたアフィニティマトリックスを使用しているときのKNN?

私はあらかじめ計算されたアフィニティマトリックスを渡すことができるので、scikit's spectral clusteringメソッドは良いフィット感があるようです。私はまた、スペクトルクラスタリングは、典型的には、アフィニティマトリックスを構築するときにいくつかの最も近い近傍を使用し、そして私の類似性マトリックスは同じ制約を持たないことも知っています。

アフィニティマトリックス内のノード間に任意の数のエッジを許すマトリックスを渡すと、各ノードは特定の数の最も近いネイバーだけを持つように制限されますか?もしそうでなければ、私はあらかじめ計算したアフィニティマトリックスにその変更を加えなければならないと思います。

答えて

1

スペクトルクラスタリングを行うためにアフィニティを計算する必要はありませんが、sklearnがそれを行います。

​​を呼び出すと、affinityパラメータを使用して、アフィニティマトリックスを計算するために使用するカーネルを選択できます。 rbfはデフォルトではカーネルのように見え、特定の数の最近傍を使用しません。ただし、別のカーネルを選択する場合は、n_neighboursパラメータでその番号を指定することができます。

次に、sc.fit_predict(your_matrix)を使用してクラスタを計算できます。

+0

しかし、私はすでにscikitの基準(類似点は正、対称、正方形)を満たしており、affinity = 'precomputed'オプションを使用しています。あなたは私の事前計算したアフィニティマトリックスに基づいて新しいアフィニティマトリックスを計算することを提案していますか? – neelshiv

+0

私はあなたの類似性行列を使いたいならば、あなた自身の類似性行列を計算することができると思います(類似行列もsuqare、positive、symmetricalです)。あなたの入力データが類似行列の場合、sklearnはあなたのために仕事をしましょう。それはアフィニティマトリックスを単独で計算します:) –

+0

ああ、私はつかまりました。私は事前計算されたアフィニティマトリックスを使用しています。これは、別のリソース集約的なプロセスの出力であるためです。私は、以前のプロセスがすでに入れている作業のうち、新しいものを構築できるかどうかを確認しようとしています。私が扱う親和性マトリックスは、それを作成するために使用された入力よりも大幅に小さくなっています。 – neelshiv

1

スペクトルクラスタリングには希薄化したマトリックスは必要ありません。

しかし、私が間違っていないとすれば、密度の高い行列ではなく、疎な行列の最小でないゼロの固有ベクトルを見つけるほうが高速です。最悪の場合はO(n^3)ですが、スペクトルクラスタリングは最も遅い方法の1つです。

+0

おかげで、ありがとう! – neelshiv

関連する問題