我有3个不同指标的得分,我合并为一个权重,我想使用scipy的优化来确定合并时权重的最佳系数(而不是平等对待它们并取平均值,这就是我以前做过)。下面的代码中显示的CV函数涉及实现交叉验证和计算反应的预测(其中反应仅“喜欢”或“不喜欢”)。
weight = A*(metric1) + B*(metric2) + C*(metric3)
prediction = CV(post, reaction, weight)
我希望最大化accuracy
,或最小化1 - accuracy
,accuracy = accuracy_score(reaction, prediction)
。我查看了scipy优化/最小化的文档,虽然我理解了一般的想法,但我不确定如何将我的想法转化为实际的代码。例如,一个混乱的领域是我想要最小化“1准确度”,但准确性由前一部分处理预测决定。任何帮助将不胜感激,一如既往,代码将是非常有用的:)
答案 0 :(得分:2)
您似乎想要执行以下伪代码中的操作:
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)
基本上,您正在最小化的损失函数应该采用您正在优化的参数(此处:权重)并返回一个标量衡量它们有多好(这里:减去准确度分数)。因此,确定依赖于参数的损耗所需的所有计算都应在损失函数内。如果计算的某些部分不依赖于权重,那么你当然可以通过在函数之外预先计算它来加速。