Чтобы ваша регрессия наименьших квадратов имела смысл, вам нужно как минимум указать исходные параметры, которые имеют смысл.
Поскольку все параметры по умолчанию инициируются в значение 1, наибольшее влияние на исходныерегрессия будет резистором r1
, который добавляет константу к миксу.
Скорее всего, вы получите что-то вроде следующей конфигурации:
popt
Out[241]:
array([1.66581563e+03, 2.43663552e+02, 1.13019744e+00, 1.20233767e+00,
5.04984535e-04])
, которая выдаст аккуратныйсмотреть ровную линию, из-за m = something big + ~0 + ~0
;n=~0 - ~0
, поэтому y = r1
.
Однако, если вы инициализируете свои параметры несколько иначе,
popt, pcov = curve_fit(func, xdata.flatten(), ydata.flatten(), p0=[0.1,1e5,1000,1000,0.2],
bounds=((0, 0, 0, 0, 0), (np.inf, np.inf, np.inf, np.inf, np.inf)))
Вы получите более привлекательный вид,
popt
Out[244]:
array([1.14947146e+00, 4.12512324e+05, 1.36182466e+02, 8.29771756e+04,
1.77593448e+03])
((fitted-ydata.flatten())**2).mean()
Out[257]: 0.6099524982664816
#RMSE hence 0.78
Ps Мои данные начинаются со второй точки данных из-за ошибки преобразования с pd.read_clipboard
, когда первая строка стала заголовком вместо данных.Хотя не следует менять общую картину.