2011-12-16 3 views
2

bug (아마도 numpy 배포판에 있기 때문에) numpy.linalg.lstsq을 사용할 수 없습니다. 그리고 발견 한 모든 통계 라이브러리는 python 3 (Windows)에 설치되지 않았습니다.다 변수 선형 회귀에 대한 순수 파이썬 코드

다중 회귀 분석을 수행하는 순수 파이썬 3 코드가 있습니까 (베타가 필요합니다)?

순수한 파이썬이 아니라면, 코드가 내 컴퓨터의 numpy.linalg.lstsq과 충돌하는 동일한 C 함수를 사용하지 않는다면 여전히 시도해 볼 수 있습니다.

감사합니다.

+0

일부 웹 검색을했는데이 사람은 qr 분해 코드가 있습니다 : http://adorio-research.org/wordpress/?p=184. 이 코드가 작동하는 것 같습니까? 만약 그렇다면, 당신은 회귀를하는 것이 쉬워야한다. http://www.stat.wisc.edu/~larget/math496/qr.html과 같은 교과서를 따라 가면된다. – yosukesabai

답변

5

여기에 Ernesto P. Adorio의 matlib.py를 사용하는 버전이 있습니다. 그에서 당신은

from matlib import transpose, mattmat, vec2colmat, mat2vec, matdim, matprint 
from qr import qr 

def readdat(): 
    f = open('dat','r') 
    x, y = [], [] 
    f.next() 
    for line in f: 
     val = line.split() 
     y.append(float(val[1])) 
     x.append([float(p) for p in val[2:]]) 
    return x, y 


def bsub(r, z): 
    """ solves "R b = z", where r is triangular""" 
    m, n = matdim(r) 
    p, q = matdim(z) 
    b = [[0] * n] 
    pp, qq = matdim(b) 
    for j in range(n-1, -1, -1): 
     zz = z[0][j] - sum(r[j][k]*b[0][k] for k in range(j+1, n)) 
     b[0][j] = zz/r[j][j] 
    return b 

def linreg(y, x): 

    # prepend x with 1 
    for xx in x: 
     xx.insert(0, 1.0)  

    # QR decomposition 
    q, r = qr(x) 

    # z = Q^T y 
    z = mattmat(q, vec2colmat(y)) 

    # back substitute to find b in R b = z 
    b = bsub(r, transpose(z)) 
    b = b[0] 

    return b 


def tester(): 
    # read test data 
    x, y = readdat() 

    # calculate coeff 
    b = linreg(y, x) 

    for i,coef in enumerate(b): 
     print 'coef b%d: %f' % (i, coef) 

if __name__ == "__main__": 
    tester() 

여기에서 테스트 데이터를 툭

선형 회귀의 다음 다음 코드 찾기 COEFF와

필요 Multiple Regression in Data Mining을하는 외모 :

012 샘플 출력 3,516,
 
Case Y X1 X2 X3 X4 X5 X6 
    1 43 51 30 39 61 92 45 
    2 63 64 51 54 63 73 47 
    3 71 70 68 69 76 86 48 
    4 61 63 45 47 54 84 35 
    5 81 78 56 66 71 83 47 
    6 43 55 49 44 54 49 34 
    7 58 67 42 56 66 68 35 
    8 71 75 50 55 70 66 41 
    9 72 82 72 67 71 83 31 
10 67 61 45 47 62 80 41 
11 64 53 53 58 58 67 34 
12 67 60 47 39 59 74 41 
13 69 62 57 42 55 63 25 
14 68 83 83 45 59 77 35 
15 77 77 54 72 79 77 46 
16 81 90 50 72 60 54 36 
17 74 85 64 69 79 79 63 
18 65 60 65 75 55 80 60 
19 65 70 46 57 75 85 46 
20 50 58 68 54 64 78 52 

이 인쇄 위

 
Multiple R-squared 0.656 
Residual SS  738.900 
Std. Dev. Estimate 7.539 
     Coefficient StdError t-statistic p-value 
Constant  13.182 16.746  0.787 0.445 
     X1  0.583 0.232  2.513 0.026 
     X2  -0.044 0.167  -0.263 0.797 
     X3  0.329 0.219  1.501 0.157 
     X4  -0.057 0.317  -0.180 0.860 
     X5  0.112 0.196  0.570 0.578 
     X6  -0.197 0.247  -0.798 0.439 

코드 (주이 내 출력은 예입니다! 아니다). stdev 등을하기 위해 교과서를 뒤집기 위해 더 많이 필요합니다. 그러나 coeffs에 대해 예상되는 숫자를 얻었습니다.

 
python linreg.py 
coef b0: 13.182283 
coef b1: 0.583462 
coef b2: -0.043824 
coef b3: 0.328782 
coef b4: -0.057067 
coef b5: 0.111868 
coef b6: -0.197083 
+0

고마워요! 방금 2to3 도구를 사용하여 파이썬 3으로 변환했습니다. – max

+0

잘 듣는 것이 좋습니다. 크레딧은 순수 파이썬 구현을 작성한 사람에게 전달됩니다 (Ernesto). 사소한 삼각형의 뒤 대입을 쓰는 것조차 나를 위해 플래시와 같지 않았다. – yosukesabai

+0

다변량 선형 회귀가 아닌 다중 선형 회귀 사례입니까? 당신의 예제에서 y는 벡터가 아닌 스칼라입니다. 귀하의 출처는 또한 "다중 회귀"라고 말합니다. http://stackoverflow.com/questions/11479064/multivariate-linear-regression-in-python – PickleRick

관련 문제