Сципи оптимизирует сведение к минимуму, используя фрейм данных - PullRequest
0 голосов
/ 26 февраля 2019

У меня есть фрейм данных с 3 столбцами: Y, X1, X2.Я хочу найти оценки параметров b1 и b2 путем минимизации суммы квадратов в соответствии с:

Objective function: minimize the sum of squares (Y - (b1*X1 + b2*X2))^2
Constraints: 0 < b1 < 2, 0 < b2 < 1
Initial guesses: b1=b2=0.5
Technique: Newton-Raphson

Я знаю, что могу использовать

scipy.optimize.minimize(fun, x0, args=(), method=None, jac=None, hess=None, hessp=None, bounds=None, constraints=(), tol=None, callback=None, options=None)

, но не понимаю, какчтобы передать столбцы из фрейма данных, так как все примеры, найденные мной при поиске, не используют столбцы из фрейма данных.

Я был бы очень признателен за любую помощь.

1 Ответ

0 голосов
/ 26 февраля 2019

Это может быть для вас отправной точкой.Пока возврат вашей целевой функции является скалярным, это не должно быть проблемой.Передайте фрейм данных через ключевые слова args в кортеже.Обратитесь к документации функции минимизации, чтобы узнать, какой метод вы хотите использовать.

РЕДАКТИРОВАТЬ: Я изменил код на основе описания в вашем комментарии.

import numpy as np
import scipy.optimize as opt
import pandas as pd

def main(df):
    x0 = [0.5,0.5]
    res = opt.minimize(fun=obj, x0=np.array(x0), args=(df), method="BFGS", bounds=[(0,2),(0,1)])
    return res

def obj(x, df):
    #maybe use a global variable to get the dataframe or via args
    sumSquares = np.mean((df["Y"] - (x[0]*df["X1"] + x[1]*df["X2"]))**2)
    return sumSquares

df = pd.DataFrame({"Y":np.random.rand(100),
                   "X1":np.random.rand(100),
                   "X2":np.random.rand(100)})
print(main(df))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...