sklearn.feature_extraction.TfidfTransformer¶
class sklearn.feature_extraction.text.TfidfTransformer(*, norm='l2', use_idf=True, smooth_idf=True, sublinear_tf=False)
将计数矩阵转换为标准化的tf
或tf-idf
表示
Tf
表示词频,Tf -idf
表示词频乘以反文档频率。这是信息检索中常用的术语加权方案,在文档分类中也有很好的应用。
使用tf-idf
代替原始的目标频率发生的令牌在给定文档缩减的影响令牌经常发生在一个给定的语料库,因此经验不如特性发生在信息的一小部分训练语料库。
公式用于计算文档的tf-idf
任期t d在文档集 tf-idf(t, d) = tf(t, d) * idf(t)和计算 idf(t) = log [ n / df(t) ] + 1 (如果smooth_idf = False
),其中n是文档的文档集的总数和df的文档频率t (t);文档频率是文档集中包含t项的文档数量。在上式中对idf加“1”的效果是idf为零的项,即不会完全忽略在训练集中所有文档中出现的术语。(请注意,上面的idf公式不同于标准教科书中定义的idf(t) = log [ n / (df(t) + 1) ]。
如果smooth_idf = True
(默认),不断“1”添加到分子和分母idf的如果一个额外的文档被认为包含集合中的每一项完全一次,防止零分歧:idf(t) = log [ (1 + n) / (1 + df(t)) ] + 1
。
此外,计算tf和idf的公式取决于参数设置,对应于IR中使用的智能标记如下:
Tf默认为“n”(自然),当sublinear_tf=True
时为“l”(对数)。给定use_idf时,Idf为“t”,否则为“n”(none)。当norm='l2'
时归一化为" c " (cos)
,当norm=' none '
时为" n " (none)
。
在用户指南中阅读更多内容。
参数 | 说明 |
---|---|
norm | {‘l1’, ‘l2’}, default=’l2’ 每个输出行都有单位范数,可以是:* ' l2 ':向量元素的平方和为1。当应用l2范数时,两个向量之间的余弦相似度是它们的点积。*‘l1’:向量元素的绝对值之和为1。看到 preprocessing.normalize |
use_idf | bool, default=True 使inverse-document-frequency权重。 |
smooth_idf | bool, default=True 通过在文档频率上增加1来平滑idf权重,就好像在一个额外的文档中只包含集合中的每一个词一样。防止零分歧。 |
sublinear_tf | bool, default=False 应用次线性tf缩放,即将tf替换为1 + log(tf)。 |
属性 | 说明 |
---|---|
idf_ | array of shape (n_features) 反文档频率(IDF)向量;只有在 use_idf 为真时才定义。新版本0.20。 |
参考文献
Yates2011
R. Baeza-Yates and B. Ribeiro-Neto (2011). Modern Information Retrieval. Addison Wesley, pp. 68-74.
MRS2008
C.D. Manning, P. Raghavan and H. Schütze (2008). Introduction to Information Retrieval. Cambridge University Press, pp. 118-120.
示例
>>> from sklearn.feature_extraction.text import TfidfTransformer
>>> from sklearn.feature_extraction.text import CountVectorizer
>>> from sklearn.pipeline import Pipeline
>>> import numpy as np
>>> corpus = ['this is the first document',
... 'this document is the second document',
... 'and this is the third one',
... 'is this the first document']
>>> vocabulary = ['this', 'document', 'first', 'is', 'second', 'the',
... 'and', 'one']
>>> pipe = Pipeline([('count', CountVectorizer(vocabulary=vocabulary)),
... ('tfid', TfidfTransformer())]).fit(corpus)
>>> pipe['count'].transform(corpus).toarray()
array([[1, 1, 1, 1, 0, 1, 0, 0],
[1, 2, 0, 1, 1, 1, 0, 0],
[1, 0, 0, 1, 0, 1, 1, 1],
[1, 1, 1, 1, 0, 1, 0, 0]])
>>> pipe['tfid'].idf_
array([1. , 1.22314355, 1.51082562, 1. , 1.91629073,
1. , 1.91629073, 1.91629073])
>>> pipe.transform(corpus).shape
(4, 8)
方法
方法 | 说明 |
---|---|
fit (X[, y]) |
学习idf向量(全局项权重)。 |
fit_transform (X[, y]) |
适合数据,然后转换它。 |
get_params ([deep]) |
获取这个估计器的参数。 |
set_params (**params) |
设置的参数估计量。 |
transform (X[, copy]) |
将计数矩阵转换为tf或tf-idf表示 |
__init__(*, norm='l2', use_idf=True, smooth_idf=True, sublinear_tf=False)
初始化self. See 请参阅help(type(self))以获得准确的说明。
fit(X, y=None)
学习idf向量(全局项权重)。
fit_transform(X, y=None, **fit_params)
拟合数据,然后转换它。
使用可选参数fit_params将transformer与X和y匹配,并返回X的转换版本。
参数 | 说明 |
---|---|
X | {array-like, sparse matrix, dataframe} of shape (n_samples, n_features) |
y | ndarray of shape (n_samples,), default=None 目标的价值。 |
**fit_params | dict 其他合适的参数。 |
返回值 | 说明 |
---|---|
X_new | ndarray array of shape (n_samples, n_features_new) 改变数组。 |
get_params(deep=True)
获取这个估计器的参数。
参数 | 说明 |
---|---|
deep | bool, default=True 如果为真,将返回此估计器的参数以及包含的作为估计器的子对象。 |
返回值 | 说明 |
---|---|
params | mapping of string to any 参数名称映射到它们的值。 |
set_params(**params)
设置这个估计器的参数。
该方法适用于简单估计量和嵌套对象。后者具有形式为<component>_<parameter>
的参数,这样就让更新嵌套对象的每个样本成为了可能。
参数 | 说明 |
---|---|
**params | dict 估计器参数。 |
返回值 | 说明 |
---|---|
self | object 估计器实例。 |
transform(X, copy=True)
将计数矩阵转换为tf或tf-idf表示
参数 | 说明 |
---|---|
X | sparse matrix of (n_samples, n_features) 术语/标记计数的矩阵 |
返回值 | 说明 |
---|---|
vectors | sparse matrix of shape (n_samples, n_features) |