Мне даны данные, которые состоят из точек X и Y (x_1,...x_n; y1,...y_n)
.
Я хочу подогнать X к Y, используя две основные функции: max(x,mu_1)
и min(x,mu_2)
Другими словами, я хочу оценить следующее уравнение:
y_i = a_1*max(x_i,mu_1)+a_2*min(x_i,mu_2)
Я хочу найти mu_1
и mu_2
так, чтобы приведенное выше совпадение было наилучшим. Я имею в виду такие mu_1
и mu_2
, чтобы при подгонке Y к X сумма квадратов невязки была минимальной.
Или я мог бы сказать, что мне нужно a_1
, a_2
, mu_1
, mu_2
, чтобы сумма квадратов невязок для приведенного выше совпадения была минимальной.
Я пытался сделать следующее:
Я создал функцию из двух аргументов (mu_1 and mu_2)
, которая возвращает качество соответствия Y к X. Затем я попытался оптимизировать эту функцию, используя scipy.optimize.minimize
. Вот код:
import numpy as np
from scipy.optimize import minimize
from sklearn.linear_model import LinearRegression
###Create X and Y
X = np.random.normal(10,1,size = 10000)
Y = np.random.normal(20,1,size = 10000)
###Create function that estimates quality of fit
def func(mu_1,mu_2):
### basis functions
regressor_1 = np.maximum(X,mu_1).reshape(-1,1)
regressor_2 = np.minimum(X,mu_2).reshape(-1,1)
x_train = np.hstack((regressor_1,regressor_2))
model = LinearRegression().fit(x_train,Y)
###I didnt find how to extract sum of squared residual, but I can get R
squared, so I thought that minimizing SSR is the same as maximizing R
squared and it is the same as minimizing -R^2
objective = model.score(x_train,Y)
return -1*objective
### Now I want to find such mu_1 and mu_2 that minimize "func"
minimum = minimize(func,0,0)
minimum.x
Это не работает. Я буду очень признателен за любую помощь.