Нормализуйте два массива со вторым массивом в качестве основы для нормализации первого массива

#python #arrays #optimization #normalization #pareto-optimality

Вопрос:

Чтобы найти показатели качества, такие как Расстояние между поколениями, Инвертированное расстояние между поколениями, индикатор Эпсилона и гипервольт для фронта Парето, я хочу нормализовать значения фронта аппроксимации, полученные при решении алгоритма на основе эталонного фронта, который, как я предполагаю, охватывает фронт аппроксимации.

 reference_front = np.array([[0.5, 2.0], [1, 1.0], [1.2, 0.833], [2.3, 0.435], [3, 0.333]]) approximation_front = np.array([[0.8, 2.5], [1.0, 2.0], [2.1, 0.952], [2.8, 0.714]]) reference_point = [max(approximation_front[:,0]),max(approximation_front[:,0])]  

Я использовал приведенный ниже код для нормализации. Тем не менее, это для одного массива за раз

 from sklearn.preprocessing import MinMaxScaler  min_max_scaler = MinMaxScaler() reference_front_norm = min_max_scaler.fit_transform(reference_front) approximation_front_norm = min_max_scaler.fit_transform(approximation_front) reference_point = [max(approximation_front[:,0]),max(approximation_front[:,0])]  

Здесь фронт аппроксимации и эталонный фронт нормализуются отдельно. Можем ли мы нормализовать приблизительный фронт от 0 до 1 на основе максимальных и минимальных значений опорного фронта.

Комментарии:

1. Было бы полезно, если бы вы более подробно описали желаемый и фактический результат. С фактическим выходом и желаемым выходом.

Ответ №1:

После нанесения fit_transform вы можете просто использовать transform . Это будет использовать «подгонку» из fit_transform вызова. В вашем случае

 reference_front_norm = min_max_scaler.fit_transform(reference_front) approximation_front_norm = min_max_scaler.transform(approximation_front)