2013-02-28 3 views
0

Я пытаюсь выяснить, коэффициент регрессии в множественной линейной regression.I'm с использованием Numpy модуля для this.I имеет зависимую и независимую values.what я попытался приведен нижекоэффициента регрессии с использованием 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' 

, пожалуйста, помогите мне сделать это.

+0

Что такое 'T'? Пожалуйста, объясни. – enginefree

ответ

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 * для умножения по элементам.

Если вы умножении матрицы, как у * X.T должна быть записана в виде y.dot (X.T)

Прочитайте эту страницу о разнице в использовании массива и матрицы в NumPy.

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

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

Таким образом, вы можете получить лучшее решение с использованием псевдо-инверсию:

если СВД Х^Т:

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

Тогда :

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

Здесь b и y оба столбца.

Если вы хотите, чтобы они были вектор-строк, тогда просто возьмите транспонирование с обеих сторон.

+0

@in Lin Я попробовал это, но его предоставление ValueError: операнды не могли транслироваться вместе с фигурами (10) (10,17) – naz

+0

Я пробовал следующий код: b = y.dot (XT) * np.linalg.inv (X .dot (XT)) На этот раз его выдача повышает LinAlgError, «Singular matrix» LinAlgError: Singular matrix – naz

+0

@naz http: // stackoverflow.com/questions/13368805/how-to-find-multivariable-regression-equation-in-javascript/13548846 # 13548846 –

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 отлично коррелированы.

+0

Я также получаю ту же ошибку – naz

Смежные вопросы