代码之家  ›  专栏  ›  技术社区  ›  George

使用lmfit Model-函数有数据帧作为参数

  •  0
  • George  · 技术社区  · 4 年前

    我想使用lmfit来拟合我的数据。

    我使用的函数只有一个参数 features .内容 特征 将不同(列和值),因此我无法初始化参数。

    我试图创建一个数据帧 here ,但我不能用 guess 方法,因为这是为了 LorentzianModel 我只是想用 Model .

    import pandas as pd
    import numpy as np
    import matplotlib.pyplot as plt
    import lmfit
    from sklearn.linear_model import LinearRegression
    
    
    df = {'a': [0, 0.2, 0.3], 'b':[14, 10, 9], 'target':[100, 200, 300]}
    df = pd.DataFrame(df)
    
    X = df[['a', 'b']]
    y = df[['target']]
    
    model = LinearRegression().fit(X, y)
    
    features = pd.DataFrame({"a": np.array([0, 0.11, 0.36]),
                             "b": np.array([10, 14, 8])})
    
    def eval_custom(features):
        res = model.predict(features)
        return res
    
    
    x_val = features[["a"]].values
    
    def calling_func(features, x_val):
        pred_custom = eval_custom(features)
        df = pd.DataFrame({'x': np.squeeze(x_val), 'y': np.squeeze(pred_custom)})
    
        themodel = lmfit.Model(eval_custom)
        params = themodel.guess(df['y'], x=df['x'])
        result = themodel.fit(df['y'], params, x = df['x'])
           
        result.plot_fit()
    
    
    calling_func(features, x_val)
    
    0 回复  |  直到 4 年前
        1
  •  0
  •   M Newville    4 年前

    模型函数需要将自变量和单个模型参数作为参数。您将所有这些打包到一个pandas数据帧中,然后发送。不要那样做。

    如果需要从模型的当前值创建数据帧,请在模型函数中执行。

    此外:通用模型函数没有工作 guess 功能。使用 model.make_params() 当然,绝对(没有例外,永远不会)为每个参数提供实际的初始值。