java normalize

2024-08-21 10:36
文章标签 java normalize

本文主要是介绍java normalize,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

哈喽,各位小伙伴们,你们好呀,我是喵手。运营社区:C站/掘金/腾讯云/阿里云/华为云/51CTO;欢迎大家常来逛逛

  今天我要给大家分享一些自己日常学习到的一些知识点,并以文字的形式跟大家一起交流,互相学习,一个人虽可以走的更快,但一群人可以走的更远。

  我是一名后端开发爱好者,工作日常接触到最多的就是Java语言啦,所以我都尽量抽业余时间把自己所学到所会的,通过文章的形式进行输出,希望以这种方式帮助到更多的初学者或者想入门的小伙伴们,同时也能对自己的技术进行沉淀,加以复盘,查缺补漏。

小伙伴们在批阅的过程中,如果觉得文章不错,欢迎点赞、收藏、关注哦。三连即是对作者我写作道路上最好的鼓励与支持!

上期回顾

在上期文章中,我们深入探讨了如何在 Java 中使用流和 Collectors 工具类处理集合中的相同字段对象。通过分组、聚合和去重操作,我们展示了如何有效地处理数据集。本期文章将基于这些基础知识,进一步研究在 Java 中如何进行数据归一化 (Normalization)。

前言

在数据处理和机器学习中,归一化是一个非常重要的步骤。归一化(Normalization)通常指的是将数据按比例缩放到一定的范围内,常见的范围包括 [0,1] 和 [-1,1]。通过归一化,数据的不同量级可以被统一处理,这对于优化算法的性能和模型的训练效果至关重要。本文将详细介绍在 Java 中如何进行数据归一化,并通过具体的代码示例和案例分析,帮助你在实际项目中应用这些技术。

摘要

本文旨在探讨 Java 中数据归一化的技术。我们将介绍几种常见的归一化方法,包括 Min-Max 归一化和 Z-score 标准化,并通过代码示例展示这些方法的实现。本文还将分析不同方法的优缺点,并提供测试用例验证代码的正确性。最后,我们将讨论归一化在机器学习和数据处理中的使用场景。

正文

知识点源码分析

在数据处理领域,归一化是将不同量级的数据按比例缩放到一个相对一致的范围。常见的归一化方法包括:

  1. Min-Max 归一化: 将数据缩放到 [0,1] 的范围。
  2. Z-score 标准化: 使数据的均值为 0,标准差为 1。
Min-Max 归一化

Min-Max 归一化的公式如下:

[
X’ = \frac{X - X_{\text{min}}}{X_{\text{max}} - X_{\text{min}}}
]

其中,( X ) 是原始数据,( X_{\text{min}} ) 和 ( X_{\text{max}} ) 分别是数据集的最小值和最大值,( X’ ) 是归一化后的数据。

Z-score 标准化

Z-score 标准化的公式如下:

[
Z = \frac{X - \mu}{\sigma}
]

其中,( \mu ) 是数据的均值,( \sigma ) 是标准差,( Z ) 是标准化后的数据。

案例Demo

Min-Max 归一化的实现

以下是一个简单的 Java 代码示例,演示如何进行 Min-Max 归一化:

import java.util.Arrays;public class NormalizationExample {public static double[] minMaxNormalize(double[] data) {double min = Arrays.stream(data).min().orElseThrow(IllegalArgumentException::new);double max = Arrays.stream(data).max().orElseThrow(IllegalArgumentException::new);return Arrays.stream(data).map(x -> (x - min) / (max - min)).toArray();}public static void main(String[] args) {double[] data = {10, 20, 30, 40, 50};double[] normalizedData = minMaxNormalize(data);System.out.println("Normalized Data: " + Arrays.toString(normalizedData));}
}
Z-score 标准化的实现

同样地,我们可以实现 Z-score 标准化:

import java.util.Arrays;public class NormalizationExample {public static double[] zScoreNormalize(double[] data) {double mean = Arrays.stream(data).average().orElseThrow(IllegalArgumentException::new);double std = Math.sqrt(Arrays.stream(data).map(x -> Math.pow(x - mean, 2)).average().orElseThrow(IllegalArgumentException::new));return Arrays.stream(data).map(x -> (x - mean) / std).toArray();}public static void main(String[] args) {double[] data = {10, 20, 30, 40, 50};double[] normalizedData = zScoreNormalize(data);System.out.println("Z-score Normalized Data: " + Arrays.toString(normalizedData));}
}

相关内容拓展及延伸

在实际项目中,归一化处理不仅限于数值数据,还可以应用于文本数据的向量化表示。对于多维数据集,可以对每一维进行独立的归一化。此外,还可以根据具体需求对归一化进行自定义调整。例如,针对带有异常值的数据,可能需要对数据进行修正或使用鲁棒的标准化方法,如中位数绝对偏差 (MAD)。

优缺点对比

Min-Max 归一化
  • 优点: 简单直接,适用于数据范围已知且没有异常值的情况。
  • 缺点: 对异常值敏感,容易受到极值的影响。
Z-score 标准化
  • 优点: 适用于数据分布未知或有异常值的情况,较为稳健。
  • 缺点: 计算较复杂,依赖于数据的均值和标准差。

测试用例

为了验证归一化的实现,我们可以编写以下测试用例:

import org.junit.Assert;
import org.junit.Test;public class NormalizationTest {@Testpublic void testMinMaxNormalize() {double[] data = {10, 20, 30, 40, 50};double[] expected = {0.0, 0.25, 0.5, 0.75, 1.0};double[] normalizedData = NormalizationExample.minMaxNormalize(data);Assert.assertArrayEquals(expected, normalizedData, 0.0001);}@Testpublic void testZScoreNormalize() {double[] data = {10, 20, 30, 40, 50};double[] expected = {-1.4142, -0.7071, 0.0, 0.7071, 1.4142};double[] normalizedData = NormalizationExample.zScoreNormalize(data);Assert.assertArrayEquals(expected, normalizedData, 0.0001);}
}

代码解析

上述测试用例使用了 JUnit 进行测试,验证了 Min-Max 归一化和 Z-score 标准化的正确性。我们通过比较预期结果和实际结果,确保了归一化方法的准确性。

使用场景

数据归一化在以下场景中尤为重要:

  1. 机器学习: 在训练模型前,数据归一化有助于加快收敛速度和提高模型的精度。
  2. 数据可视化: 为了更好地展示数据,归一化可以避免不同量级数据的影响,使得图表更加直观。
  3. 数据处理: 在对数据进行聚类或降维时,归一化可以确保各个维度的影响力相等。

全文总结

在本文中,我们详细介绍了 Java 中数据归一化的几种常用方法,包括 Min-Max 归一化和 Z-score 标准化。通过代码示例和测试用例,我们展示了这些方法的实现和应用场景。数据归一化是数据处理中的一个重要步骤,正确的归一化可以显著提升后续数据分析和建模的效果。

下期内容预告

在下一期文章中,我们将继续探讨数据处理的高级主题,特别是如何在 Java 中进行特征选择和工程,以优化机器学习模型的性能。敬请期待!

… …

文末

好啦,以上就是我这期的全部内容,如果有任何疑问,欢迎下方留言哦,咱们下期见。

… …

学习不分先后,知识不分多少;事无巨细,当以虚心求教;三人行,必有我师焉!!!

wished for you successed !!!


⭐️若喜欢我,就请关注我叭。

⭐️若对您有用,就请点赞叭。

⭐️若有疑问,就请评论留言告诉我叭。

这篇关于java normalize的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1092917

相关文章

Spring Boot集成/输出/日志级别控制/持久化开发实践

《SpringBoot集成/输出/日志级别控制/持久化开发实践》SpringBoot默认集成Logback,支持灵活日志级别配置(INFO/DEBUG等),输出包含时间戳、级别、类名等信息,并可通过... 目录一、日志概述1.1、Spring Boot日志简介1.2、日志框架与默认配置1.3、日志的核心作用

破茧 JDBC:MyBatis 在 Spring Boot 中的轻量实践指南

《破茧JDBC:MyBatis在SpringBoot中的轻量实践指南》MyBatis是持久层框架,简化JDBC开发,通过接口+XML/注解实现数据访问,动态代理生成实现类,支持增删改查及参数... 目录一、什么是 MyBATis二、 MyBatis 入门2.1、创建项目2.2、配置数据库连接字符串2.3、入

Springboot项目启动失败提示找不到dao类的解决

《Springboot项目启动失败提示找不到dao类的解决》SpringBoot启动失败,因ProductServiceImpl未正确注入ProductDao,原因:Dao未注册为Bean,解决:在启... 目录错误描述原因解决方法总结***************************APPLICA编

深度解析Spring Security 中的 SecurityFilterChain核心功能

《深度解析SpringSecurity中的SecurityFilterChain核心功能》SecurityFilterChain通过组件化配置、类型安全路径匹配、多链协同三大特性,重构了Spri... 目录Spring Security 中的SecurityFilterChain深度解析一、Security

SpringBoot多环境配置数据读取方式

《SpringBoot多环境配置数据读取方式》SpringBoot通过环境隔离机制,支持properties/yaml/yml多格式配置,结合@Value、Environment和@Configura... 目录一、多环境配置的核心思路二、3种配置文件格式详解2.1 properties格式(传统格式)1.

Apache Ignite 与 Spring Boot 集成详细指南

《ApacheIgnite与SpringBoot集成详细指南》ApacheIgnite官方指南详解如何通过SpringBootStarter扩展实现自动配置,支持厚/轻客户端模式,简化Ign... 目录 一、背景:为什么需要这个集成? 二、两种集成方式(对应两种客户端模型) 三、方式一:自动配置 Thick

Spring WebClient从入门到精通

《SpringWebClient从入门到精通》本文详解SpringWebClient非阻塞响应式特性及优势,涵盖核心API、实战应用与性能优化,对比RestTemplate,为微服务通信提供高效解决... 目录一、WebClient 概述1.1 为什么选择 WebClient?1.2 WebClient 与

Java.lang.InterruptedException被中止异常的原因及解决方案

《Java.lang.InterruptedException被中止异常的原因及解决方案》Java.lang.InterruptedException是线程被中断时抛出的异常,用于协作停止执行,常见于... 目录报错问题报错原因解决方法Java.lang.InterruptedException 是 Jav

深入浅出SpringBoot WebSocket构建实时应用全面指南

《深入浅出SpringBootWebSocket构建实时应用全面指南》WebSocket是一种在单个TCP连接上进行全双工通信的协议,这篇文章主要为大家详细介绍了SpringBoot如何集成WebS... 目录前言为什么需要 WebSocketWebSocket 是什么Spring Boot 如何简化 We

java中pdf模版填充表单踩坑实战记录(itextPdf、openPdf、pdfbox)

《java中pdf模版填充表单踩坑实战记录(itextPdf、openPdf、pdfbox)》:本文主要介绍java中pdf模版填充表单踩坑的相关资料,OpenPDF、iText、PDFBox是三... 目录准备Pdf模版方法1:itextpdf7填充表单(1)加入依赖(2)代码(3)遇到的问题方法2:pd