Как настроить начальное значение для curve_fit, чтобы найти наилучшую оптимизацию, а не только локальную оптимизацию?Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Как настроить начальное значение для curve_fit, чтобы найти наилучшую оптимизацию, а не только локальную оптимизацию?

Сообщение Anonymous »

Я пытаюсь приспособиться к функции мощности, и чтобы найти наилучший параметр. Тем не менее, я обнаружил, что если первоначальное предположение о параметре отличается, вывод «наилучший подход» отличается. Если я не найду правильного первоначального предположения, я могу получить наилучшую оптимизацию, вместо локальной оптимизации. Есть ли способ найти ** подходящее начальное предположение ** ????. Мой код указан ниже. Пожалуйста, не стесняйтесь, сделайте любой вклад. Спасибо! < /P>

import numpy as np
import pandas as pd
from scipy.optimize import curve_fit
import matplotlib.pyplot as plt
%matplotlib inline

# power law function
def func_powerlaw(x,a,b,c):
return a*(x**b)+c

test_X = [1.0,2,3,4,5,6,7,8,9,10]
test_Y =[3.0,1.5,1.2222222222222223,1.125,1.08,1.0555555555555556,1.0408163265306123,1.03125, 1.0246913580246915,1.02]

predict_Y = []
for x in test_X:
predict_Y.append(2*x**-2+1)
< /code>

, если я выровняюсь с исходным предположением по умолчанию, что p0 = [1,1,1] < /h1>

popt, pcov = curve_fit(func_powerlaw, test_X[1:], test_Y[1:], maxfev=2000)

plt.figure(figsize=(10, 5))
plt.plot(test_X, func_powerlaw(test_X, *popt),'r',linewidth=4, label='fit: a=%.4f, b=%.4f, c=%.4f' % tuple(popt))
plt.plot(test_X[1:], test_Y[1:], '--bo')
plt.plot(test_X[1:], predict_Y[1:], '-b')
plt.legend()
plt.show()
< /code>

подгонка похожа на ниже, что не является наилучшим образом подходит. />
popt, pcov = curve_fit(func_powerlaw, test_X[1:], test_Y[1:], p0=np.asarray([0.5,0.5,0.5]), maxfev=2000)
< /code>

Я могу получить наилучшее соответствие
< /p>

------------- 10.7.2018 ---------------------------------------------------------------------------------------------------------------------

Поскольку мне нужно запустить тысячи, чтобы даже Millions функции власти, используя @James Phillips, слишком дорого. Итак, какой метод уместен помимо curve_fit? такие как Sklearn, np.linalg.lstsq и т. д.

Подробнее здесь: https://stackoverflow.com/questions/523 ... zing-not-j
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»