Нормализовать два массива со вторым массивом в качестве основы для нормализации первого массива
Чтобы найти индикаторы качества, такие как расстояние между поколениями, инвертированное расстояние между поколениями, индикатор Эпсилон и HyperVolume для фронта Парето, я хочу нормализовать значения фронта аппроксимации, полученные при решении алгоритма на основе эталонного фронта, который, как я полагаю, включает фронт аппроксимации.
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 ответ
После нанесения вы можете просто использовать
transform
. Это будет использовать 'fit' из
fit_transform
вызов. В твоем случае
reference_front_norm = min_max_scaler.fit_transform(reference_front)
approximation_front_norm = min_max_scaler.transform(approximation_front)