scipy.optimize.least_squares куда идут данные? - PullRequest
0 голосов
/ 01 октября 2018

Я пытаюсь запустить простую многовариантную регрессию в форме

Y = b_1 * X_1 + b_2 * X_2 + b_3 * X_3 + e

с ограничениями:

sum(beta) = 1
beta >= 0

У меня есть входные данные, как показано ниже

df = pd.DataFrame(np.random.randint(low=0, high=10, size=(100,4)), 
          columns=['Historic Rate', 'Overnight', '1M','3M'])

Y = df['Historic Rate']
X = df['Overnight','1M','3M]

Итак, я собираюсь использовать функцию scipy.optimize.least_squares примерно так:

scipy.optimize.least_squares(fun, bounds=(0,1),X)

где X = данные моей независимой переменной и с функцией, определенной как

Y - B1*X1 - B2*X2 - B3*X3

Я не уверен, куда поступают входные данные для оценки этого OLS?

1 Ответ

0 голосов
/ 02 октября 2018

Что такое бета в вашем вопросе?Предполагая, что бета должен быть вектором, содержащим b1, ..., b3, это просто ограниченная задача оптимизации, которая может быть легко решена с помощью scipy's minimal , например:

import pandas as pd
import numpy as np
from scipy.optimize import minimize

# Your Data
df = pd.DataFrame(np.random.randint(low=0, high=10, size=(100,4)), columns=['Historic Rate', 'Overnight', '1M','3M'])
Y = np.array(df['Historic Rate'])
X = np.array(df[['Overnight','1M','3M']])

# Define the Model
model = lambda b, X: b[0] * X[:,0] + b[1] * X[:,1] + b[2] * X[:,2]

# The objective Function to minimize (least-squares regression)
obj = lambda b, Y, X: np.sum(np.abs(Y-model(b, X))**2)

# Bounds: b[0], b[1], b[2] >= 0
bnds = [(0, None), (0, None), (0, None)]

# Constraint: b[0] + b[1] + b[2] - 1 = 0
cons = [{"type": "eq", "fun": lambda b: b[0]+b[1]+b[2] - 1}]

# Initial guess for b[1], b[2], b[3]:
xinit = np.array([0, 0, 1])

res = minimize(obj, args=(Y, X), x0=xinit, bounds=bnds, constraints=cons)
print(f"b1={res.x[0]}, b2={res.x[1]}, b3={res.x[2]}")
...