sklearn中fit_transform,fit,transform区别和作用详解

本篇是因为写的好所以转载。感谢原作者啊噗不是阿婆主

原文链接:https://blog.csdn.net/weixin_38278334/article/details/82971752

写在前面

    fit和transform没有任何关系,仅仅是数据处理的两个不同环节,之所以出来fit_transform这个函数名,仅仅是为了写代码方便,会高效一点。

    sklearn里的封装好的各种算法使用前都要fit,fit相对于整个代码而言,为后续API服务。fit之后,然后调用各种API方法,transform只是其中一个API方法,所以当你调用transform之外的方法,也必须要先fit。

    fit原义指的是安装、使适合的意思,其实有点train的含义,但是和train不同的是,它并不是一个训练的过程,而是一个适配的过程,过程都是确定的,最后得到一个可用于转换的有价值的信息。

fit,transform,fit_transform常用情况分为两大类
1. 数据预处理中方法

    fit(): Method calculates the parameters μ and σ and saves them as internal objects.
    解释:简单来说,就是求得训练集X的均值,方差,最大值,最小值,这些训练集X固有的属性。

    transform(): Method using these calculated parameters apply the transformation to a particular dataset.
    解释:在fit的基础上,进行标准化,降维,归一化等操作(看具体用的是哪个工具,如PCA,StandardScaler等)。

    fit_transform(): joins the fit() and transform() method for transformation of dataset.
    解释:fit_transform是fit和transform的组合,既包括了训练又包含了转换。
    transform()和fit_transform()二者的功能都是对数据进行某种统一处理(比如标准化~N(0,1),将数据缩放(映射)到某个固定区间,归一化,正则化等)

    fit_transform(trainData)对部分数据先拟合fit,找到该part的整体指标,如均值、方差、最大值最小值等等(根据具体转换的目的),然后对该trainData进行转换transform,从而实现数据的标准化、归一化等等。

根据对之前部分trainData进行fit的整体指标,对剩余的数据(testData)使用同样的均值、方差、最大最小值等指标进行转换transform(testData),从而保证train、test处理方式相同。所以,一般都是这么用:

from sklearn.preprocessing import StandardScaler
sc = StandardScaler()
sc.fit_tranform(X_train)
sc.tranform(X_test)

2. 各种算法的fit,transform方法

    举两个例子:

1. CountVectorizer举例,sklearn的CountVectorizer库是根据输入数据获取词频矩阵(稀疏矩阵)

  •     fit(raw_documents) :根据CountVectorizer参数规则进行操作,比如滤除停用词等,拟合原始数据,生成文档中有价值的词汇表;

  • transform(raw_documents):使用符合fit的词汇表或提供给构造函数的词汇表,从原始文本文档中提取词频,转换成词频矩阵。

  • fit_transform(raw_documents, y=None):学习词汇词典并返回术语 - 文档矩阵(稀疏矩阵)。

2. TfidfTransformer举例,TF-IDF(Term frequency * Inverse Doc Frequency)词权重

在较低的文本语料库中,一些词非常常见(例如,英文中的“the”,“a”,“is”),因此很少带有文档实际内容的有用信息。如果我们将单纯的计数数据直接喂给分类器,那些频繁出现的词会掩盖那些很少出现但是更有意义的词的频率。

为了重新计算特征的计数权重,以便转化为适合分类器使用的浮点值,通常都会进行tf-idf转换。词重要性度量一般使用文本挖掘的启发式方法:TF-IDF。IDF,逆向文件频率(inverse document frequency)是一个词语普遍重要性的度量(不同词重要性的度量)。

  •     fit(raw_documents, y=None):根据训练集生成词典和逆文档词频 由fit方法计算的每个特征的权重存储在model的idf_属性中。

  • transform(raw_documents, copy=True):使用fit(或fit_transform)学习的词汇和文档频率(df),将文档转换为文档 - 词矩阵。返回稀疏矩阵,[n_samples, n_features],即,Tf-idf加权文档矩阵(Tf-idf-weighted document-term matrix)。

总结:

上述第一类和第二类等价。算法中的fit方法的应用等价于第一类的fit,只不过产生的结果意义不同(不是均值等统计意义,而是根据算法本身拟合获取不同信息以备后用),transform根据fit的结果转换成目标形式,具体需深究代码实现。


Note:

  •     必须先用fit_transform(trainData),之后再transform(testData)
  •     如果直接transform(testData),程序会报错
  •     如果fit_transfrom(trainData)后,使用fit_transform(testData)而不transform(testData),虽然也能归一化,但是两个结果不是在同一个“标准”下的,具有明显差异。(一定要避免这种情况)

 

 

 

  • 5
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python有多种方法可以实现简单的文本相似度分析操作,下面将详细介绍一种常用的方法。 一、准备工作: 1. 导入必要的库:从sklearn导入CountVectorizer和cosine_similarity。 2. 定义文本列表:将要比较的文本存储在一个列表。 二、数据预处理: 1. 实例化CountVectorizer:使用CountVectorizer将文本转换为词频矩阵,每个文本的每个词都是一个特征。 2. 计算词频矩阵:调用fit_transform方法将文本列表作为参数传递给CountVectorizer实例,得到词频矩阵。 三、相似度分析: 1. 计算余弦相似度矩阵:将词频矩阵作为参数传递给cosine_similarity函数,得到文本之间的余弦相似度矩阵。 四、结果解释: 1. 解释余弦相似度矩阵:余弦相似度矩阵是一个对称矩阵,对角线上的元素都是1,表示文本与自身的相似度为最大值1;非对角线上的元素表示两个不同文本之间的相似度,值越大表示相似度越高。 示例代码如下: ```python from sklearn.feature_extraction.text import CountVectorizer from sklearn.metrics.pairwise import cosine_similarity # 定义文本列表 texts = ['这是一个文本。', '这是另一个文本。', '这是一个不同的文本。'] # 实例化CountVectorizer并计算词频矩阵 vectorizer = CountVectorizer() word_count_matrix = vectorizer.fit_transform(texts) # 计算余弦相似度矩阵 cosine_sim_matrix = cosine_similarity(word_count_matrix, word_count_matrix) # 解释余弦相似度矩阵 for i in range(len(texts)): for j in range(len(texts)): print(f"文本{i+1}与文本{j+1}的相似度为:{cosine_sim_matrix[i][j]}") ``` 这个示例,我们使用CountVectorizer将文本转换为词频矩阵,然后使用cosine_similarity计算余弦相似度矩阵。最后,我们打印出每个文本与其他文本的相似度。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值