在机器学习中,有些数据并不是独立的样本集合,而是按顺序排列的数据序列(sequence data)。在这种数据中,样本之间存在明确的顺序关系,前后的数据通常具有依赖性。
序列数据广泛出现在以下领域:
• 文本数据(句子、文档)
• 语音信号
• DNA 序列
• 用户行为序列
从结构上看,一个典型的序列数据集通常包括以下几部分:
• 序列数据(sequence data)
• 序列特征表示(sequence feature representation)
• 目标值或标签(target values,可选)
• 特征名称(feature names,可选)
• 数据说明(dataset description,可选)
下面分别介绍这些概念,并使用一个简单的文本序列示例进行说明。
一、序列数据
1、基本概念
序列数据的基本单位是序列(sequence)。一个序列通常由一组按顺序排列的元素组成。
例如,一个句子可以表示为:
css
["I", "love", "machine", "learning"]
这些元素通常称为:
• token(词或符号)
• symbol(符号)
• element(元素)
如果一个数据集中包含 n 个序列,每个序列长度最多为 m,则可以表示为:
cs
S =[ [s11, s12, s13, ...], [s21, s22, ...], ...]
其中:
• 每一行表示一个序列
• 每一列表示序列中的位置
在实际应用中,序列长度通常不固定,因此不同序列的长度可能不同。
不同序列长度可能不同,因此 S 更接近列表结构,而不是严格矩阵。
2、简单示例
假设一个简单的文本数据集包含三个句子:
css
["I", "love", "AI"]["Machine", "learning", "is", "powerful"]["Data", "science"]
每一行表示一个文本序列。
3、Scikit-Learn 数据集示例
Scikit-Learn 提供了 20 Newsgroups 文本数据集,该数据集包含来自 20 个新闻组的文章文本。
python
from sklearn.datasets import fetch_20newsgroups
news = fetch_20newsgroups()print(len(news.data))
示例输出:
go
11314
说明:
kotlin
news.data:文本序列(每个元素是一篇文章)news.target:文章所属的新闻组类别news.target_names:类别名称
在该数据集中,每一篇文章都可以看作一个文本序列。
二、序列特征表示
1、基本概念
机器学习模型通常不能直接处理文本或符号序列,因此需要将序列转换为数值表示。
常见的方法是将每个元素编码为整数或向量,例如:
javascript
"I" → 1"love" → 2"AI" → 3
这样,一个序列就可以表示为:
cs
[1, 2, 3]
如果一个数据集中有 n 个序列,每个序列长度为 m,这些序列就可以组成一个矩阵:
cs
X =[ [1, 2, 3], [4, 5, 6], ...]
矩阵维度通常表示为:
go
(n_sequences, sequence_length)
在实际应用中,序列长度通常会通过:
• 截断(truncation)
• 填充(padding)
进行统一处理。
在 Scikit-Learn 中,文本序列通常需要通过 CountVectorizer 或 TfidfVectorizer 等方法转换为数值特征矩阵。
python
from sklearn.feature_extraction.text import TfidfVectorizer
vectorizer = TfidfVectorizer()X = vectorizer.fit_transform(news.data)print(X.shape)
示例输出:
go
(11314, 130000+)
说明:
• 每一行表示一篇文章
• 每一列表示一个词语特征
2、简单示例
例如:
css
["I", "love", "AI"]
可以转换为:
cs
[1, 2, 3]
如果统一序列长度为 5,则可以表示为:
cs
[1, 2, 3, 0, 0]
其中:
css
0 → padding
三、目标值(标签)
1、基本概念
在许多序列任务中,每个序列通常对应一个目标值或标签。
例如:
• 文本分类
• 情感分析
• 语音识别
标签数组通常记为 y,其结构通常为:
go
(n_sequences,)
即,每个序列对应一个标签。
2、简单示例
假设我们进行情感分类:
javascript
"I love AI" → positive"AI is difficult" → negative
可以编码为:
ini
y = [1, 0]
其中:
go
1 → positive0 → negative
3、20 Newsgroups 数据集示例
在 20 Newsgroups 数据集中,每篇文章都对应一个类别标签:
apache
print(news.target[:5])
示例输出:
cs
[7 4 4 1 14]
类别名称可以通过:
apache
print(news.target_names[news.target[0]])
例如:
go
rec.autos
因此在该数据集中:
css
X → 文本特征矩阵y → 新闻组类别
四、特征名称
在序列数据中,元素通常来自一个词汇表(vocabulary)。
词汇表可以看作是一种特征名称集合:
css
["I", "love", "AI", "machine", "learning"]
在数值编码之后,这些词通常与整数 ID 对应:
css
1 → I2 → love3 → AI
这种映射关系有助于解释序列数据的含义。实际编码通常由词汇表(vocabulary)自动分配。
五、数据说明
1、基本概念
许多序列数据集还会提供背景说明信息,例如:
• 数据来源
• 数据规模
• 词汇表大小
• 数据采集方式
这些信息可以帮助理解数据的背景和用途。
2、示例
例如:
数据来源:社交媒体评论
样本数量:50000
词汇表大小:20000
这些信息通常会记录在数据集说明文档中。
六、序列数据集结构关系
一个典型的序列数据集可以表示为:
css
序列数据集│├── 序列数据 S│ └── 每一行表示一个序列│├── 数值特征矩阵 X│ └── 序列转换后的数值表示(例如词袋或 TF-IDF)│├── 标签数组 y(可选)│├── 词汇表 / 特征名称(可选)│└── 数据说明
这种结构描述了序列元素之间的顺序关系,并为模型提供可计算的数值表示。
📘 小结
序列数据集的核心特点是样本内部存在明确的顺序结构。一个序列通常由多个按顺序排列的元素组成,在机器学习中需要将这些元素转换为数值表示,从而形成序列特征矩阵。在许多任务中,每个序列还可能对应一个标签,用于完成分类或预测任务。理解序列数据的结构,是处理文本、语音以及行为序列等问题的重要基础。

"点赞有美意,赞赏是鼓励"