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

移除数据集6个最大值后Gaussian曲线几乎无变化,是否正常?

问题:移除异常值后高斯拟合曲线几乎无变化是否正常?

我编写了一段Python程序,将126个数据绘制成柱状图并拟合高斯曲线,代码如下:

from matplotlib.pyplot import *
from numpy import *
from scipy.stats import norm
f=open("data.txt")
items=[]
for i in range(0, 500000, 20000):
    items.append(0)
arr=f.readlines()
for i in range(len(arr)):
    arr[i] = int(arr[i])
for i in range(len(arr)):
    for j in range(0, 500000, 20000):
        if arr[i] < j:
            items[j//20000] += 1
            break
yticks(range(32), fontsize = 5)
xticks(list(range(len(items))), list(range(0, 500, 20)), fontsize = 5)
xlabel("Стоимость, тыс. руб")
ylabel("Количество квартир")
bar(list(range(25)), items, 1, edgecolor = "black")
t_mean = mean(items)
t_variance = var(items)
t_sigma = t_variance ** 0.5
t_x = linspace(-5, 25,50)
plot(t_x,norm.pdf(t_x,t_mean,t_sigma) *500)
show()

运行后得到结果图:
运行结果图

随后我移除了数据集中的6个最大值,得到新的结果图:
移除最大值后的结果图

可见柱状图中的异常值已消失,但高斯曲线几乎没有变化(仅将两图并排对比时能看到细微差异)。请问该现象是否正常?

附data.txt内容:

450000
325000
325000
320000
315000
300000
170000
160000
152000
150000
150000
148000
145000
130000
130000
129000
125000
125000
125000
115000
111000
110000
108000
105000
105000
103000
100000
100000
100000
100000
100000
100000
100000
100000
100000
100000
100000
100000
100000
95000
94000
90000
90000
90000
90000
80000
79000
78000
77000
77000
75000
75000
75000
75000
75000
75000
75000
75000
75000
75000
74000
72000
70000
70000
70000
60000
60000
60000
60000
60000
55000
55000
55000
55000
54000
54000
53000
50000
50000
50000
50000
50000
50000
50000
50000
50000
50000
49000
48000
47000
45000
45000
45000
45000
45000
40000
40000
40000
40000
40000
38000
38000
37000
35000
35000
35000
32000
32000
32000
30000
30000
30000
30000
30000
30000
30000
28000
28000
25000
23000
23000
21000
18500
18500
18500
18000

解答

这个现象完全正常,核心原因是你拟合高斯曲线的统计量计算对象出错了:

  • 你用分组后的频数数组items计算均值和方差,而非原始数据
    你的代码里,t_mean = mean(items)和t_variance = var(items)是对分组后的频数统计数组求的统计量,不是针对原始126个房价数据。移除6个最大值只会让items最后几个分组的频数各减1(总共减6),但items有25个元素,大部分分组的频数毫无变化,所以整个数组的均值、方差变化微乎其微,反映到高斯曲线上自然看不出明显差异。

  • 异常值占比低,影响有限
    原始样本共126个,移除的6个仅占总样本的不到5%,且集中在少数分组,对整体频数分布的统计特征影响极小。

  • 正确做法:基于原始数据拟合高斯曲线
    如果你想让高斯曲线真实反映原始数据分布的变化,应该对原始的arr数组计算统计量,调整后的代码片段如下:

    # 替换原参数计算部分
    t_mean = mean(arr)
    t_variance = var(arr)
    t_sigma = t_variance ** 0.5
    # 匹配原始数据的x轴范围
    t_x = linspace(min(arr), max(arr), 100)
    # 调整缩放系数让曲线与柱状图匹配
    plot(t_x, norm.pdf(t_x, t_mean, t_sigma) * len(arr) * 20000)
    

    这样修改后,移除6个最大值会明显改变均值和方差,高斯曲线的位置和形状也会出现直观变化。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 18:24:54