共计 1770 个字符,预计需要花费 5 分钟才能阅读完成。
在 BP 神经网络应用中,原始数据质量直接影响模型的收敛速度和预测精度。以 MNIST 手写数字数据集为例,未标准化的像素值会导致梯度更新不稳定;CIFAR-10 中的噪声图片可能使模型错误聚焦无关特征;而金融风控数据中的类别不平衡则会导致模型偏见。这些案例都验证了数据预处理的关键性。

一、数据清洗:缺失值处理的三大策略
-
直接删除法 :适合缺失比例 <5% 且随机分布的数据
df.dropna(inplace=True) # 简单粗暴但可能损失信息 -
统计填充法 :数值型用均值 / 中位数,类别型用众数
from sklearn.impute import SimpleImputer imputer = SimpleImputer(strategy='median') df['income'] = imputer.fit_transform(df[['income']]) -
模型预测法 :用随机森林等模型预测缺失值
from sklearn.ensemble import RandomForestRegressor # 用非缺失数据训练模型后预测缺失值 -
选择依据 :数据量 >1 万时优先选模型预测,小数据集用统计填充更稳妥
二、特征工程:标准化的数学本质
-
Z-score 标准化 (StandardScaler)
$$ z = \frac{x – \mu}{\sigma} $$from sklearn.preprocessing import StandardScaler scaler = StandardScaler() X_train = scaler.fit_transform(X_train) -
Min-Max 归一化 (MinMaxScaler)
$$ x’ = \frac{x – min}{max – min} $$from sklearn.preprocessing import MinMaxScaler scaler = MinMaxScaler(feature_range=(0,1)) X_train = scaler.fit_transform(X_train) -
对比实验 :标准化更适合有异常值的数据,归一化对图像像素更友好
三、数据增强:解决样本不平衡
-
SMOTE 过采样 :对少数类生成合成样本
from imblearn.over_sampling import SMOTE sm = SMOTE(k_neighbors=3) X_res, y_res = sm.fit_resample(X, y) -
PCA 降维 :高维数据可视化前必用
from sklearn.decomposition import PCA pca = PCA(n_components=2) X_pca = pca.fit_transform(X) plt.scatter(X_pca[:,0], X_pca[:,1], c=y)
四、避坑指南
- 类别不平衡陷阱 :
- 过采样适合小数据集,欠采样适合大数据集
-
F1-score 比 accuracy 更能反映真实性能
-
内存优化技巧 :
# 分块读取大文件 chunk_size = 10000 for chunk in pd.read_csv('bigdata.csv', chunksize=chunk_size): process(chunk) -
线上一致性保障 :
- 保存训练时的 scaler 对象
- 使用 joblib 持久化预处理管道
from joblib import dump dump(scaler, 'scaler.joblib')
五、代码实战演示
# 数据分布对比可视化
import matplotlib.pyplot as plt
fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(12,4))
ax1.hist(X_raw['age'], bins=30, color='blue')
ax1.set_title('Raw Data')
ax2.hist(X_scaled['age'], bins=30, color='red')
ax2.set_title('After Scaling')
plt.show()
思考题延伸
- 图像数据如何适配 BP 网络?建议尝试:
- 像素值归一化到 [0,1]
-
使用 CNN 提取特征后再输入 BP
-
迁移学习中的预处理关键点:
- 必须与预训练模型保持一致
- ImageNet 模型要求输入为 224×224 且通道优先
数据处理就像给神经网络准备食材,好的预处理能让模型『吃』得更高效。你在实践中遇到过哪些特别的数据清洗难题?欢迎分享你的解决方案。
正文完
