在数据分析和机器学习中,我们经常遇到这样的问题:

不同指标的量级差异很大,如何统一比较?
CPU 使用率(0-100%)和内存使用量(GB)如何放在一起分析?
如何将数据转换到统一尺度,便于算法处理?

数据归一化与标准化 (Data Normalization and Standardization) 是数据预处理的基础技术,通过将数据转换到统一尺度,消除量纲影响,便于不同指标的比较和分析。
本案例基于 Kotlin Multiplatform(KMP)与 OpenHarmony,实现了一个数据归一化与标准化分析器

  • 支持 Min-Max 归一化:将数据缩放到 [0, 1] 区间;
  • 支持 Z-Score 标准化:将数据转换为均值为 0、标准差为 1 的分布;
  • 提供原始数据统计(最小值、最大值、均值、标准差、范围);
  • 展示归一化和标准化两种方法的转换结果;
  • 通过 ArkTS 单页面展示原始序列、归一化结果、标准化结果和统计摘要,帮助你直观理解数据转换效果。

一、问题背景与典型场景

典型场景包括:

  1. 多指标统一比较
    将不同单位的指标(如 CPU%、内存 MB、网络 Mbps)归一化后统一比较,用于综合健康度评估。

  2. 机器学习特征预处理
    在训练模型前,将特征数据归一化或标准化,避免不同量级特征对模型的影响,提高训练效果。

  3. 异常检测
    使用 Z-Score 标准化后,可以基于标准正态分布识别异常值(通常 |Z| > 2 或 |Z| > 3 视为异常)。

  4. 数据可视化
    将不同量级的数据归一化后,可以在同一图表中展示,便于对比分析。

  5. 算法输入预处理
    许多算法(如 K-Means、神经网络)对输入数据的尺度敏感,需要先进行归一化或标准化。

相比直接使用原始数据,归一化和标准化的优势在于:

  • 消除量纲影响,便于不同指标的比较;
  • 提高算法收敛速度和稳定性;
  • 避免数值溢出问题;
  • 便于异常检测和统计分析。

二、Kotlin 归一化标准化引擎

1. 输入格式设计

本案例支持两种方法的配置:

method=minmax
series=10,20,30,40,50

或:

method=zscore
series=10,20,30,40,50

支持的方法:

  • minmaxnormalize:Min-Max 归一化
  • zscorestandardize:Z-Score 标准化
2. 核心算法实现

App.kt 中,我们实现了 dataNormalizationAnalyzer 函数:

@JsExport
fun dataNormalizationAnalyzer(inputData: String): String {
    // 1. 解析输入序列和方法
    val values = parseSeries(inputData)
    val method = parseMethod(inputData)
    
    // 2. 计算原始数据统计
    val min = values.minOrNull() ?: 0.0
    val max = values.maxOrNull() ?: 0.0
    val mean = values.average()
    val std = sqrt(variance(values, mean))
    
    // 3. Min-Max 归一化
    val range = max - min
    val normalized = if (range != 0.0) {
        values.map { (it - min) / range }
    } else {
        values.map { 0.5 } // 所有值相同,归一化为 0.5
    }
    
    // 4. Z-Score 标准化
    val standardized = if (std != 0.0) {
        values.map { (it - mean) / std }
    } else {
        values.map { 0.0 } // 所有值相同,标准化为 0
    }
    
    // 5. 根据选择的方法返回结果
    val result = when (method) {
        "minmax", "normalize" -> normalized
        "zscore", "standardize" -> standardized
        else -> normalized // 默认使用 minmax
    }
    
    // 6. 生成报告
    return buildReport(...)
}
3. 关键转换公式

Min-Max 归一化

  • 公式:normalized[i] = (value[i] - min) / (max - min)
  • 结果范围:[0, 1]
  • 特点:保持原始数据的相对关系,最小值映射为 0,最大值映射为 1
  • 适用场景:需要保持数据相对关系的场景,如特征缩放、数据可视化

Z-Score 标准化

  • 公式:standardized[i] = (value[i] - mean) / std
  • 结果分布:均值为 0,标准差为 1
  • 特点:将数据转换为标准正态分布,便于统计分析和异常检测
  • 适用场景:统计分析、异常检测、机器学习模型训练

三、OpenHarmony ArkTS 前端集成

1. 导入 Kotlin/JS 函数

index.ets 中导入:

import { dataNormalizationAnalyzer } from './hellokjs'
2. 状态变量定义
@State methodInput: string = "minmax"
@State seriesInput: string = "10,20,30,40,50"
@State result: string = ""
@State isLoading: boolean = false
3. 执行分析逻辑
executeDemo() {
  this.isLoading = true
  
  const methodLine = `method=${this.methodInput}`
  const seriesLine = this.seriesInput.includes('series=') 
    ? this.seriesInput 
    : `series=${this.seriesInput}`
  const payload = `${methodLine}\n${seriesLine}`
  
  setTimeout(() => {
    try {
      this.result = dataNormalizationAnalyzer(payload)
    } catch (e) {
      this.result = "❌ 执行失败: " + e.message
    }
    this.isLoading = false
  }, 100)
}
4. UI 布局设计
  • 顶部标题栏:使用渐变背景(紫色-蓝色主题),展示"数据归一化与标准化分析"标题
  • 输入区域
    • 方法选择输入框(method=minmax 或 method=zscore)
    • 序列输入框,支持 series=... 格式或直接输入数值序列
  • 执行按钮:运行分析按钮和重置按钮
  • 结果展示区:使用 Scroll 组件展示分析报告,包括原始数据统计、归一化结果、标准化结果和转换后统计

四、算法复杂度分析

  • 时间复杂度:O(n),其中 n 为序列长度。需要遍历序列一次计算统计量,再遍历一次进行转换。
  • 空间复杂度:O(n),需要存储原始序列、归一化结果和标准化结果。

五、工程化应用建议

  1. 特征预处理
    在机器学习模型训练前,对特征进行归一化或标准化,提高模型收敛速度和稳定性。

  2. 多指标融合
    将不同单位的指标归一化后,可以进行加权融合,用于综合健康度评估。

  3. 异常检测
    使用 Z-Score 标准化后,基于标准正态分布识别异常值(|Z| > 2 或 |Z| > 3)。

  4. 数据可视化
    将不同量级的数据归一化后,可以在同一图表中展示,便于对比分析。

  5. 算法输入预处理
    许多算法(如 K-Means、神经网络)对输入数据的尺度敏感,需要先进行归一化或标准化。

  6. 方法选择建议

    • Min-Max 归一化:适合需要保持数据相对关系的场景,如特征缩放、数据可视化
    • Z-Score 标准化:适合统计分析、异常检测、机器学习模型训练

六、方法对比

特性 Min-Max 归一化 Z-Score 标准化
结果范围 [0, 1] (-∞, +∞),但通常集中在 [-3, 3]
保持相对关系 ✅ 是 ❌ 否(改变分布)
受异常值影响 ⚠️ 较大 ✅ 较小
适用场景 特征缩放、可视化 统计分析、异常检测
计算复杂度 O(n) O(n)

七、总结

数据归一化与标准化是数据预处理的基础技术,通过将数据转换到统一尺度,消除量纲影响,便于不同指标的比较和分析。本案例展示了如何在 KMP + OpenHarmony 架构下实现一个轻量级的数据归一化与标准化分析器,适用于特征预处理、多指标融合、异常检测等场景。

核心优势

  • 支持两种常用方法:Min-Max 归一化和 Z-Score 标准化
  • 实现简单,计算高效
  • 结果直观,易于理解
  • 适用广泛,可用于多种场景

适用场景

  • 多指标统一比较
  • 机器学习特征预处理
  • 异常检测
  • 数据可视化
  • 算法输入预处理

通过本案例,你可以快速掌握数据归一化和标准化的核心思想,并在实际项目中灵活应用。

Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新

更多推荐