F FisherHub Docs

数据工程

数据是 AI 的基石

高质量的数据集是构建优秀 AI 模型的前提。“垃圾进,垃圾出”(Garbage In, Garbage Out)是机器学习领域最经典的警示。无论模型结构多先进,训练数据质量不高的模型表现都不会好。

数据采集

采集来源

  • 公开数据集 — ImageNet、COCO、GLUE、Hugging Face Datasets
  • 网络爬虫 — 从互联网自动收集文本、图片等数据
  • API 获取 — 通过数据平台或服务商 API 获取
  • 传感器采集 — IoT 设备、摄像头等硬件采集
  • 用户生成 — 日志记录、用户反馈、标注平台
# 使用 Hugging Face 加载数据集
from datasets import load_dataset

dataset = load_dataset("imdb", split="train")
print(f"样本数: {len(dataset)}")
print(f"第一条文本: {dataset[0]['text'][:200]}")

数据采集的注意事项

  • 版权和合规问题
  • 用户隐私保护(需脱敏)
  • 数据分布的覆盖范围
  • 采集频率和实时性要求

数据清洗

常见问题与处理方法

  • 缺失值 — 删除、填充(均值/中位数/众数)、插值
  • 重复数据 — 基于精确匹配或近似去重
  • 异常值 — 基于统计方法(3σ、IQR)或领域知识识别
  • 格式不一致 — 统一日期格式、文字编码、单位
import pandas as pd

df = pd.read_csv("raw_data.csv")

# 处理缺失值
df["age"].fillna(df["age"].median(), inplace=True)

# 去除重复行
df.drop_duplicates(inplace=True)

# 使用 IQR 识别异常值
Q1 = df["salary"].quantile(0.25)
Q3 = df["salary"].quantile(0.75)
IQR = Q3 - Q1
df = df[
    (df["salary"] >= Q1 - 1.5 * IQR) &
    (df["salary"] <= Q3 + 1.5 * IQR)
]

# 统一日期格式
df["date"] = pd.to_datetime(df["date"])

数据标注

数据标注是监督学习的基础工作,也是最耗费人力和时间的环节。

标注类型

  • 分类标注 — 为数据分配类别标签
  • 边界框标注 — 标出目标物体的位置
  • 语义分割标注 — 逐像素标注
  • 文本标注 — 命名实体标注、情感标注
  • 关键点标注 — 人体姿态关键点

标注策略

  • 人工标注 — 通过标注平台(LabelImg、Label Studio、CVAT)
  • 半自动标注 — 模型先预测,人工修正
  • 主动学习 — 模型选择最不确定的样本由人工标注
  • 众包标注 — 通过 Amazon Mechanical Turk 等平台分发

数据增强

数据增强通过对现有数据施加变换来生成新样本,可以有效增加数据量、提高模型泛化能力。

图像增强方法

  • 几何变换:旋转、翻转、裁剪、缩放
  • 色彩变换:亮度调整、对比度调整、色彩抖动
  • 噪声注入:高斯噪声、椒盐噪声
  • 高级方法:MixUp、CutMix、RandAugment
from torchvision import transforms

data_augmentation = transforms.Compose([
    transforms.RandomRotation(10),
    transforms.RandomHorizontalFlip(p=0.5),
    transforms.ColorJitter(
        brightness=0.2, contrast=0.2
    ),
    transforms.RandomResizedCrop(224),
    transforms.ToTensor(),
])

文本增强方法

  • 同义词替换
  • 回译(翻译成另一种语言再翻译回来)
  • 随机插入/删除/交换

特征工程

特征工程是将原始数据转换为模型更容易理解的特征的过程。好的特征能显著提升模型性能。

特征处理

  • 数值特征 — 标准化、归一化、离散化、多项式特征
  • 类别特征 — One-Hot 编码、Label 编码、Target 编码
  • 时间特征 — 年、月、日、星期、是否为节假日
  • 文本特征 — TF-IDF、词向量、句向量
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.preprocessing import StandardScaler, OneHotEncoder

# 文本特征提取
vectorizer = TfidfVectorizer(max_features=5000)
text_features = vectorizer.fit_transform(texts)

# 数值特征标准化
scaler = StandardScaler()
numerical_features = scaler.fit_transform(numerical_data)

# 类别特征编码
encoder = OneHotEncoder(sparse_output=False)
categorical_features = encoder.fit_transform(categories)

特征选择

  • 过滤法(基于统计指标)
  • 包裹法(递归特征消除)
  • 嵌入法(基于模型的特征重要性)

数据工程在整个 AI 项目中往往占据 60% 以上的工作量,投入足够的时间和精力在数据上通常会带来最大的回报。