оптимальные значения a, b, c, d, e на основе данных, переданных в функцию с известными значениями истинности основания - PullRequest
0 голосов
/ 24 октября 2018

У меня есть функция, которая принимает несколько параметров - a, b, c, d, e и возвращает вычисленное значение z.

У меня также есть значение истинности относительно земли z, и я хотел бы вычислить оптимальные параметры a, b, c, d, e, которые минимизировали бы ошибку между значением z истинности относительно земли и приближенным значениемг по функции.

У меня много данных для вычисленного значения z и истинного значения z при различных входных значениях a, b, c, d, e.

Любое предложение о том, как найти оптимальноепараметры a, b, c, d и e?Я думал о чем-то вроде градиентного спуска или оптимизации, но я не уверен, что делать дальше.

z1 = функция (a1 + b1 + c1 + d1 + e1) и error1 = z1 - z1 ', где z'1 - основная истина

z2 = функция (a2 + b2 + c2+ d2 + e2) и error2 = z2 - z2 ', где z2' - основная истина

... ... .... ... .... ... ... .... ... .... ... .... ..... .... .... .......................................................................

zn = function (an + bn + cn + dn + en) и errorn = zn - zn 'где zn' - основная истина

Большое спасибо за вашу помощь заранее.

Ясень

1 Ответ

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

Что вы действительно хотите сделать, так это оценить значение 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]

...