Chordia / src /data /README.md
Corolin's picture
first commit
0a6452f
# 数据预处理模块 (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. 数据预处理时应先拟合预处理器再转换数据