13693261870
2025-07-02 6708810c4de34dfb9513061432d656f91d56ee3a
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
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()));
    }
}