2016-07-01 5 views
3
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 

Оптимизация завершена успешно.
Текущее значение функции: 0.000000
Повторы: 29
Функциональные оценки: 58 ​​
г: [. -69]
Оптимизация успешно завершена.
Текущее значение функции: 0.000000
Повторы: 29
Функциональные оценки: 58 ​​
г: [. -70]
Оптимизация успешно завершена.
Текущее значение функции: 0.000000
Повторы: 29
Функциональные оценки: 58 ​​
г:
Почему я получаю неправильные результаты от scipy.optimize.fmin?

Почему я получаю г = -69, -70 и -71 [-71.]? Я должен получать r = 0.333, 0.555 и 0.999 с этими данными.

ответ

3

scipy.optimize.fmin передаст значение, которое оно пытается свести к минимуму в качестве первого аргумента функции. Если переписать функцию

def e(r,c,u,s): #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.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.] 
+0

ти; ; Я работала так тяжело на это! – Mateyobi

Смежные вопросы