优化整个数据集的乘法因子以最大化重叠

时间:2019-10-06 21:21:50

标签: python pandas scipy mathematical-optimization

我有6个与此类似的数据集(不是我的实际数据): "Raw" data - sorry, not enough rep to post images...

对于每个数据集(i)我正在尝试绘制y_i/a_ia_i*x_i的关系图,以使我拥有类似于此图的内容(请注意压缩和重叠的外观): Shifted data 编辑:如果不清楚,y_i/a_ia_i*x_i是我无法更改的地方。

我想优化向量a,以便最大化数据集之间的重叠。

This post引导我走上了使用scipy.spatial.distance.cdist的方法,以最小化点之间的距离,从而使重叠最大化。我认为pdist对于所有数据集的重叠都更好,然后尝试使用scipy.optimize.minimize为a设置值。 每当我尝试设置界限时,我都会得到b'ABNORMAL_TERMINATION_IN_LNSRCH,似乎是来自gradient error的界限,但这开始让我感到头疼。

下面的代码是关于我所提出的内容,已尽我所能进行了清理。

def data_shift(x0, a, df):
    """
    x0: our initial guess of values for a_i
    a: a DataFrame with two columns: Dataset, a_i 
    df: a DataFrame with 3 columns: Dataset, x, and y
    """

    #overwrite old values of a[a_i]
    a['a_i']=x0

    # match each data set with it's shifting variable
    # and combine into one DataFrame
    dfs=df.merge(a, on='Dataset')

    # create new columns of shifted data based on a
    dfs['ax'] = dfs['x']*dfs['a_i']
    dfs['ya'] = dfs['y']/dfs['a_i']

    return np.mean(pdist(dfs.loc[:, ['ax', 'ya']]))

# set bounds for values of a_i
# a_i must be >0, but generally it is <5 too
b=(0,5)
bnds=(b,b,b,b,b,b)  #one b for each a_i

sol = minimize(data_shift, x0=[1,1,1,1,1,1], args=(a, df), bounds=bnds)
sol

现在它只是给我这个:

      fun: nan
 hess_inv: <6x6 LbfgsInvHessProduct with dtype=float64>
      jac: array([33751.64233148, 66479.62145507, 75388.05366494, 48267.75984839,
       15358.34744573, 39810.20417996])
  message: b'ABNORMAL_TERMINATION_IN_LNSRCH'
     nfev: 147
      nit: 0
   status: 2
  success: False
        x: array([1., 1., 1., 1., 1., 1.])

欢迎所有建议和替代方案,因为此时我有点不知所措。 谢谢!

0 个答案:

没有答案