Это правильный способ подгонки данных, сгенерированных из гауссовых распределений в Python? - PullRequest
0 голосов
/ 14 ноября 2018

Я пытаюсь написать программу на Python для генерации данных, использующих сумму случайной величины (которая имеет распределение Гаусса) и полиномиальное уравнение 4-й степени (3x ^ 4 + x ^ 3 + 3x ^ 2 + 4x+5).Используя полиномиальное соответствие наименьших квадратов, изгибайте сгенерированные данные с помощью модели, пока ваша модель не сможет точно предсказать все значения.Я новичок в Python и действительно пытаюсь догнать мой быстро развивающийся класс.Любая помощь и дальнейшие объяснения будут оценены.Я попробовал это без цикла for, и он дал две кривые, но я думал, что это должно соответствовать начальным точкам.Пожалуйста, смотрите код ниже:

import random
import matplotlib.pyplot as plt
import numpy as np

def rSquared(obs, predicted):
    error = ((predicted - obs)**2).sum()
    mean = error/len(obs)
    return 1 - (mean/np.var(obs))

def generateData(a, b, c, d, e, xvals):
    for x in xvals:
        calcVal= a*x**4 + b*x**3 + c*x**2 + d*x + e
        yvals.append(calcVal+ random.gauss(0, 35))
xvals = np.arange(-10, 11, 1)
yvals= []
a, b, c, d, e = 3, 1, 3, 4, 5
generateData(a, b, c, d, e, xvals)
for i in range (5):
    model= np.polyfit(xvals, yvals, i)
    estYvals = np.polyval(model, xvals) 
print('R-Squared:', rSquared(yvals, estYvals))
plt.plot(xvals, yvals, 'r', label = 'Actual values') 

plt.plot(xvals, estYvals, 'bo', label = 'Predicted values')
plt.xlabel('Variable x values')
plt.ylabel('Calculated Value of Polynomial')
plt.legend()
plt.show()

результат этого запуска программы в этом образе myplot1 без цикла for, это то, что я получаю myPlot2

...