简体   繁体   English

为什么我从scipy.optimize.fmin得到错误的结果?

[英]Why am I getting incorrect results from scipy.optimize.fmin?

import pandas as pd
from scipy.optimize import fmin

data = pd.DataFrame({'DIV': [1,2,3]*3,
                     'MONTH': ['May','May','May','June','June','Jun','Jul','Jul','Jul'],
                     'C':[8]*9,
                     'U':[3,2,1]*3,
                     'S':[9]*9})

data.to_csv(r'C:\Users\mbabski\Documents\Unit Plan Summer 2016\data_test.csv')

def return_array(x):
    return x.values

def mape(c,u,s,r): #returns an array of line level Mean Absolute Percentage Errors
    p = c + u * r
    m = abs(1.0-(p/s))
    return m

def e(c,u,s,r): #calculates average of the MAPEs
    return np.mean(mape(c,u,s,r))

for d in range(1,4):
    div_data = data[data.DIV==d]
    c = return_array(div_data.C)
    u = return_array(div_data.U)
    s = return_array(div_data.S)
    r0 = [[1.0]]
    t = fmin(e,r0,args=(c,u,s))
    print 'r:',t

Optimization terminated successfully. 优化已成功终止。
Current function value: 0.000000 当前功能值:0.000000
Iterations: 29 迭代次数:29
Function evaluations: 58 功能评估:58
r: [-69.] r:[ - 69。]
Optimization terminated successfully. 优化已成功终止。
Current function value: 0.000000 当前功能值:0.000000
Iterations: 29 迭代次数:29
Function evaluations: 58 功能评估:58
r: [-70.] r:[ - 70。]
Optimization terminated successfully. 优化已成功终止。
Current function value: 0.000000 当前功能值:0.000000
Iterations: 29 迭代次数:29
Function evaluations: 58 功能评估:58
r: [-71.] r:[ - 71。]

Why am I getting r = -69, -70, and -71? 为什么我得到r = -69,-70和-71? I should be getting r = 0.333, 0.555, and 0.999 with this data. 我应该得到这个数据r = 0.333,0.55和0.999。

scipy.optimize.fmin will pass the value it is trying to minimize as the first argument to the function. scipy.optimize.fmin将传递它试图最小化的值作为函数的第一个参数。 If you rewrite your function as 如果你重写你的功能

def e(r,c,u,s): #calculates average of the MAPEs
    return np.mean(mape(c,u,s,r))

You get the correct results 你得到了正确的结果

for d in range(1,4):
    div_data = data[data.DIV==d]
    c = return_array(div_data.C)
    u = return_array(div_data.U)
    s = return_array(div_data.S)
    r0 = [[1.0]]
    t = fmin(e,r0,args=(c,u,s))
    print 'r:',t
 Optimization terminated successfully. Current function value: 0.000011 Iterations: 16 Function evaluations: 32 r: [ 0.33330078] Optimization terminated successfully. Current function value: 0.000000 Iterations: 15 Function evaluations: 30 r: [ 0.5] Optimization terminated successfully. Current function value: 0.000000 Iterations: 10 Function evaluations: 20 r: [ 1.] 

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM