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()));
|
}
|
}
|