# 数据预处理模块 (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. 生成合成数据 ```python 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. 数据预处理 ```python 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. 创建数据集 ```python 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. 数据加载器 ```python 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. 从配置文件加载 ```python from src.data import load_data_from_config # 从配置文件加载数据 train_loader, val_loader, test_loader = load_data_from_config( 'configs/training_config.yaml' ) ``` ## 配置选项 ### 数据预处理配置 ```python 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) ``` ### 数据加载器配置 ```python 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 ## 测试 运行测试脚本验证功能: ```bash # 在虚拟环境中运行 python simple_test.py # 完整测试(需要torch) python test_data_module.py ``` ## 注意事项 1. 确保在虚拟环境中安装所有依赖 2. PAD值范围应在[-1, 1]内 3. Vitality值范围应在[0, 100]内 4. 置信度范围应在[0, 1]内 5. 数据预处理时应先拟合预处理器再转换数据