После получения результатов pred_y_i
функции, веса которой вы хотите оптимизировать, вы вычисляете MSE:
MSE = (1/N) * sum_i=1..N (y_i - pred_y_i)^2
Теперь вы используете алгоритм оптимизации по вашему выбору. Они могут использовать или дериват (градиентный спуск, метод Ньютона), или не иметь дериватов (оптимизация роя частиц).
Для оптимизаций, требующих деривации, требуется частичная деривация функции затрат (MSE) по отношению к весам. И обновлять веса в соответствии с некоторым критерием обновления (SGD, ADAM, Adagrad и т. Д.)
UPDATE
Чтобы выяснить, какой из трех списков имеет лучший набор весов по отношению к MSE:
for i in range(popSize):
vector_new = findGStar(vector[i][0], vector[i][1], vector[i][2], vector[i][3])
vec.append(vector_new)
list_id = np.argmin(vec)
print('List {} contains the best parameter.'.format(list_id+1))
При сортировке только списка vec
вы теряете информацию о том, к какому списку относится каждая ошибка.
Когда мы впервые получаем вектор vec
, индексы ошибок в vec
соответствуют индексам list#
в списке vector
. Таким образом, мы можем просто выяснить, какой индекс содержит минимальную ошибку, и использовать этот индекс, чтобы получить list#
.