数据预处理模块 (Data Preprocessing Module)
本模块实现了情绪与生理状态变化预测模型的数据预处理功能。
功能特性
- 数据集类: 处理7维输入和5维输出的数据
- 数据加载器: 支持训练/验证/测试分割
- 数据预处理: 标准化、清洗和异常值处理
- 合成数据生成: 生成符合要求的模拟数据
数据格式
输入特征 (7维)
- User PAD: Pleasure, Arousal, Dominance (3维) [-1, 1]
- Vitality: 生理活力值 (1维) [0, 100]
- Current PAD: 当前状态 Pleasure, Arousal, Dominance (3维) [-1, 1]
输出标签 (5维)
- ΔPAD: PAD状态变化量 (3维) [-0.5, 0.5]
- ΔPressure: 压力变化 (1维) [-0.3, 0.3]
- Confidence: 预测置信度 (1维) [0, 1]
使用示例
1. 生成合成数据
from src.data import generate_synthetic_data, SyntheticDataGenerator
# 便捷函数生成数据
features, labels = generate_synthetic_data(num_samples=1000)
print(f"Features: {features.shape}, Labels: {labels.shape}")
# 使用生成器类
generator = SyntheticDataGenerator(num_samples=1000, seed=42)
features, labels = generator.generate_data()
# 生成特定模式的数据
features, labels = generator.generate_dataset_with_patterns(
patterns=['stress', 'relaxation', 'excitement'],
pattern_weights=[0.3, 0.4, 0.3]
)
2. 数据预处理
from src.data import create_preprocessor
# 创建预处理器
preprocessor = create_preprocessor()
# 拟合并转换数据
features_scaled, labels_scaled = preprocessor.fit_transform(features, labels)
# 获取统计信息
feature_stats = preprocessor.get_feature_statistics()
label_stats = preprocessor.get_label_statistics()
# 保存预处理器
preprocessor.save_preprocessor('preprocessor.pkl')
# 加载预处理器
preprocessor = DataPreprocessor.load_preprocessor('preprocessor.pkl')
3. 创建数据集
from src.data import EmotionDataset
# 从numpy数组创建
dataset = EmotionDataset(features, labels)
# 从文件创建
dataset = EmotionDataset('data.csv')
# 获取单个样本
sample_features, sample_labels = dataset[0]
# 获取统计信息
stats = dataset.get_feature_statistics()
4. 数据加载器
from src.data import create_data_loader
# 创建数据加载器
loader = create_data_loader(batch_size=32, shuffle=True)
# 获取所有数据加载器
train_loader, val_loader, test_loader = loader.get_all_loaders(
data=features, labels=labels
)
# 获取单个加载器
train_loader = loader.get_train_loader(data=features, labels=labels)
val_loader = loader.get_val_loader(data=features, labels=labels)
# 使用合成数据
train_loader, val_loader, test_loader = loader.get_synthetic_loaders(
num_samples=1000
)
5. 从配置文件加载
from src.data import load_data_from_config
# 从配置文件加载数据
train_loader, val_loader, test_loader = load_data_from_config(
'configs/training_config.yaml'
)
配置选项
数据预处理配置
config = {
'feature_scaling': {
'method': 'standard', # standard, min_max, robust, none
'pad_features': 'standard',
'vitality_feature': 'min_max'
},
'missing_values': {
'strategy': 'mean', # mean, median, most_frequent, constant, knn
'knn_neighbors': 5
},
'outliers': {
'method': 'isolation_forest', # isolation_forest, z_score, iqr
'contamination': 0.1
}
}
preprocessor = create_preprocessor(config)
数据加载器配置
config = {
'batch_size': 32,
'num_workers': 4,
'train_split': 0.7,
'val_split': 0.15,
'test_split': 0.15,
'normalize_features': True,
'normalize_labels': False
}
loader = create_data_loader(config)
数据验证
模块包含完整的数据验证功能:
- 范围检查: 验证PAD值、Vitality值和置信度在合理范围内
- 缺失值检测: 自动检测和处理NaN值
- 异常值检测: 使用多种方法检测异常值
- 维度验证: 确保数据维度正确
文件结构
src/data/
├── __init__.py # 模块导出
├── dataset.py # EmotionDataset类
├── data_loader.py # 数据加载器工厂
├── preprocessor.py # 数据预处理类
├── synthetic_generator.py # 合成数据生成器
└── README.md # 使用说明
依赖要求
- torch >= 1.12.0
- numpy >= 1.21.0
- pandas >= 1.3.0
- scikit-learn >= 1.0.0
- scipy >= 1.7.0
- loguru >= 0.6.0
测试
运行测试脚本验证功能:
# 在虚拟环境中运行
python simple_test.py
# 完整测试(需要torch)
python test_data_module.py
注意事项
- 确保在虚拟环境中安装所有依赖
- PAD值范围应在[-1, 1]内
- Vitality值范围应在[0, 100]内
- 置信度范围应在[0, 1]内
- 数据预处理时应先拟合预处理器再转换数据