-1

Python で MLPY API の PCAFast メソッドを使用しています ( http://mlpy.sourceforge.net/docs/3.2/dim_red.html )

このメソッドは、次のように生成された特徴マトリックスを学習すると、非常に高速に実行されます。

x = np.random.rand(100, 100)

このコマンドの出力例は次のとおりです。

[[ 0.5488135   0.71518937  0.60276338 ...,  0.02010755  0.82894003
   0.00469548]
 [ 0.67781654  0.27000797  0.73519402 ...,  0.25435648  0.05802916
   0.43441663]
 [ 0.31179588  0.69634349  0.37775184 ...,  0.86219152  0.97291949
   0.96083466]
 ..., 
 [ 0.89111234  0.26867428  0.84028499 ...,  0.5736796   0.73729114
   0.22519844]
 [ 0.26969792  0.73882539  0.80714479 ...,  0.94836806  0.88130699
   0.1419334 ]
 [ 0.88498232  0.19701397  0.56861333 ...,  0.75842952  0.02378743
   0.81357508]]

ただし、特徴行列 x が次のようなデータで構成されている場合:

x = 7.55302582e-05*np.ones((n, d[i]))

出力例:

[[  7.55302582e-05   7.55302582e-05   7.55302582e-05 ...,   7.55302582e-05
    7.55302582e-05   7.55302582e-05]
 [  7.55302582e-05   7.55302582e-05   7.55302582e-05 ...,   7.55302582e-05
    7.55302582e-05   7.55302582e-05]
 [  7.55302582e-05   7.55302582e-05   7.55302582e-05 ...,   7.55302582e-05
    7.55302582e-05   7.55302582e-05]
 ..., 
 [  7.55302582e-05   7.55302582e-05   7.55302582e-05 ...,   7.55302582e-05
    7.55302582e-05   7.55302582e-05]
 [  7.55302582e-05   7.55302582e-05   7.55302582e-05 ...,   7.55302582e-05
    7.55302582e-05   7.55302582e-05]
 [  7.55302582e-05   7.55302582e-05   7.55302582e-05 ...,   7.55302582e-05
    7.55302582e-05   7.55302582e-05]]

メソッドは非常に遅くなります...なぜこれが起こるのですか? これは、x 機能マトリックスに格納されているデータの種類と関係がありますか?

これを解決する方法についてのアイデアはありますか?

4

1 に答える 1

0

これは、主成分分析を実行するにはひどい (条件の悪い) 行列です。固有値はゼロ (それ自体が問題になる可能性があります) で、残りの固有値は 1 です (互いに行を減算して縮退行列を取得できます)。Python の固有値ソルバーの実装は、行列が合理的に規則的であることに依存している可能性があります (すべての固有値は明確であり、ゼロからも互いに十分に分離されています)。私はこの方法に精通していませんが、Fast Fixed Point のタイトルに基づいて、固有値を爆破するという乗算の性質に依存していると感じています。Ak λ k u k u k '適切な直交ベクトルuk、およびλ 1 > λ 2 > … > λ p > 0、十分に大きなべき乗nに対してA n λ 1 u 1 u 1 ' となります。この考えは、入力として 1 の配列をフィードする場合には単純に機能しません。他のものから分離しない 1 つの固有値を取得し続けるだけです。さらに悪いことに、フィードする特定の行列については、(7 · 10 -5 ) 20倍精度数として表現できる値に近づきます。最終的に、出力に完全ながらくたが含まれる可能性があります。計算上、はるかに安定して信頼できる、適切な計算線形代数法があります。いずれかの方法を実装するかどうかの決定は、開発者の判断によります。その高速な部分に加えて、メソッドがどれほど堅牢であるかについても考慮する必要があります。問題はありませんが、ほとんどの場合、迅速で汚い方法よりも安定した遅い方法を使用します。

于 2015-07-16T16:38:51.097 に答える