如何使用 scipy 优化自己的功能?
How to use scipy optimize with your own function?
我将 3 个不同指标的分数组合成一个权重,我想使用 scipy 的优化来确定组合时权重的最佳系数(而不是平等对待它们并取平均值,这是我之前所做的)。下面代码中显示的 CV 函数处理实现交叉验证和计算反应的预测(其中反应仅为 "like" 或 "dislike")。
weight = A*(metric1) + B*(metric2) + C*(metric3)
prediction = CV(post, reaction, weight)
我想最大化我的 accuracy
,或最小化 1 - accuracy
,其中 accuracy = accuracy_score(reaction, prediction)
。我查看了 scipy 的 optimize/minimize 的文档,虽然我了解总体思路,但我不确定如何将我的想法转化为实际代码。例如,一个令人困惑的领域是我想最小化“1-accuracy”,但准确度是由前面处理预测的部分决定的。任何帮助将不胜感激,并且一如既往,代码将非常有用 :)
您似乎想要执行以下伪代码中的操作:
def loss(x, *args):
A, B, C = x
weight = A*metric1 + B*metric2 + C*metric3
prediction = CV(post, reaction, weight)
return -accuracy_score(reaction, prediction)
# equal initial weighting
x0 = [1, 1, 1]
scipy.optimize.minimize(loss, x0, args=args)
基本上,您正在最小化的损失函数应该采用您正在优化的参数(此处:权重)并返回衡量它们有多好的标量(此处:减去准确度分数)。因此,确定取决于参数的损失所需的所有计算都应该在损失函数内。如果计算的某些部分不依赖于权重,您当然可以通过在函数外预先计算来加快速度。
我将 3 个不同指标的分数组合成一个权重,我想使用 scipy 的优化来确定组合时权重的最佳系数(而不是平等对待它们并取平均值,这是我之前所做的)。下面代码中显示的 CV 函数处理实现交叉验证和计算反应的预测(其中反应仅为 "like" 或 "dislike")。
weight = A*(metric1) + B*(metric2) + C*(metric3)
prediction = CV(post, reaction, weight)
我想最大化我的 accuracy
,或最小化 1 - accuracy
,其中 accuracy = accuracy_score(reaction, prediction)
。我查看了 scipy 的 optimize/minimize 的文档,虽然我了解总体思路,但我不确定如何将我的想法转化为实际代码。例如,一个令人困惑的领域是我想最小化“1-accuracy”,但准确度是由前面处理预测的部分决定的。任何帮助将不胜感激,并且一如既往,代码将非常有用 :)
您似乎想要执行以下伪代码中的操作:
def loss(x, *args):
A, B, C = x
weight = A*metric1 + B*metric2 + C*metric3
prediction = CV(post, reaction, weight)
return -accuracy_score(reaction, prediction)
# equal initial weighting
x0 = [1, 1, 1]
scipy.optimize.minimize(loss, x0, args=args)
基本上,您正在最小化的损失函数应该采用您正在优化的参数(此处:权重)并返回衡量它们有多好的标量(此处:减去准确度分数)。因此,确定取决于参数的损失所需的所有计算都应该在损失函数内。如果计算的某些部分不依赖于权重,您当然可以通过在函数外预先计算来加快速度。