問題タブ [eigenvector]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
algorithm - 固有ベクトル中心性アルゴリズム/擬似コード
誰かが私を何らかの固有ベクトル中心性擬似コード、またはアルゴリズム(ソーシャルネットワーク分析用)の方向に向けることができるかどうか疑問に思いました。私はすでにウィキペディアとグーグルでいくつかの情報を探し回っていますが、一般化されたアルゴリズムや擬似コードの説明が見つかりません。
ありがとう!
python - 固有分解誤差の許容範囲
とても簡単な質問があります。これは、計算上の許容誤差に関連しています。
行列 A の固有ベクトル V と対角固有値 D の固有分解を行い (最後を参照)、乗算 V^-1*D*V で再度作成します。
得られた値は A には遠く及ばず、誤差はかなり大きいです。
このタスクを実行するために間違った関数を使用しているかどうか、または少なくともこのエラーを減らすにはどうすればよいかを知りたいです。前もって感謝します
python - SciPy-対称行列の特定の固有値の固有ベクトルを計算します
対称行列(無向グラフの隣接行列)があり、特定の固有値(最大固有値)があり、それに関連付けられた固有ベクトルが必要です(左または右、どちらか一方、左は単に転置であると信じているため)対称行列の権利)。
私が実行しているグラフは、数千から数十万のノードになる可能性があるため、対応する隣接行列は大きくなります。ただし、密度はスパースであるため、対応する行列もスパースになります。
SciPyでこれを行う効率的な方法はありますか?さらに良いことに、与えられた対称行列の先行固有値と対応する固有ベクトルのみを計算する方法があります(つまり、を使用して先行固有値を自分で明示的に計算する必要はありませんlinalg.eigvals
)。
networkx - NetworkXを使用して固有ベクトルの中心性を計算する
私はNetworkXライブラリを使用して、Web 2.0サイトの使用状況を表す中小規模の重み付けされていない、署名されていない有向グラフを操作しています(最小のグラフ:20ノード未満、最大:数千)。私が計算したいことの1つは、次のような固有ベクトルの中心性です。
ただし、これにより予期しない結果が得られます。アウトディグリーが0であるが、非常に中央のノードから内向きのアークを受信するノードは、リストの最後に0.0の固有ベクトル中心性で表示されます(数学者ではないため、これは混乱しているかもしれませんが、私はそうは思いません外向きの弧は、有向グラフに対するノードの中心性に何らかの違いをもたらすはずです)。これらの結果を調査する過程で、NetworkXがデフォルトで「正しい」固有ベクトルの中心性を計算することにドキュメントから気づきました。好奇心から、推奨される方法で「左」の固有ベクトルの中心性を計算することにしました。つまり、固有ベクトルの中心性を計算する前にグラフを逆にします(Networkxのドキュメントを参照)。)。驚いたことに、まったく同じ結果が得られました。すべてのノードは、以前とまったく同じ固有ベクトルの中心性を持つように計算されました。これは非常にありそうもない結果になるはずだと思いますが(ウィキペディアの記事を参照)、それ以来、私が使用しているすべてのグラフでそれを複製しました。誰かが私が間違っていることを私に説明できますか?
NB PageRankアルゴリズムのNetworkX実装を使用すると、期待した結果が得られます。つまり、非常に中央のノードから内向きのアークを受信するノードは、アウトディグリーが0であっても、高い中心性を持ちます。PageRankは通常、固有ベクトルの中心性の変形と見なされます(Wikipediaの記事を参照)。 )。
編集:Aricからのリクエストに続いて、いくつかのデータを含めました。これは私の最小のグラフの匿名バージョンです。(問題がグラフの構造に固有である場合、おもちゃのデータを投稿できませんでした。)以下のコードを私のマシン(Python 2.7を使用)で実行すると、(a)各ノードの左右の固有ベクトルの中心性が同じであり、(b)アウトディグリーが0のノードは、グラフ全体の中心にある場合でも、常に固有ベクトルの中心性が0になります(ノード61など)。
python - 最大の固有ベクトルと可能性のある Scipy の奇妙さ
これがパッケージのバグなのか、他の原因によるものなのかはわかりませんが、これで終わりです。
次のパッケージを使用して、類似度スコアの対称行列 (サイズが 10x10) で最大の固有値とそれに対応する固有ベクトルを見つけています。
、 そのようです:
今私が持っている質問は、(同じ行列、設定などを使用して) 数回実行すると、固有ベクトルの値が正の場合もあれば負の場合もあるということです (実行 3を参照)。
これがなぜなのか誰か知っていますか、それともバグですか?パターンはないようですが、各反復後に Python を閉じずにコードを実行した場合にのみ発生します (つまり、各実行後に F5 を押します)。
それは大きな問題ではありませんが、コードの不確実性は好きではありません ;-)
よろしくお願いします。
マーティン
r - Rで行列の正しい固有ベクトルを取得するには?
版 :私の質問の問題は、式 8S
からたが、この式にはエラーがあることでした。
R の行列の正しい固有ベクトルを直接取得する方法は? 'eigen()' は左固有ベクトルのみを与える
本当に最後の版、私はここで大きな混乱を犯しましたが、この質問は私にとって本当に重要です:
eigen()
関数のヘルプから、固有ベクトルの行列を提供します。
" 'r <- eigen(A)' および 'V <- r$vectors; lam <- r$values' の場合、
(数値ファズまで)、ここでLmbd =diag(lam)
"
つまりA V = V Lmbd
、ここで V は行列です。これを確認します。
R
右固有ベクトルの行列を見つけたいのですが
、左固有ベクトルの行列を定義する方程式L
は次のとおりです。
右固有ベクトルの行列を定義する方程式R
は次のとおりです。
そして eigen() は matrix のみを提供しますV
:
R
行列を取得したいと思います。LambdaM
実際の行列A
は負定値である可能性があります。
c++ - 多くの3D平面を交差させて最小二乗調整された単線を取得する
私は多くの 3D 平面で作業しており、以下のケースの最小二乗ソリューションを探しています。
1 つの点と法線ベクトル (O1 と N1 など) だけを知っている 3D 平面が多数あり、それらすべての平面が互いに交差し、ほぼ非常に近い 3D 線を作成する場合、最小二乗調整された線を計算する方法これらすべての交点を表す 1 本の 3D 線。
明確なアイデアを得るために、図を挿入しました。
- 既知: 1 つの点と各平面の法線ベクトル。
- 検索: 最小二乗法によるシングル ライン 3d
これをc++でやりたいので、c++タグも使います。
matlab - スペクトルクラスタリング
最初に、私はmatlab(およびこのサイト...)に不慣れであると言わなければならないので、私の無知を許してください。
スペクトルクラスタリングを使用してポイントのセットを2つのクラスターに分割する関数をMATLABで作成しようとしています。
私のコードは次のとおりです
正しく理解していれば、2番目に小さい固有ベクトルを使用して、データを2つのクラスターに分割できるはずです-2番目の固有ベクトルのi番目のメンバーが正の場合、i番目のデータポイントは1つのクラスターにあります。他のクラスターにあります。
しかし、私が次のことを試してみると
最初の4つのポイントが1つのクラスターを形成し、最後の4つのポイントが別のクラスターを形成すると予想されます。
しかし、私は受け取ります
2番目の固有ベクトルを取る
1つのクラスターにはポイント1,0;0,1;100,100; 101,100が含まれ、もう1つのクラスターはポイント1,1; 0,0;100,101;101,101から作成されていることがわかりました。
私は何が間違っているのだろうか。
注:私は宿題プロジェクトの一環として上記に取り組んでいます。
前もって感謝します!
numpy - scipy.linalg.eigは正しい左固有ベクトルを与えていますか?
scipy.linalg.eigが左右の固有ベクトルを計算する方法について質問があります。たぶん私はすべてを誤解しましたが、物事は私には正しくないようです...
最初から。固有値と両方の固有ベクトルを取得するために、次を使用しました。
ev, left_v, right_v = scipy.linalg.eig(A, left=True)
マニュアルによると、関数の呼び出し中に設定した後、i番目の列がi番目の固有値を参照するleft=True
列として左固有ベクトルを取得することを期待する必要があります。left_v
しかし、結果は私が期待したものではなかったので、私は簡単なチェックをしました。
関数を2回呼び出す左右の固有ベクトルを計算しました(詳細はこちらをご覧ください)。
ここで、の列は、のleft_v_2
対応する値に関連付けられた固有ベクトルleft_ev
です。right_ev_2
両方とも同じ固有値を与えることを強調する価値left_ev_2
がありますが、それらは異なる順序であり、説明する必要があります。
比較するleft_ev
とleft_ev_2
(固有値に関して並べ替えた後)、前者が後者の共役であり、したがってwithleft_ev
から取得されたものが有効な左固有ベクトルではないことがすぐにわかります。scipy.linalg.eig
left=True
固有ベクトルの有効性に関する別のチェックは、任意の実数の正方行列に対して、左右の固有ベクトルが双直交であるという事実に基づいて行うことができます。
left_v.T.dot(right_v)
対角行列を与える必要がありますが、次のように変更するまでは与えません:left_v.T.conj().dot(right_v)
、
その間:
left_v_2.T.dot(right_v_2)
予想される対角行列を与えます。
誰かが以前に同様の問題に遭遇したことがありますか?私の言うことは正しいですか?説明中にsciPyマニュアルは少し不正確eig
ですか?何かアドバイスはありますか?
どうもありがとう!
r - R の行列の固有値を計算する関数
eigen()
任意の行列の固有値と固有ベクトルを計算するような関数を書きたいです。固有値の計算のために次のコードを書きましたが、結果の線形方程式を解く関数またはメソッドが必要です。
det(x)=0
の値を見つけるには、多項式の線形方程式を解く必要がありますlambda
。何か方法はありますか?