2010-06-16 20 views
9

Tôi đang thực hiện hồi quy bình phương nhỏ nhất như dưới đây (univariate). Tôi muốn thể hiện ý nghĩa của kết quả về R^2. Numpy trả về một giá trị còn lại chưa được đánh số, điều gì sẽ là một cách hợp lý hóa việc này.Chuyển đổi giá trị còn lại của Numpy Lstsq thành R^2

field_clean,back_clean = rid_zeros(backscatter,field_data) 
num_vals = len(field_clean) 
x = field_clean[:,row:row+1] 
y = 10*log10(back_clean) 

A = hstack([x, ones((num_vals,1))]) 
soln = lstsq(A, y) 
m, c = soln [0] 
residues = soln [1] 

print residues 

Trả lời

17

Xem http://en.wikipedia.org/wiki/Coefficient_of_determination

giá trị R2 của bạn =

1 - residual/sum((y - y.mean())**2) 

tương đương với

1 - residual/(n * y.var()) 

Như một ví dụ:

import numpy as np 

# Make some data... 
n = 10 
x = np.arange(n) 
y = 3 * x + 5 + np.random.random(n) 

# Note that polyfit is an easier way to do this... 
# It would just be "model, resid = np.polyfit(x,y,1,full=True)[:2]" 
A = np.vstack((x, np.ones(n))).T 
model, resid = np.linalg.lstsq(A, y)[:2] 

r2 = 1 - resid/(y.size * y.var()) 
print r2 
+0

chúng ta có thể thực hiện thao tác này trong trường hợp 'scipy.linalg.lstsq'!? – diffracteD

+0

và ví dụ 'numpy' này bạn đã đưa ra cho dữ liệu 3D! không thể có được nó .. – diffracteD

Các vấn đề liên quan