1. DictVectorizer - 字典特征提取
DictVectorizer
是一个用于将字典(如Python中的字典对象)转换为稀疏矩阵的工具,常用于处理类别型特征。
DictVectorizer(sparse=True, sort=True, dtype=<class 'numpy.float64'>)
- 参数:
sparse
:布尔值,默认值为True
。如果为True
,输出是稀疏矩阵;如果为False
,输出是密集的Numpy数组。sort
当 sort=True 时,特征名称按字母顺序排序。
当 sort=False 时,特征名称的顺序是其在字典中首次出现的顺序。dtype
:输出数据类型,默认为numpy.float64
。
2. CountVectorizer - 文本特征提取
CountVectorizer
是一种用于将文本数据转换为词频向量的工具。
- 主要参数:
max_df
:浮点数或整数,表示在文档中出现频率超过这个比例(浮点数)或超过这个绝对次数(整数)的词语将被忽略,默认值为1.0
。min_df
:浮点数或整数,表示在文档中出现频率低于这个比例(浮点数)或低于这个绝对次数(整数)的词语将被忽略,默认值为1
。max_features
:整数,选择出现频率最高的max_features
个特征。stop_words
:字符串或列表,指定忽略的停用词,可以选择'english'
或自定义停用词列表。ngram_range
:元组,表示词组的范围,如(1, 2)
表示一元词和二元词。binary
:布尔值,是否只考虑词是否出现(即词频为1还是0),默认值为False
。
from sklearn.feature_extraction.text import CountVectorizer
# 示例文本数据
corpus = [
'This is the first document.',
'This document is the second document.',
'And this is the third one.',
'Is this the first document?',
]
# 初始化CountVectorizer
vectorizer = CountVectorizer(stop_words=["you","this"])
# 转换为词频向量
X = vectorizer.fit_transform(corpus)#得到稀疏矩阵
# 输出特征名称和词频向量
print(vectorizer.get_feature_names_out())
print(X.toarray())#转换为矩阵
print(X)
结果:
['and' 'document' 'first' 'is' 'one' 'second' 'the' 'third']
[[0 1 1 1 0 0 1 0]
[0 2 0 1 0 1 1 0]
[1 0 0 1 1 0 1 1]
[0 1 1 1 0 0 1 0]]
(0, 3) 1
(0, 6) 1
(0, 2) 1
(0, 1) 1
(1, 3) 1
(1, 6) 1
(1, 1) 2
(1, 5) 1
(2, 3) 1
(2, 6) 1
(2, 0) 1
(2, 7) 1
(2, 4) 1
(3, 3) 1
(3, 6) 1
(3, 2) 1
(3, 1) 1
2.1 中文文本提取
jieba
是一个广泛使用的中文分词库,适用于中文文本处理和特征提取。jieba
提供了高效的中文分词功能,可以帮助将中文文本转换为词语列表,从而用于机器学习模型和文本分析。
安装 jieba
你可以通过以下命令安装 jieba
:
pip install jieba
基本用法
以下是一些使用 jieba
进行中文文本提取的常见操作示例:
1. 基础分词
import jieba
# 示例文本
text = "我爱自然语言处理"
# 使用jieba进行分词
words = jieba.cut(text)
# 输出分词结果
print("/ ".join(words))
2. 精确模式和全模式
- 精确模式:试图将句子最精确地切开,适合文本分析。
- 全模式:将句子中所有可能的词语都找出来,适合用于词云展示等。
import jieba
# 示例文本
text = "我爱自然语言处理"
# 精确模式
words = jieba.cut(text, cut_all=False)
print("精确模式: " + "/ ".join(words))
# 全模式
words = jieba.cut(text, cut_all=True)
print("全模式: " + "/ ".join(words))
结果:
精确模式: 我/ 爱/ 自然语言/ 处理
全模式: 我/ 爱/ 自然/ 自然语言/ 语言/ 处理
3. 关键词提取
jieba
还提供了关键词提取功能,基于 TF-IDF 算法或者 TextRank 算法。需要额外安装 jieba
的 jieba.analyse
模块。
import jieba.analyse
# 示例文本
text = "我爱自然语言处理。自然语言处理是计算机科学领域和人工智能领域中的一个重要方向。"
# 提取关键词
keywords = jieba.analyse.extract_tags(text, topK=5, withWeight=False)
print("关键词: " + "/ ".join(keywords))
结果:
关键词: 自然语言/ 领域/ 处理/ 计算机科学/ 人工智能
4. 自定义词典
如果你有一些专有名词或者行业术语,jieba
允许你使用自定义词典来提高分词的准确性。
import jieba
# 加载自定义词典
jieba.load_userdict('userdict.txt')
# 示例文本
text = "我在腾讯工作"
# 使用自定义词典进行分词
words = jieba.cut(text)
print("/ ".join(words))
自定义词典 userdict.txt
的格式如下:
腾讯 10 n
其中,每行包含一个词汇,词汇后面的数字表示词频(可选),词性(可选)。
3. TfidfVectorizer - TF-IDF文本特征提取
TfidfVectorizer
用于计算词语的TF-IDF(词频-逆文档频率)特征,衡量词语在文档中的重要性。
TfidfVectorizer
是 scikit-learn
提供的一个工具,用于将文本数据转换为 TF-IDF 特征矩阵。TF-IDF(Term Frequency-Inverse Document Frequency)是一种常用的文本特征表示方法,用于衡量词语在文档中的重要性。下面是 TfidfVectorizer
的工作原理及其详细解释:
TF-IDF 原理
-
Term Frequency (TF)
-
定义:词频,衡量词语在某个文档中出现的频率。
-
解释:词频越高,说明该词在该文档中越重要。
-
-
Inverse Document Frequency (IDF)
-
定义:逆文档频率,衡量词语在所有文档中出现的稀有程度。
-
解释:出现频率较低的词语(即少数文档中出现的词语)会有较高的 IDF 值,从而提高其在文档中的权重。
-
-
TF-IDF Score
-
定义:词语在文档中的 TF-IDF 权重,结合了词频和逆文档频率。
-
解释:通过 TF-IDF 评分,重要的词语(即在该文档中频繁出现而在其他文档中不常见的词语)会得到较高的权重。
-
-
主要参数:
max_df
:同CountVectorizer
。min_df
:同CountVectorizer
。max_features
:同CountVectorizer
。stop_words
:同CountVectorizer
。ngram_range
:同CountVectorizer
。use_idf
:布尔值,是否启用逆文档频率(IDF)加权,默认值为True
。smooth_idf
:布尔值,是否加1平滑IDF,默认值为True
。norm
:字符串,表示归一化方法,'l1'
或'l2'
,默认值为'l2'
。
-
适用场景:适用于文本数据中特征词重要性分析,更适合文本分类任务。
代码示列:
from sklearn.feature_extraction.text import TfidfVectorizer
# 示例文本数据
corpus = [
'This is the first document.',
'This document is the second document.',
'And this is the third one.',
'Is this the first document?',
]
# 初始化TfidfVectorizer
vectorizer = TfidfVectorizer()
# 转换为TF-IDF特征向量
X = vectorizer.fit_transform(corpus)
# 输出特征名称和TF-IDF向量
print(vectorizer.get_feature_names_out())
print(X.toarray())
结果:
['and' 'document' 'first' 'is' 'one' 'second' 'the' 'third' 'this']
[[0. 0.46979139 0.58028582 0.38408524 0. 0.
0.38408524 0. 0.38408524]
[0. 0.6876236 0. 0.28108867 0. 0.53864762
0.28108867 0. 0.28108867]
[0.51184851 0. 0. 0.26710379 0.51184851 0.
0.26710379 0.51184851 0.26710379]
[0. 0.46979139 0.58028582 0.38408524 0. 0.
0.38408524 0. 0.38408524]]
4. MinMaxScaler - 归一化
MinMaxScaler
将特征缩放到给定的最小值和最大值之间,通常是缩放到 [0, 1]
。
MinMaxScaler 是一种常用的数据预处理方法,其主要目的是将数据的特征缩放到指定的范围(通常是 ([0, 1]))。这样做的目的是为了消除不同特征值之间量级上的差异,从而避免因不同特征值的范围差异对模型训练产生不良影响。
MinMaxScaler的数学原理
假设我们有一个一维的特征向量 (X = {x_1, x_2, \dots, x_n}),其中每个 (x_i) 表示第 (i) 个样本的特征值。
1. 计算原始数据的最小值和最大值
首先,找到特征向量 (X) 中的最小值 (X_{\text{min}}) 和最大值 (X_{\text{max}}),即: