第一章 人工智能基础
第二部分:数据处理及可视化
第一节:数据清洗与预处理
一、数据清洗与预处理简介
在人工智能项目中,数据质量直接决定模型效果。原始数据通常存在缺失、重复、异常等问题,必须在建模前进行清洗与预处理。
二、处理缺失值(Missing Values)
【漫话机器学习系列】257.填补缺失值(Imputing Missing Values)_机器学习利用python实现缺失值填补-优快云博客
1. 检测缺失值
使用 Pandas:
import pandas as pd
df = pd.read_csv("data.csv")
print(df.isnull().sum()) # 每列缺失值数量
2. 缺失值处理方法
方法 | 示例 | 适用场景 |
---|---|---|
删除缺失值 | df.dropna() | 缺失值较少 |
填充固定值 | df.fillna(0) | 用 0 或均值、众数等替代 |
前/后向填充 | df.fillna(method='ffill') | 时间序列数据常用 |
df['age'].fillna(df['age'].mean(), inplace=True) # 用均值填充年龄
三、处理重复数据
1. 检测重复行
print(df.duplicated())
2. 删除重复行
df.drop_duplicates(inplace=True)
可指定列删除:
df.drop_duplicates(subset=['name', 'age'], inplace=True)
四、处理异常值(Outliers)
异常值是指明显偏离其他数据点的值,它们可能是数据录入错误、系统问题,也可能是极端但真实的观测结果。异常值会影响模型训练过程,尤其对线性回归、聚类等模型影响较大。
【漫话机器学习系列】198.异常值(Outlier)_outlier值-优快云博客
方法一:基于统计方法识别(Z-Score)
1. 原理简介
Z-Score(标准分数)衡量一个值距离该列平均值的标准差数。计算公式为:
-
x:单个观测值
-
μ:该列均值
-
σ:该列标准差
-
z:z 分数(正负都可能)
一般规则:若 |z| > 3,则认为该值为异常值(正态分布下 99.7% 的数据都在 ±3σ 范围内)
2. 示例代码
from scipy import stats
import numpy as np
import pandas as pd
df = pd.read_csv("data.csv")
z_scores = np.abs(stats.zscore(df['income'])) # income 列
df_clean = df[z_scores < 3] # 过滤异常值
3. 优缺点
优点 | 缺点 |
---|---|
简单、直观、适合正态分布数据 | 对非正态分布数据不适用,对均值和方差敏感 |
方法二:基于分位数(IQR:Interquartile Range)方法
【漫话机器学习系列】264.内距(又称四分位差)Interquartile Range_iqr 四分位范围-优快云博客
1. 原理简介
IQR 是描述数据离散程度的统计量,计算如下:
-
Q1:第 25 百分位数(下四分位)
-
Q3:第 75 百分位数(上四分位)
-
QR = Q3 - Q1
常用异常值判定范围为:
超出此范围的值视为异常值。
2. 示例代码
Q1 = df['age'].quantile(0.25)
Q3 = df['age'].quantile(0.75)
IQR = Q3 - Q1
# 筛选在正常范围内的数据
df_clean = df[(df['age'] >= Q1 - 1.5 * IQR) & (df['age'] <= Q3 + 1.5 * IQR)]
3. 优缺点
优点 | 缺点 |
---|---|
不依赖分布类型,对极端值不敏感,适用面广 | 对高度偏态分布数据仍可能误判 |
方法选择建议
数据特点 | 建议方法 |
---|---|
接近正态分布 | Z-Score |
不确定分布/存在偏态 | IQR 方法 |
数据量大、对鲁棒性要求高 | 更推荐 IQR |
五、标准化字段格式
-
字符串统一大小写:
df['name'] = df['name'].str.lower()
-
去除空格、特殊符号:
df['city'] = df['city'].str.strip()
-
日期转换:
df['date'] = pd.to_datetime(df['date'])
六、小结
数据清洗与预处理是 AI 项目的第一步,目标是让数据尽可能完整、统一、无噪声。掌握缺失值填充、重复行处理和异常值剔除等技术,将显著提升后续建模质量。