13

私は行列の主成分分析に取り組んでいます。以下に示すコンポーネントマトリックスをすでに見つけました

A = np.array([[-0.73465832 -0.24819766 -0.32045055]
              [-0.3728976   0.58628043 -0.63433607]
              [-0.72617152  0.53812819 -0.22846634]
              [ 0.34042864 -0.08063226 -0.80064174]
              [ 0.8804307   0.17166265  0.04381426]
              [-0.66313032  0.54576874  0.37964986]
              [ 0.286712    0.68305196  0.21769803]
              [ 0.94651412  0.14986739 -0.06825887]
              [ 0.40699665  0.73202276 -0.08462949]])

このコンポーネント マトリックスでバリマックス回転を実行する必要がありますが、回転する正確な方法と角度が見つかりませんでした。ほとんどの例は R で示されています。ただし、Python でメソッドが必要です。

4

3 に答える 3

16

Python の例はたくさんあります。ウィキペディアnumpyでのみを使用して Python で見つけた例を次に示します。

def varimax(Phi, gamma = 1, q = 20, tol = 1e-6):
    from numpy import eye, asarray, dot, sum, diag
    from numpy.linalg import svd
    p,k = Phi.shape
    R = eye(k)
    d=0
    for i in xrange(q):
        d_old = d
        Lambda = dot(Phi, R)
        u,s,vh = svd(dot(Phi.T,asarray(Lambda)**3 - (gamma/p) * dot(Lambda, diag(diag(dot(Lambda.T,Lambda))))))
        R = dot(u,vh)
        d = sum(s)
        if d/d_old < tol: break
    return dot(Phi, R)
于 2013-07-13T09:05:03.163 に答える
7

ウィキペディアには python の例があります here !

例を持ち上げてnumpy用に調整します。

from numpy import eye, asarray, dot, sum, diag
from numpy.linalg import svd
def varimax(Phi, gamma = 1.0, q = 20, tol = 1e-6):
    p,k = Phi.shape
    R = eye(k)
    d=0
    for i in xrange(q):
        d_old = d
        Lambda = dot(Phi, R)
        u,s,vh = svd(dot(Phi.T,asarray(Lambda)**3 - (gamma/p) * dot(Lambda, diag(diag(dot(Lambda.T,Lambda))))))
        R = dot(u,vh)
        d = sum(s)
        if d_old!=0 and d/d_old < 1 + tol: break
    return dot(Phi, R)
于 2013-07-13T09:01:25.327 に答える
5

stack-overflow で python で因子分析を行うためのソリューションを何度も調べたので、最近、独自のパッケージfa-kitを作成しました。これは古い投稿ですが、将来誰かが Google 経由でここにアクセスする場合に備えて、このリンクを投げています。

于 2017-09-13T02:11:41.007 に答える