2_2_数据集#
作者: ZhouLong
创建日期: 2026 年 02 月 04 日
版本: 1.0
浏览量:
1. 数据存储方法#
数据存储的方法分为基本文件存储和数据库存储两大类。
特征 |
基本文件存储 |
数据库存储 |
|---|---|---|
数据结构 |
通常非结构化或半结构化 |
高度结构化,有明确模式 |
数据关系 |
难以建立和维护数据间关系 |
支持复杂的关系和关联 |
查询能力 |
简单查找,效率较低 |
强大的查询和检索功能 |
并发控制 |
有限,需自行实现锁机制 |
内置完善的并发控制 |
数据完整性 |
需手动保证 |
通过约束、事务保证 |
扩展性 |
垂直扩展为主 |
支持水平和垂直扩展 |
1.1 基本文件存储#
基本文件存储是什么?
以文件形式直接存储在文件系统中
常见格式:文本文件(.txt, .csv, .json)、二进制文件、XML等
通过操作系统API进行读写操作
适合使用文件存储的场景
简单的配置文件和日志文件
多媒体文件(图片、视频、音频)
文档和静态内容
数据量小、结构简单的应用
需要直接访问原始文件的应用
CSV#
特点:纯文本格式,易于人类阅读,兼容性极佳
id,name,age,score
1,张三,25,85.5
2,李四,30,92.0
3,王五,28,78.5
适用场景:
中小型数据集
数据交换和共享
Excel兼容需求
JSON#
特点:结构化格式,支持嵌套。但存储效率低下。一般不作为大量数据的存储方式。
[
{
"id": 1,
"name": "张三",
"attributes": {
"age": 25,
"score": 85.5
}
},
{
"id": 2,
"name": "李四",
"attributes": {
"age": 30,
"score": 92.0
}
}
]
适用场景:
API数据交换
配置文件和元数据
嵌套结构数据
FASTA#
特点:专用于生物信息学,简单序列表示。可在名字处添加简单标签。
>seq1 | label1
ATCGATCGATCG
>seq2 | label2
TAGCTAGCTAGC
适用场景:
DNA/RNA/蛋白质序列
生物信息学研究
标签较为简单的场景
1.2 数据库存储#
数据库存储
通过数据库管理系统(DBMS)组织、存储和管理数据
使用结构化查询语言(SQL)或特定API进行操作
适合使用数据库存储的场景
需要复杂查询和数据分析
多用户并发访问的系统
数据之间有复杂关系
需要保证数据一致性和完整性
需要频繁更新和事务支持
MySQL#
特点:关系型数据库,支持复杂查询,适合结构化数据
-- 创建表
CREATE TABLE users (
id INT PRIMARY KEY,
name VARCHAR(50),
age INT,
score FLOAT
);
-- 插入数据
INSERT INTO users VALUES (1, '张三', 25, 85.5);
适用场景:
大规模结构化数据
需要事务支持
复杂查询需求
SQLite#
特点:轻量级嵌入式数据库,单文件存储
-- SQLite使用类似SQL语法
-- 数据存储在单个.db文件中
适用场景:
移动应用和桌面应用
小型项目原型
无需独立数据库服务器的场景
2. 数据特征类型#
2.1 离散型特征#
定义:取值有限且不连续的特征,通常表示类别或状态。
示例:
性别:{男, 女}
颜色:{红, 绿, 蓝}
产品类别:{电子, 服装, 食品}
嵌入方法:
独热编码(One-Hot Encoding)
原始数据:颜色 = [红, 绿, 蓝, 红]
编码后:
红: [1, 0, 0]
绿: [0, 1, 0]
蓝: [0, 0, 1]
标签编码(Label Encoding)
颜色 → 数字映射:
红: 0, 绿: 1, 蓝: 2
嵌入层(Embedding Layer)
深度学习中常用
将离散值映射到低维连续向量
2.2 连续型特征#
定义:取值在某个范围内连续变化的特征
示例:
年龄:0-120岁
温度:-50℃到50℃
收入:0-100万元
嵌入方法:
直接输入
适用于数值范围合理的特征
模型直接学习原始数值
标准化(Standardization) 标准化可以减少不同特征下数据的量纲大小对结果的影响
公式:z = (x - μ) / σ
其中:μ是均值,σ是标准差
示例:
原始数据:[1000, 2000, 3000]
标准化后:[-1.22, 0, 1.22](假设)
归一化(Normalization) 归一化和标准化的目的是一致的,只是另一种数学实现。
公式:x' = (x - min) / (max - min)
结果范围:[0, 1]
示例:
原始数据:[10, 20, 30]
归一化后:[0, 0.5, 1]
分箱(Binning) 将连续值转换为离散区间,把无穷的连续空间转化为有限的分类空间,这样的好处是使得训练更加稳定。
年龄分箱:
0-18: 儿童
19-35: 青年
36-60: 中年
60+: 老年
3. 不同模态的数据#
数据有各种各样的模态,不同的模态有对应的特征,以及对应的处理方法。
3.1 图像数据#
特点:
高维度(像素矩阵)
空间相关性(邻近像素相关)
颜色通道(RGB, 灰度)
常见格式:JPEG, PNG, BMP
常用模型:CNN, GAN, DDPM(Diffusion)等
3.2 文本数据#
特点:
序列数据
语义丰富
长度可变
编码多样(ASCII, UTF-8)
常用模型:RNN, Transformer等
3.3 音频数据#
特点:
时间序列数据
频率特征丰富
采样率影响质量
常见格式:WAV, MP3
3.4 表格数据#
特点:
结构化行列
混合数据类型
缺失值常见
关系明确
4. 数据预处理#
4.1 缺失值处理#
统计方法:
删除法
删除缺失值所在行/列
适用于缺失比例较小的情况
填充法 填充法需要根据特定场景来选择合适的方案,没有固定的方法。
常用填充策略:
- 均值填充(数值型)
- 众数填充(类别型)
- 中位数填充(有离群值时)
- 前后值填充(时间序列)
插值法 插值法同样需要根据特定场景来选择合适的方案,没有固定的方法。
线性插值
多项式插值
时间序列插值
模型生成方法:
KNN填充:使用最邻近样本的值填充
回归填充:用其他特征预测缺失值
深度学习填充:使用自动编码器等模型
4.2 异常值处理#
检测方法:
标准差法:超出均值±3σ视为异常
箱线图法:超出1.5倍IQR视为异常
孤立森林:专门检测异常的算法
DBSCAN聚类:将稀疏点视为异常
处理方法:
删除:直接移除异常样本
替换:用边界值或统计值替换
分箱:将异常值归入边界箱
保留:某些场景下异常值包含重要信息,不需要处理
5. 数据集划分#
5.1 训练集、验证集、测试集解释#
训练集(Training Set) 作用:用于模型训练和参数学习 比例:通常占总数据的60-80% 特点:模型直接从中学习规律
验证集(Validation Set) 作用:
用于监测模型训练过程 比例:通常占10-20% 特点:不参与训练,用于模型训练过程的评估
测试集(Test Set) 作用:
最终模型的评估
估计泛化能力
报告最终性能 比例:通常占10-20% 特点:
只在最终使用一次
模拟真实场景
必须与训练集/验证集无交集,即无数据泄露的情况
一般比例按8:1:1,7:1:2或者其他都可,没有强制固定
5.2 K折交叉验证#
原理: 将数据集均分为K份,进行K次训练和验证
流程:
将数据随机打乱并分为K等份
进行K轮训练验证:
每次用K-1份作为训练集
用剩下的1份作为验证集
计算K次验证结果的平均值
优点:
充分利用数据
减少随机划分的影响
更可靠的性能评估
K=5折交叉验证示例:
原始数据:100个样本
第1轮:训练集=折2-5,验证集=折1
第2轮:训练集=折1,3-5,验证集=折2
第3轮:训练集=折1-2,4-5,验证集=折3
第4轮:训练集=折1-3,5,验证集=折4
第5轮:训练集=折1-4,验证集=折5
选择K值:
小数据集:建议K=5或10
大数据集:K=3可能足够
计算资源充足:使用较大K值
5.3 比例分割方法#
简单随机分割#
适用场景:数据分布均匀,无特殊要求
# 伪代码示例(仅展示逻辑)
# 假设data包含所有样本和标签
total_samples = len(data)
indices = 随机打乱(range(total_samples))
train_end = int(0.7 * total_samples)
val_end = train_end + int(0.15 * total_samples)
train_indices = indices[:train_end]
val_indices = indices[train_end:val_end]
test_indices = indices[val_end:]
分层采样分割#
适用场景:类别不平衡,需要保持分布一致
保持每个集合中各类别比例与原始数据相同
原始数据:类别A占60%,类别B占40%
→ 训练集:A占60%,B占40%
→ 验证集:A占60%,B占40%
→ 测试集:A占60%,B占40%
时间序列分割#
适用场景:时间相关数据,防止未来信息泄露
按时间顺序划分:
最早70%时间点 → 训练集
中间15%时间点 → 验证集
最近15%时间点 → 测试集
分组分割#
适用场景:同一对象有多个样本,需保证同一对象不在不同集合
同一患者的多张医疗影像:
患者1的所有影像 → 训练集
患者2的所有影像 → 验证集
患者3的所有影像 → 测试集
6. 注意事项#
随机种子:一般需要设置固定随机种子保证可复现性
数据泄露:确保三个数据集是无交集的,数据无重复
备份原始数据:始终保留原始数据副本
记录划分信息:记录划分方法和参数