2014-11-02 3 views
1

Я функция, которая вычисляет 2 значение R^для заданного набора х и у данных со степенью указания:Массив из 2-х значений R^

import numpy as np 

# Polynomial Regression 
    def polyfit(x,y,degree): 
    coeffs = np.polyfit(x, y, degree) 

# Polynomial Coefficients 
    results = coeffs.tolist() 
# r-squared 
    p = np.poly1d(coeffs) 
# fit values, and mean 
    yhat = p(x)       # or [p(z) for z in x] 
    ybar = np.sum(y)/len(y)   # or sum(y)/len(y) 
    ssreg = np.sum((yhat-ybar)**2) # or sum([ (yihat - ybar)**2 for yihat in yhat]) 
    sstot = np.sum((y - ybar)**2) # or sum([ (yi - ybar)**2 for yi in y]) 
    r2= ssreg/sstot 

    results=r2 

return results 

Я попробовал эту функцию для набора образцов данных:

x = np.arange(1,5) 
y = np.arange(1,5) 

print polyfit(x,y,1) 

>>1.0 

Пока все хорошо. Моя проблема заключается в том, что я хочу изменить степень (третий параметр для функции полифита) с помощью итерации. Я имею в виду использование

n=np.linspace(1,9,100) 

и для каждого значения п, можно получить значение г^2, то хранить его в массив.

r2= [] #array for each r^2 value for each value of n in linspace 

Может кто-нибудь помочь мне в этом? Я новичок в python, и мне все еще сложно делать итерации. Спасибо.

+0

Степень должна быть целочисленным значением - это степень полинома. 'numpy.linpace()' даст вам числа с плавающей запятой, которые не имеют большого смысла. Вместо этого я предлагаю использовать 'range()' или 'numpy.arange()'. –

ответ

0

массив для каждого 2 значения г^для каждого значения п в LINSPACE

Вы могли бы написать это как список понимания:

r2 = [polyfit(x, y, n) for n in np.linspace(1,9,100)] 

Преобразование в Numpy массива не трудно :

r2 = np.array(r2) 
Смежные вопросы