package com.ruoyi.buss.common; import java.util.Arrays; /** * 归一化算法工具类 * * @author yl * @date 2025-03-20 */ public class Normalization { // 最小 - 最大归一化 public static double[] minMaxNormalization(double[] data) { double min = Arrays.stream(data).min().getAsDouble(); double max = Arrays.stream(data).max().getAsDouble(); double[] normalized = new double[data.length]; for (int i = 0; i < data.length; i++) { normalized[i] = (data[i] - min) / (max - min); } return normalized; } // Z - 分数归一化 public static double[] zScoreNormalization(double[] data) { double mean = Arrays.stream(data).average().getAsDouble(); double sumSquaredDiff = Arrays.stream(data).map(x -> Math.pow(x - mean, 2)).sum(); double stdDev = Math.sqrt(sumSquaredDiff / data.length); double[] normalized = new double[data.length]; for (int i = 0; i < data.length; i++) { normalized[i] = (data[i] - mean) / stdDev; } return normalized; } public static void main(String[] args) { double[] data = {12, 4, 0.9, 0.3}; // 最小 - 最大归一化 double[] minMaxNormalized = minMaxNormalization(data); System.out.println("最小 - 最大归一化结果: " + Arrays.toString(minMaxNormalized)); System.out.println("加权求和:" + Arrays.stream(minMaxNormalized).sum()); // Z - 分数归一化 double[] zScoreNormalized = zScoreNormalization(data); System.out.println("Z - 分数归一化结果: " + Arrays.toString(zScoreNormalized)); System.out.println("Z - 分数加权求和:" + Math.round(Arrays.stream(zScoreNormalized).sum())); } }