scipy curve_fit对于gompertz模型提出了“ OptimizeWarning:无法估计参数的协方差”

问题描述 投票:0回答:1

我在gompertz模型的curve_fit函数中遇到以下错误。我正在尝试将gompertz曲线拟合到我拥有的数据中。我收到警告“无法估计参数的协方差”。显示的曲线不是很好的拟合。

RuntimeWarning-> exp遇到溢出OptimizeWarning->无法估计参数的协方差category = OptimizeWarning)


enter image description here

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import wget
import json
from pandas import json_normalize as jsonNor
import requests
import matplotlib.cm as cm
from matplotlib.colors import Normalize
from scipy.optimize import curve_fit
from sklearn.metrics import r2_score
import altair as alt



urls = [
    'https://raw.githubusercontent.com/omkarmarkad/COVID19-Pune/master/timeseries-case-counts.csv',
    'https://raw.githubusercontent.com/omkarmarkad/COVID19-Pune/master/age-wise.csv',
    'https://raw.githubusercontent.com/omkarmarkad/COVID19-Pune/master/timeseries-ward-wise.csv',
    'https://raw.githubusercontent.com/omkarmarkad/COVID19-Pune/master/daily-wardwise.csv'
]

[wget.download(url) for url in urls]


age_df = pd.read_csv('age-wise.csv')
daily_df = pd.read_csv('daily-wardwise.csv')
case_df = pd.read_csv('timeseries-case-counts.csv')
ward_df = pd.read_csv('timeseries-ward-wise.csv')

age_df['CFR'] = age_df['Deaths'] * 100 / (age_df['Male'] + age_df['Female'])


def gompertz_model(x,a=1,b=0,c=0):
    return c*np.exp(-b*np.exp(-x/a))


def fit_data_to_function(
    x, y, function, plot=True
):
    params, _ = curve_fit(function, x, y)
    plt.plot(x, y, ".", label="Observations")
    y_fit = function(x, *params)
    print(r2_score(y, y_fit))
    if plot:
        plt.plot(x, y_fit, label="Fitted curve")
        plt.legend()
        plt.show()
    return params




y = np.asarray(case_df['Total Deaths'])
x = np.arange(len(y))


params = fit_data_to_function( x, y, gompertz_model)

python scipy curve-fitting
1个回答
0
投票

您需要提供合理的参数初始猜测,例如:

params, _ = curve_fit(function, x, y, [1, 0, 0])

结果:

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.