数值数据:画图、统计与异常值
文章目录
- 数值数据:画图、统计与异常值
-
- [1. 拼特征向量之前,先别急着写代码](#1. 拼特征向量之前,先别急着写代码)
- [2. 可视化:用图代替「凭感觉」](#2. 可视化:用图代替「凭感觉」)
-
- [2.1 散点图:特征与标签的关系](#2.1 散点图:特征与标签的关系)
- [2.2 直方图:单列分布长什么样](#2.2 直方图:单列分布长什么样)
- [2.3 变换之后还要再看](#2.3 变换之后还要再看)
- [3. 统计描述:给数据一张「体检报告」](#3. 统计描述:给数据一张「体检报告」)
-
- [3.1 中心位置:均值与中位数](#3.1 中心位置:均值与中位数)
- [3.2 离散程度:标准差](#3.2 离散程度:标准差)
- [3.3 分位数:从最小到最大](#3.3 分位数:从最小到最大)
- [4. 什么是异常值](#4. 什么是异常值)
-
- [4.1 别只信一张统计表](#4.1 别只信一张统计表)
- [4.2 两类典型来源](#4.2 两类典型来源)
- [5. 异常值怎么处理](#5. 异常值怎么处理)
-
- [5.1 明确是错误:删](#5.1 明确是错误:删)
- [5.2 真实极端值:看推理时要不要覆盖](#5.2 真实极端值:看推理时要不要覆盖)
- [5.3 裁剪:折中手段](#5.3 裁剪:折中手段)
- [6. 贯穿管道:每一步都复核假设](#6. 贯穿管道:每一步都复核假设)
- [7. 动手:用 pandas 快速探索](#7. 动手:用 pandas 快速探索)
- [8. 与专栏前文的衔接](#8. 与专栏前文的衔接)
- [9. 能力边界与常见误区](#9. 能力边界与常见误区)
-
- [9.1 适用边界](#9.1 适用边界)
- [9.2 常见误区](#9.2 常见误区)
- [10. 关键术语速查](#10. 关键术语速查)
- [11. 延伸阅读](#11. 延伸阅读)
- [12. 小结](#12. 小结)
摘要 :上一篇讲清了特征向量是什么,但拼向量之前 ,有一步常被跳过------先把数值列「看清楚」。本文以专栏一贯的汽车重量与油耗数据为例,讲两条基本功:可视化 (散点图、直方图)与统计描述 (均值、中位数、标准差、分位数),并说明如何发现与处理异常值(Outlier)。适合准备动手做特征工程的读者。
1. 拼特征向量之前,先别急着写代码
很多教程的流程是:read_csv → fit → 看准确率。真做项目时,中间少了一大块:
text
读入数据 → 看图、算统计量 → 发现问题 → 清洗/变换 → 拼特征向量 → 训练
第 15 篇说过,模型吃的是浮点向量,不是表格整行。可向量里的数从哪来?若原始列里混着录入错误、极端长尾、特征与标签关系反常,后面再怎么归一化、调学习率都救不回来。

| 阶段 | 你在回答什么 |
|---|---|
| 探索 | 这列数长什么样?和标签什么关系? |
| 诊断 | 有没有错、有没有离群? |
| 决策 | 删、留、裁剪,还是换变换方式? |
这一步不炫技,却最省时间------坏数据越早发现,后面返工越少。
2. 可视化:用图代替「凭感觉」
数字表格很难一眼看出规律。图能把分布和关系摊开给你看。拼特征向量前,至少建议看两类图。
2.1 散点图:特征与标签的关系
专栏第 01 篇用汽车重量 预测油耗 MPG,散点图已经出现过:车越重,MPG 往往越低,负相关一目了然。
| 重量(千磅) | MPG |
|---|---|
| 3.50 | 18 |
| 3.69 | 15 |
| 3.44 | 18 |
| 3.43 | 16 |
| 4.34 | 15 |
| 4.42 | 14 |
| 2.37 | 24 |
7 个点排成一条向下倾斜的带,说明「用重量做特征」在直觉上说得通。若散点像一团随机噪声,就要怀疑:特征选错、标签噪声大,或还需别的列。
假设数据录入时多打了一个 0,多了一行 weight=34.3, mpg=16:

红点远远脱离主簇------不用等训练结束,画图当天就能警觉。
2.2 直方图:单列分布长什么样
散点图看两列关系 ;直方图(Histogram) 看一列自己的分布。
7 辆正常车的重量都挤在 2.4~4.5 千磅;加上 34.3 那一行后,直方图会在远端多出一根孤零零的柱。这种「一头挤满、一头孤立」的形状,是异常值的典型信号。

2.3 变换之后还要再看
归一化、分桶、对数变换会改变分布形状。第 14 篇讲过这些手段,但不能只在原始数据上看一次图。每做一步变换,都值得快速扫一眼:主簇是否还在合理范围、是否制造出新的极端值。
3. 统计描述:给数据一张「体检报告」
看图靠眼睛,统计量用数字概括整列,适合写进实验记录、做自动化监控。
3.1 中心位置:均值与中位数
对 7 辆正常车重量求均值(Mean):
x ˉ = 3.50 + 3.69 + 3.44 + 3.43 + 4.34 + 4.42 + 2.37 7 ≈ 3.74 \bar{x} = \frac{3.50 + 3.69 + 3.44 + 3.43 + 4.34 + 4.42 + 2.37}{7} \approx 3.74 xˉ=73.50+3.69+3.44+3.43+4.34+4.42+2.37≈3.74
中位数(Median) 是把样本从小到大排列后正中间那个数。7 个数的中位数是第 4 个:3.50。
| 统计量 | 7 辆正常车 | 混入 34.3 后 |
|---|---|---|
| 均值 | ≈ 3.74 | ≈ 7.55(被拉偏) |
| 中位数 | 3.50 | 3.50(较稳健) |
均值对极端值敏感;中位数更「抗离群」。两列对比,若均值和中位数差很多,往往说明分布偏斜或有异常点。
3.2 离散程度:标准差
标准差(Standard Deviation) 衡量数据离均值有多远:
s = 1 n − 1 ∑ i = 1 n ( x i − x ˉ ) 2 s = \sqrt{\frac{1}{n-1}\sum_{i=1}^{n}(x_i - \bar{x})^2} s=n−11i=1∑n(xi−xˉ)2
7 辆正常车重量 s ≈ 0.68 s \approx 0.68 s≈0.68 千磅。混入 34.3 后, s s s 会暴涨------又一个报警信号。
3.3 分位数:从最小到最大
分位数(Percentile) 把有序数据切成百分位点。常看五档:
| 记号 | 含义 | 7 辆正常车(约) |
|---|---|---|
| P0 | 最小值 | 2.37 |
| P25 | 第一四分位 | 3.43 |
| P50 | 中位数 | 3.50 |
| P75 | 第三四分位 | 4.34 |
| P100 | 最大值 | 4.42 |
P0 就是最小值,P100 就是最大值。P50 即中位数。

粗判异常的小技巧 :若「低端跨度」P25 − P0 与「高端跨度」P100 − P75 严重不对称,可能要查高端或低端的极端点。正常 7 辆车:P25 − P0 ≈ 1.06,P100 − P75 ≈ 0.08,比较均衡。混入 34.3 后,P100 − P75 ≈ 29.96,高端突然拉长------值得重点核对。
4. 什么是异常值
异常值(Outlier) 指在某一特征(有时也包括标签)上,明显远离大多数样本 的取值。
它不自动等于「错误」。但若不处理,线性回归的最小二乘会被大残差点猛拉,逻辑回归、神经网络也可能被极端输入干扰梯度。
4.1 别只信一张统计表
分位数、均值、标准差很有用,但不能迷信。数据看起来「平衡」,仍可能藏着:
- 少量错误值夹在中间,图上不易看见
- 多列联合异常(单看重量正常、重量与排量交叉才离谱)
- 标签错误(重量对但 MPG 录错)
所以正确姿势是:统计 + 可视化 + 业务常识 三者交叉验证。
4.2 两类典型来源
| 类型 | 例子 | 常见处理 |
|---|---|---|
| 录入/测量错误 | 34.3 本是 3.43;传感器故障 | 修正或删除该样本 |
| 真实但极端 | 合法的重型卡车、超长里程 | 视业务决定保留、裁剪或单独建模 |
5. 异常值怎么处理
发现可疑点之后,按决策树想一遍,比「一律删除」稳妥。

5.1 明确是错误:删
weight=34.3 若核对行车证应是 3.43,这条记录应从训练集删掉(或改对原始值)。让错误点参与训练,等于教模型学噪声。
5.2 真实极端值:看推理时要不要覆盖
若业务上线上也会出现 这类重型车,且你希望模型对它们给出合理预测,可以保留,但要意识到:极端点有时与标签的极端表现相关,反而携带信息;有时则只是特征空间的噪声,会伤害泛化。
若线上几乎不会出现,或你不在乎这类样本的预测,可以删除训练中的这些行。
5.3 裁剪:折中手段
裁剪(Clipping) 把数值限制在区间 L , U L, U L,U 内,例如按 P1~P99 或业务上下界:
x clip = min ( U , max ( L , x ) ) x_{\text{clip}} = \min\bigl(U,\ \max(L,\ x)\bigr) xclip=min(U, max(L, x))
汽车重量若设 U = 5 U=5 U=5 千磅,34.3 会被压到 5,既保留「偏重」信号,又避免梯度爆炸。裁剪会损失信息,适合「不想删样本、又要压住极端」的场景。
6. 贯穿管道:每一步都复核假设
特征工程不是一次性任务。推荐在链路关键节点重复「画图 + 关键统计量」:

| 节点 | 建议检查 |
|---|---|
| 原始数据 | 散点、直方图、P0/P50/P100 |
| 删错/补缺后 | 行数、均值/中位数是否合理 |
| 裁剪或分桶后 | 是否堆在边界、桶是否太空 |
| 标准化后 | 是否近似均值 0、方差 1(训练集上) |
第 15 篇强调:训练与推理必须用同一套变换。探索阶段就要把「当时看到了什么、决定了删哪几行、裁剪阈值多少」记下来,否则三个月后很难复现。
7. 动手:用 pandas 快速探索
下面用与正文相同的数据做最小探索(含一行故意录入错误):
python
import pandas as pd
df = pd.DataFrame({
"weight": [3.50, 3.69, 3.44, 3.43, 4.34, 4.42, 2.37, 34.3],
"mpg": [18, 15, 18, 16, 15, 14, 24, 16 ],
})
# 1. 描述性统计:均值、标准差、分位数一次看齐
print(df["weight"].describe(percentiles=[.25, .5, .75]))
# 2. 散点:看 weight 与 mpg 关系
df.plot.scatter(x="weight", y="mpg", title="weight vs mpg")
# 3. 直方图:看 weight 分布
df["weight"].plot.hist(bins=8, title="weight distribution")
# 4. 粗筛:重量超过 10 千磅视为可疑(业务阈值示例)
suspect = df[df["weight"] > 10]
print("rows to review:\n", suspect)
# 5. 确认是录入错误后删除
df_clean = df[df["weight"] < 10].copy()
print("median weight:", df_clean["weight"].median())
运行后你会看到:describe 里 max 飙到 34.3;median 仍接近 3.5;散点图红点孤立。确认错误后 df_clean 才适合进入「拼特征向量 → 训练」环节。
8. 与专栏前文的衔接
| 篇章 | 本篇补上的环节 |
|---|---|
| 第 01 篇 | 已用散点图建立重量--油耗直觉 |
| 第 14 篇 | 讲归一化、分桶、清洗,默认你「知道要处理」 |
| 第 15 篇 | 讲向量结构,默认输入已是浮点数组 |
| 本篇 | 回答:处理之前,如何发现该处理什么 |
可以把流程记成:
text
探索(本篇)→ 清洗与变换(第 14 篇)→ 拼向量(第 15 篇)→ 模型(第 01 篇起)
9. 能力边界与常见误区
9.1 适用边界
- 本篇针对表格型数值列的初探;图像、文本有各自的探索工具(像素直方图、词频等),但「先看再建模」的思路相同。
- 自动化异常检测算法(Isolation Forest 等)是进阶话题,初学阶段肉眼 + 基础统计通常够用。
9.2 常见误区
| 误区 | 正解 |
|---|---|
| 「数据不大,不用看图」 | 小数据集一个错值就能毁掉回归线 |
| 「均值正常就没问题」 | 均值会被少数极端值掩盖,要看中位数与分位数 |
| 「发现异常值一律删除」 | 先分清错误 vs 真实,再决定删/留/裁剪 |
| 「只在开头看一次图」 | 每次变换后都应快速复查 |
| 「统计量可以代替业务判断」 | 34.3 是否可能,要对照真实世界(轿车重量量级) |
| 「探索集和测试集混着洗」 | 清洗规则应只根据训练/探索划分拟定,避免泄漏 |
10. 关键术语速查
| 术语 | 一句话解释 |
|---|---|
| 探索性分析 | 训练前对数据看图、算统计、提假设 |
| 散点图 | 两列数值的关系图,常用来观察特征与标签 |
| 直方图 | 单列数值的分布图,看集中与长尾 |
| 均值 | 算术平均,对极端值敏感 |
| 中位数 | 排序后的中间值,较稳健 |
| 标准差 | 衡量数据离散程度 |
| 分位数 | 如 P25、P75,描述分布位置 |
| 异常值 | 远离主流样本的取值 |
| 裁剪 | 把数值限制在预设上下界内 |
11. 延伸阅读
| 资源 | 适合看什么 |
|---|---|
| pandas describe | 一键输出均值、分位数等 |
| pandas 可视化 | plot.scatter、plot.hist 快速出图 |
| NumPy 百分位数 | np.percentile 计算分位点 |
| 专栏第 14 篇 | 归一化、分桶与清洗 |
| 专栏第 15 篇 | 从表格到特征向量 |
12. 小结
拼特征向量之前,请养成两个习惯:画图 看关系与分布,算统计量给每列做体检。异常值未必是垃圾数据,但必须先分清是录入错误还是真实极端,再选择删除、保留或裁剪。
记住:
text
可视化 + 统计描述 → 发现异常 → 清洗决策 → 再拼特征向量
下一篇进入类别特征:品牌、颜色这类非数值字段,如何编码进特征向量。
系列导航:
- 上一篇:【机器学习】(15)------ 特征向量
- 下一篇(预告):类别特征处理入门------词表、One-Hot 与特征交叉
如果本篇对你有帮助,欢迎点赞、收藏、关注博主,机器学习专栏持续更新中,下次更新不迷路。