JAVA学习-练习试用Java实现“数据归一化:实现最大最小值归一化(Min-Max Scaling)和Z-Score标准化”

发布于:2025-07-12 ⋅ 阅读:(19) ⋅ 点赞:(0)

问题:

       java语言编辑,数据归一化:实现最大最小值归一化(Min-Max Scaling)和Z-Score标准化。

解答思路:

       在Java中实现最大最小值归一化(Min-Max Scaling)和Z-Score标准化通常涉及到数学计算。以下是一个简单的Java代码示例,展示如何实现这两种数据归一化方法。

public class DataNormalization {


    public static void main(String[] args) {

        double[][] data = {

            {1, 2, 3},

            {4, 5, 6},

            {7, 8, 9},

            {10, 11, 12}

        };


        System.out.println("Original Data:");

        printMatrix(data);


        // 最大最小值归一化

        double[][] normalizedMinMax = minMaxNormalization(data);

        System.out.println("Min-Max Normalized Data:");

        printMatrix(normalizedMinMax);


        // Z-Score标准化

        double[][] normalizedZScore = zScoreNormalization(data);

        System.out.println("Z-Score Normalized Data:");

        printMatrix(normalizedZScore);

    }


    private static double[][] minMaxNormalization(double[][] data) {

        double minVal = Double.MAX_VALUE;

        double maxVal = Double.MIN_VALUE;


        // 找到最小值和最大值

        for (double[] row : data) {

            for (double val : row) {

                if (val < minVal) minVal = val;

                if (val > maxVal) maxVal = val;

            }

        }


        double[][] normalizedData = new double[data.length][data[0].length];

        for (int i = 0; i < data.length; i++) {

            for (int j = 0; j < data[i].length; j++) {

                normalizedData[i][j] = (data[i][j] - minVal) / (maxVal - minVal);

            }

        }

        return normalizedData;

    }


    private static double[][] zScoreNormalization(double[][] data) {

        double mean = 0;

        double stdDev = 0;


        // 计算平均值和标准差

        for (double[] row : data) {

            for (double val : row) {

                mean += val;

            }

        }

        mean /= (data.length * data[0].length);


        for (double[] row : data) {

            for (double val : row) {

                stdDev += Math.pow(val - mean, 2);

            }

        }

        stdDev = Math.sqrt(stdDev / (data.length * data[0].length));


        double[][] normalizedData = new double[data.length][data[0].length];

        for (int i = 0; i < data.length; i++) {

            for (int j = 0; j < data[i].length; j++) {

                normalizedData[i][j] = (data[i][j] - mean) / stdDev;

            }

        }

        return normalizedData;

    }


    private static void printMatrix(double[][] matrix) {

        for (double[] row : matrix) {

            for (double val : row) {

                System.out.printf("%.4f ", val);

            }

            System.out.println();

        }

    }

}

       在这个代码中,我们定义了两个方法:'minMaxNormalization' 和 'zScoreNormalization'。'minMaxNormalization' 方法通过将每个值减去最小值然后除以最大值与最小值之差来进行归一化。'zScoreNormalization' 方法通过从每个值中减去平均值然后除以标准差来进行归一化。

       'printMatrix' 方法用于打印二维数组,方便我们查看归一化后的数据。

      需要注意,这个例子使用了静态的二维数组作为数据源。在实际应用中,可能需要从文件、数据库或其他数据源中读取数据。

(文章为作者在学习java过程中的一些个人体会总结和借鉴,如有不当、错误的地方,请各位大佬批评指正,定当努力改正,如有侵权请联系作者删帖。)


网站公告

今日签到

点亮在社区的每一天
去签到