You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何检验含x、y、z坐标的3D数据集是否符合正态分布?

3D坐标数据集正态分布检验方案

首先明确:RobustScaler 本身基于中位数和四分位距做缩放,对异常值鲁棒,它的使用前提不要求数据服从正态分布,如果是你后续的建模算法需要正态分布假设,再做对应检验即可。

一、可视化检验方法(优先参考,直观易判断)

  • 直方图+密度曲线:分别对x、y、z三个特征绘图,看曲线形状是否接近对称钟形
  • Q-Q图(分位数图):如果样本点基本落在45度参考直线上,就可以认为符合正态分布
  • 箱线图:看数据分布的对称性,正态分布的箱线图中位数基本在箱体中间,上下须长度接近

二、统计检验方法

你的样本量超过15000属于大样本,常规的Shapiro-Wilk检验仅支持5000样本以下的数据集,建议使用以下两种方法:

  • 安德森-达令检验(Anderson-Darling Test):相比Kolmogorov-Smirnov检验对正态分布的适配性更好,输出的不同显著性水平下的临界值可以直接对比判断
  • 偏度/峰度检验:正态分布的偏度为0(完全对称),超额峰度为0,如果你三个特征的偏度绝对值<2,峰度在2~4之间,基本可以认为近似正态分布

注意:大样本下统计检验会非常灵敏,微小的分布偏差都会导致检验拒绝正态分布假设,这种时候优先以可视化结果为准,只要偏差不大、不影响后续使用就可以忽略。

附Python实现示例代码

import numpy as np
import pandas as pd
import scipy.stats as stats
import matplotlib.pyplot as plt
import seaborn as sns

# 假设你的数据存储在DataFrame中,列名为x、y、z
for col in ['x', 'y', 'z']:
    # 绘制直方图+密度曲线
    plt.figure(figsize=(12, 4))
    plt.subplot(1, 3, 1)
    sns.histplot(df[col], kde=True)
    plt.title(f'{col} 直方图+密度曲线')
    
    # 绘制Q-Q图
    plt.subplot(1, 3, 2)
    stats.probplot(df[col], plot=plt)
    plt.title(f'{col} Q-Q图')
    plt.show()
    
    # 安德森-达令检验
    ad_result = stats.anderson(df[col], dist='norm')
    print(f"===== 特征{col}检验结果 =====")
    print(f"检验统计量: {ad_result.statistic:.4f}")
    for sig, crit in zip(ad_result.significance_level, ad_result.critical_values):
        print(f"显著性水平{sig}%临界值: {crit:.4f},{'接受正态分布假设' if ad_result.statistic < crit else '拒绝正态分布假设'}")
    
    # 计算偏度、峰度
    skewness = df[col].skew()
    kurtosis = df[col].kurt() + 3 # 还原为普通峰度
    print(f"偏度: {skewness:.4f}, 峰度: {kurtosis:.4f}\n")

内容的提问来源于stack exchange,提问作者zenezko

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 23:27:01