Что вы действительно хотите сделать, так это оценить значение y со значениями x1 , x2 , x3 , x4 и x5 дано.
Вы можете использовать что-то простое, как Линейная регрессия для прогнозирования значения y с другими заданными параметрами.
Теперь, как вы, наверное, догадались, уравнение для решения y будет выглядеть примерно так:
y = b0 + b1 * x1 + b2 * x2 + ...
где ваша цель будетчтобы предсказать набор коэффициентов, которые способны правильно предсказать y , учитывая x1..x5 .Такая оптимизация может быть сделана с помощью Stochastic Gradient Descent
Вот несколько простых кодов Python для достижения такого результата:
# Make a prediction with coefficients
def predict(row, coefficients):
yhat = coefficients[0]
for i in range(len(row)-1):
yhat += coefficients[i + 1] * row[i]
return yhat
# Estimate linear regression coefficients using stochastic gradient descent
def coefficients_sgd(train, l_rate, n_epoch):
coef = [0.0 for i in range(len(train[0]))]
for epoch in range(n_epoch):
sum_error = 0
for row in train:
yhat = predict(row, coef)
error = yhat - row[-1]
sum_error += error**2
coef[0] = coef[0] - l_rate * error
for i in range(len(row)-1):
coef[i + 1] = coef[i + 1] - l_rate * error * row[i]
print('>epoch=%d, lrate=%.3f, error=%.3f' % (epoch, l_rate, sum_error))
return coef
Длятестируя, давайте введем в функцию очень простые данные и посмотрим результаты.
# Calculate coefficients
dataset = [[1, 1], [2, 3], [4, 3], [3, 2], [5, 5]]
l_rate = 0.001
n_epoch = 50
coef = coefficients_sgd(dataset, l_rate, n_epoch)
print(coef)
Это вывод:
epoch = 45, lrate = 0.001, error = 2.650
эпоха = 46, скорость = 0,001, ошибка = 2,627
эпоха = 47, скорость = 0,001, ошибка = 2,607
эпоха = 48, скорость = 0,001, ошибка = 2,558
эпоха = 49, скорость = 0,001, ошибка = 2,573
[0,22998234937311363, 0,8017220304137576]