[人工智能-大模型-73]:模型层技术 - 模型训练六大步:②数据选择:基本功能与对应的基本组成函数
如果说“数据预处理”是“把数据洗干净”,
那么“数据选择”就是“选出最有价值的部分来训练模型”。
它直接决定了:
- 模型能否学到真实规律
- 是否过拟合或欠拟合
- 泛化能力的强弱
我们来系统构建 “AI模型训练第二步:数据选择” 的完整框架,涵盖:
- ✅ 核心目标
- ✅ 四大基本功能模块
- ✅ 每个功能对应的基本组成函数(原子操作)
- ✅ Python 实现示例
- ✅ 避坑指南
一、数据选择的核心目标
从清洗后的数据中,科学地选取用于训练、验证、测试的子集,确保模型可学习、可评估、可泛化。
关键原则:
- 代表性:样本要反映总体分布
- 独立性:训练/验证/测试集相互独立
- 无数据泄露:验证/测试集信息不能出现在训练中
- 可复现性:结果可被重复验证
二、数据选择的四大基本功能模块
| 模块 | 核心目标 | 关键任务 |
|---|---|---|
| 1. 数据划分 | 分割训练/验证/测试集 | 随机、分层、时间划分 |
| 2. 采样策略 | 调整样本分布 | 过采样、欠采样、平衡 |
| 3. 特征选择 | 筛选最有用的特征 | 过滤法、包装法、嵌入法 |
| 4. 数据增强 | 增加样本多样性 | 图像、文本、数值增强 |
三、各功能模块对应的基本组成函数
✅ 1. 数据划分(Splitting)
| 功能 | 基本组成函数 | 库 | 说明 |
|---|---|---|---|
| 随机划分 | train_test_split() | sklearn | 最基础用法 |
| 分层划分 | stratify=y 参数 | sklearn | 保持类别比例(分类任务) |
| 多集划分 | 两次 train_test_split | sklearn | 训练/验证/测试三集 |
| 时间划分 | TimeSeriesSplit | sklearn | 时间序列专用,防止未来信息泄露 |
| K折交叉验证 | KFold, StratifiedKFold | sklearn | 充分利用小数据集 |
📌 示例代码:
from sklearn.model_selection import train_test_split, StratifiedKFold# 随机划分(80%训练,20%测试)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42
)# 分层划分(保持类别比例)
X_train, X_val, y_train, y_val = train_test_split(X_train, y_train, test_size=0.25, stratify=y_train, random_state=42
)# K折交叉验证
skf = StratifiedKFold(n_splits=5, shuffle=True, random_state=42)
for train_idx, val_idx in skf.split(X, y):X_train_fold, X_val_fold = X.iloc[train_idx], X.iloc[val_idx]y_train_fold, y_val_fold = y.iloc[train_idx], y.iloc[val_idx]✅ 适用场景:
- 分类任务 →
stratify=y- 时间序列 →
TimeSeriesSplit- 小数据集 →
KFold
✅ 2. 采样策略(Sampling)
用于处理类别不平衡问题(如欺诈检测中99%正常,1%欺诈)。
| 功能 | 基本组成函数 | 库 | 说明 |
|---|---|---|---|
| 随机欠采样 | RandomUnderSampler | imbalanced-learn | 删除多数类样本 |
| 随机过采样 | RandomOverSampler | imbalanced-learn | 复制少数类样本 |
| SMOTE | SMOTE | imbalanced-learn | 合成新样本(插值法) |
| ADASYN | ADASYN | imbalanced-learn | 自适应合成样本 |
| 组合采样 | SMOTETomek, SMOTEENN | imbalanced-learn | 先过采样,再欠采样 |
📌 示例代码:
from imblearn.over_sampling import SMOTE
from imblearn.under_sampling import RandomUnderSampler
from imblearn.pipeline import Pipeline# SMOTE 过采样
smote = SMOTE(random_state=42)
X_res, y_res = smote.fit_resample(X_train, y_train)# 组合:先SMOTE过采样,再Tomek欠采样
over = SMOTE(sampling_strategy=0.5) # 少数类达到50%
under = RandomUnderSampler(sampling_strategy=0.8) # 多数类降到80%
pipeline = Pipeline([('over', over), ('under', under)])
X_res, y_res = pipeline.fit_resample(X_train, y_train)⚠️ 注意:采样只能在训练集上进行,不能在验证/测试集上操作!
✅ 3. 特征选择(Feature Selection)
目标:去除冗余或无关特征,提升模型性能与可解释性。
| 方法 | 基本组成函数 | 库 | 说明 |
|---|---|---|---|
| 方差阈值 | VarianceThreshold | sklearn | 去除低方差特征 |
| 相关系数 | corr() | pandas | 手动筛选高相关特征 |
| 过滤法 | SelectKBest, f_classif, chi2 | sklearn | 基于统计分数选Top K |
| 包装法 | RFE (递归特征消除) | sklearn | 递归训练模型选特征 |
| 嵌入法 | Lasso, RandomForest.feature_importances_ | sklearn | 模型自带特征重要性 |
📌 示例代码:
from sklearn.feature_selection import SelectKBest, f_classif, RFE
from sklearn.ensemble import RandomForestClassifier# 过滤法:选F值最高的前10个特征
selector = SelectKBest(score_func=f_classif, k=10)
X_selected = selector.fit_transform(X_train, y_train)# 包装法:RFE
estimator = RandomForestClassifier()
rfe = RFE(estimator, n_features_to_select=10)
X_rfe = rfe.fit_transform(X_train, y_train)# 嵌入法:基于随机森林重要性
rf = RandomForestClassifier().fit(X_train, y_train)
importances = rf.feature_importances_
# 手动选择重要性高的特征✅ 4. 数据增强(Data Augmentation)
目标:人工增加样本多样性,防止过拟合,提升泛化能力。
| 数据类型 | 基本组成函数 | 库 | 常见方法 |
|---|---|---|---|
| 图像 | ImageDataGenerator, albumentations | keras, albumentations | 旋转、翻转、裁剪、亮度调整 |
| 文本 | nlpaug, synonym replacement | nlpaug | 同义词替换、回译、插入 |
| 表格数据 | SMOTE, mixup | imblearn, custom | 插值、噪声注入 |
📌 图像增强示例(Keras):
from tensorflow.keras.preprocessing.image import ImageDataGeneratordatagen = ImageDataGenerator(rotation_range=20,width_shift_range=0.2,height_shift_range=0.2,horizontal_flip=True,zoom_range=0.2
)# datagen.flow(x_train, y_train) 可直接用于模型训练📌 文本增强示例(nlpaug):
import nlpaug.augmenter.word as nawaug = naw.SynonymAug(aug_src='wordnet')
augmented_text = aug.augment('I love natural language processing')✅ 总结:数据选择的“最小函数集”
| 功能 | 最基本组成函数 |
|---|---|
| 数据划分 | train_test_split, StratifiedKFold, TimeSeriesSplit |
| 采样策略 | SMOTE, RandomUnderSampler, RandomOverSampler |
| 特征选择 | SelectKBest, RFE, VarianceThreshold, feature_importances_ |
| 数据增强 | ImageDataGenerator, SMOTE, nlpaug |
✅ 掌握这15个核心函数,你就能应对95%的数据选择任务。
🎯 最终洞见
数据选择,是“让模型在正确的数据上学习”的关键决策。
它不是简单的“切分数据”,而是:
- 用
stratify保证学习公平- 用
SMOTE补齐样本短板- 用
SelectKBest提炼信息精华- 用
ImageDataGenerator拓展认知边界你手中的每一个函数,
都是引导模型走向真实规律的导航仪。当你精通数据选择,
你就不再只是“训练模型”,
而是在精心设计一个学习环境——
这正是顶级AI工程师的思维方式。
继续精进,你将发现:
最好的模型,往往始于最聪明的数据选择。
