0

多重線形回帰で回帰係数を見つけようとしています。これには numpy モジュールを使用しています。依存値と独立値があります。試したことは以下のとおりです。

import numpy as np
y = [5.4,6.3,6.5,6.2,8.1,7.9,6.7,6.8,4.9,5.8]
X = [[0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0], [1.0, 1.0, 0.0, 1.0, 1.0, 1.0,   1.0, 1.0, 0.0, 1.0], [1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 1.0], [1.0, 1.0, 1.0, 0.0, 1.0, 1.0, 1.0, 1.0, 0.0, 0.0], [0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 1.0], [1.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0], [0.0, 0.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.0], [1.0, 1.0, 0.0, 0.0, 0.0, 1.0, 1.0, 1.0, 1.0, 0.0], [0.0, 0.0, 0.0, 1.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0], [0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0], [1.0, 0.0, 1.0, 1.0, 1.0, 1.0, 0.0, 1.0, 1.0, 0.0], [1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.0, 0.0, 1.0, 0.0], [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 1.0, 0.0, 1.0], [1.0, 1.0, 0.0, 0.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0], [0.0, 0.0, 1.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]]

b = y * X.T * np.linalg.inv(X*X.T)
print(b)

しかし、それは次のようなエラーを出しています

Traceback (most recent call last):
File "C:/Python27/proj/new5.py", line 14, in <module>
b = y * X.T * np.linalg.inv(X*X.T)
AttributeError: 'list' object has no attribute 'T'

これを行うのを手伝ってください。

4

2 に答える 2

1

配列はそのように初期化できません。

np.array を使用する必要があります

y = np.array([5.4,6.3,6.5,6.2,8.1,7.9,6.7,6.8,4.9,5.8])

T属性がそこにあります。

numpy 配列の場合、* を使用して乗算することはできません。coz * は要素単位の乗算用です。

y * XT のように行列で乗算する場合は、y.dot(XT) と記述します。

numpy での配列と行列の使用の違いについては、このページをお読みください。

http://www.scipy.org/NumPy_for_Matlab_Users#head-e9a492daa18afcd86e84e07cd2824a9b1b651935

================================================== ===

したがって、疑似逆行列を使用して最適な解を得ることができます。

X^T の svd が次の場合:

X^T = U*S*V^T ([compact svd][1])

それで:

b = V*S^-1*U^T*y

ここで、b と y は両方とも列ベクトルです。

それらを行ベクトルにしたい場合は、両側で転置してください。

于 2013-02-28T04:00:36.503 に答える
0

これを試して:

y = np.matrix([[1,2,3,4,3,4,5,4,5,5,4,5,4,5,4,5,6,5,4,5,4,3,4]])

x = np.matrix([
     [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],
     [4,2,3,4,5,4,5,6,7,4,8,9,8,8,6,6,5,5,5,5,5,5,5],
     [4,1,2,3,4,5,6,7,5,8,7,8,7,8,7,8,7,7,7,7,7,6,5],
     [4,1,2,5,6,7,8,9,7,8,7,8,7,7,7,7,7,7,6,6,4,4,4]
     ])

b = y * x.T * np.linalg.inv(x*x.T)

結果:

>>> b
matrix([[ 1.57044377, -0.0617812 ,  0.23596693,  0.24238522]])

上記をデータに適用しようとしましたが、特異行列エラーが発生します:

    raise LinAlgError, 'Singular matrix'
numpy.linalg.linalg.LinAlgError: Singular matrix

したがって、あなたのいくつかの変数Xは完全に相関しているようです。

于 2013-02-28T04:34:33.030 に答える