【问题标题】:SciPy optimize over vector indeterminateSciPy 优化向量不确定
【发布时间】:2021-09-26 22:59:48
【问题描述】:

我想定义一个函数如下:

def f(x,m):
    return np.exp(((x[i]-m).T)@((x[i]-m))

输入是已知数据集数组x,例如

x = np.array([[1,2],[3,4]])

还有一个未知的二维向量m

目前我无法正确定义此函数,因为我收到错误:

NameError: name 'm' is not defined

事实上,我不知道定义 m 的正确方法是什么。应该是这样的

m = []

也许?我知道与 mathematica 不同,我需要告诉 Python 一些关于 m 但我不清楚是什么

最重要的是,我有兴趣将x 的所有分量相加并最小化f(x,m) 的对数以找到f(x,m) 最小的m 的值。

【问题讨论】:

  • 函数f中的i是什么?
  • 所以数据集是一个numpy数组x。然后i 是行的索引。比如x[0]对应x的第一行,即x[0]=[1,2]
  • 对不起,我不够清楚。你想最小化单行的fi 是常数,还是所有行的总和?
  • 我确实希望最终将总和最小化。但这是问题的第二部分(如何在函数中实现数据集)。第一部分是如何在不确定的m 上获得一个我可以最小化的函数(不管x 是单个二维向量还是二维向量列表)。

标签: arrays numpy optimization scipy


【解决方案1】:

要最小化函数,您可以使用scipy.optimize.minimize 函数link

这可能有助于您了解如何使用此函数

import numpy as np
from scipy.optimize import minimize


def f(m, x, i):
    return np.exp(((x[i]-m).T)@((x[i]-m)))


x = np.array([[1,2],[3,4]])
i = 0

m = minimize(f, x0=(0,0), args=(x, i)).x

我改变了你的函数f的参数顺序。 minimize 期望第一个参数是“变量”参数,在这种情况下,mxi 在优化期间保持不变。

在调用minimize 函数时,x0m 的初始猜测值,这很重要,因为它告诉minimize 函数m 的形状。 args用于输入“常数”参数。

该函数返回一个OptimizeResult,现在x 属性是m 的最佳估计值。但是,OptimizeResult 包含一些更有用的优化信息。

【讨论】:

  • 如果有多个参数需要优化,如何实现?例如,如果我们将整体乘以事实a 并要求a>1(我知道这是微不足道的,但一旦我了解如何在f 的定义中调用它们,我就可以推广到适当的约束) .
猜你喜欢
  • 2021-05-09
  • 2020-08-25
  • 1970-01-01
  • 2018-07-30
  • 2021-04-05
  • 2022-01-11
  • 2011-03-06
  • 2017-03-11
  • 2014-09-05
相关资源
最近更新 更多