2

隣接行列で表されるノードの非常に大きなネットワークがあります。ネットワーク内のノードの数を減らして、より重要なノードを含めたいと考えています。SVD がこれを達成するのに役立つことを認識しており、ILNumerics ライブラリを使用して隣接行列で svd() メソッドを実行しました。

ネットワークの次元を削減するのに出力がどのように役立つかを誰かが簡単に説明してくれませんか? SVD プロセスでは、対角線上に ~2 から多くの 0 の範囲の値が降順で、同じサイズの行列が残ります。重要でないと見なされるどのディメンションを削除する必要があるかを知るにはどうすればよいですか?

私はこのプロセスを全体的に間違っている可能性が高いので、どんな助けも大歓迎です! オンラインの説明の多くは、すぐに非常に混乱します。

4

1 に答える 1

1

私はILNumericsにあまり精通していないので、SVDが一般的にあなたの場合に何ができるかを説明してみます。まず第一に、ウィキペディアはSVDの可能なアプリケーションのいくつかの基本的な情報を提供します。あなたの場合、「範囲、零空間、ランク」と「低ランク行列近似」に関する部分が特に重要です。特異値分解は、実際の値を決定するのに役立ちますシステムマトリックスのランク。隣接グラフがスパースである場合、システム行列(たとえば、N×N行列)のランクMはNよりも小さい可能性があります。その場合、その低ランク近似を計算できます。つまり、結果に与える影響が非常に小さいため、N-M個の最小固有値を無視するM×M(M <N)を作成します。もちろん、このコンテキストでの小さな意味は、アプリケーションによって大きく異なります。

編集:サンプルデータでは、元の行列AはA = outUsvdOutoutVとして分解されています。対角行列svdOutは、Aの固有値特異値で構成されますが、outUとoutVの列/行は、それぞれAの左特異ベクトルと右特異ベクトルです。この例では、特異値は1.61803、1.41421、0.61803、および0(2回)です。したがって、元の行列のランクは、ゼロ以外の特異値の数(この例では3つ)によって与えられます。したがって、行列B = outU svdOut * outVを定義できます。ここで、アスタリスクは、最下位の特異値が削除されたことを示します。たとえば、最小の固有値を無視することを決定できます。

svdOut* =
| 1.61803  0        0  0  0 | 
| 0        1.41421  0  0  0 | 
| 0        0        0  0  0 |
| 0        0        0  0  0 |
| 0        0        0  0  0 |

ただし、もう一度考えてみると、隣接行列のSVDでは、探しているものが直接得られないと思います。重要なノードが実際にコンテキスト内で何であるかを何らかの方法で定義する必要があります。

Edit2(以下のコメントへの応答):SVDは、ノードに関する直接的な情報ではなく、マトリックスに関する情報を提供します。特異ベクトルは、元の行列を別の形式で表現するために使用できる正規直交基底を形成します。特異値は、これらの各ベクトルの影響がどれほど強いかについての情報を提供します。繰り返しになりますが、ウィキペディアは、これがどのように解釈されるかを理解するのに役立つかもしれません。元の質問に戻ると、単純なSVDは実際にはあなたが探しているものではないと思います。

于 2013-02-16T14:51:29.183 に答える