人工智能学习(22 机器学习:02-特征工程和文本特征提取:07_tf-df分析问题

接下来我们讲解TF-IDF,在讲解之前我们先来看一个东西:
在这里插入图片描述
文本特征抽取最大的一个用途就是文本分类,文本分类也是使用一些算法去做,但是前提是西药我们把特征提取出来。如上,左图中出现了共享,车等等其他词语。根据这些词去分辨文章的类型,如果我们人去看,肯定是很直接的。

图中给出的是词语占比,我们之前统计是按词的次数进行统计的,现在的称为朴素贝叶斯(tfidf),他是什么意思呢?其分为两个部分:
Tf(term frequency-词的频率):他依旧会统计词出现的次数,

Idf(inverse docunment frequency-逆文档频率):log(总文档数量/该词出现的文档数量),一些常用的词汇,如明天,你好,我们这样的,其出现的文档数量肯定就较大,但是总文档数量是固定的,所以log值越小,即Idf越小。他的意义是什么呢?其实衡量的是一个词在一篇文章的重要性。

根据上面的分析,我们通过Idf就能知道哪些词,是比较重要的,对文章的分类比较有决定性的意义。(注意 T F I D F = T f I d f \color{#FF0000}{TFIDF值=Tf*Idf}

现在我们再来详细讲解一下TF-IDF:TF-IDF的主要思想是:如果某个词或短语在一篇文章中出现的概率高,并且在其他文章中很少出现,则认为此词或者短语具有很好的类别区分能力,适合用来分类。

TF-IDF作用:用以评估一字词对于一个文件集或一个语料库中的其中一份文件的 \color{#FF0000}{重要程度}

下面是他的用法:

类:sklearn.feature_extraction.text.TfidfVectorizer

	TfidfVectorizer(stop_words=None,…)
	返回词的权重矩阵
	
	 	 TfidfVectorizer.fit_transform(X,y)       
		 X:文本或者包含文本字符串的可迭代对象
		 返回值:返回sparse矩阵

    	TfidfVectorizer.inverse_transform(X)
   		 X:array数组或者sparse矩阵
    	返回值:转换之前数据格式
    	
	    TfidfVectorizer.get_feature_names()
	    返回值:单词列表

下面我做一个试验,编写代码如下:

from sklearn.feature_extraction.text import CountVectorizer,TfidfVectorizer
def cutword():
    con1 = jieba.cut("今天很残酷,明天更残酷,后天很美好,但绝对大部分是死在明天晚上,所以每个人不要放弃今天。")

    con2 = jieba.cut("我们看到的从很远星系来的光是在几百万年之前发出的,这样当我们看到宇宙时,我们是在看它的过去。")

    con3 = jieba.cut("如果只用一种方式了解某样事物,你就不会真正了解它。了解事物真正含义的秘密取决于如何将其与我们所了解的事物相联系。")

    #转化成一个列表
    conren1 = list(con1)

    conren2 = list(con2)

    conren3 = list(con3)

    c1 = ' '.join(conren1)
    c2 = ' '.join(conren2)
    c3 = ' '.join(conren3)

    return c1,c2,c3

def tfidfvec():
    """
    :return: None
    """
    c1,c2,c3 = cutword()
    print(c1,c2,c3)

    tf = TfidfVectorizer()

    data = tf.fit_transform([c1,c2,c3])
    # print(data)

    print(tf.get_feature_names())
    print(data.toarray())


if __name__ == '__main__':
	tfidfvec()

运行程序之后打印如下

['一种', '不会', '不要', '之前', '了解', '事物', '今天', '光是在', '几百万年', '发出', '取决于', '只用', '后天', '含义', '大部分', '如何', '如果', '宇宙', '我们', '所以', '放弃', '方式', '明天', '星系', '晚上', '某样', '残酷', '每个', '看到', '真正', '秘密', '绝对', '美好', '联系', '过去', '这样']
--------------------------------------------------------------------------
[[0.         0.         0.21821789 0.         0.         0.
  0.43643578 0.         0.         0.         0.         0.
  0.21821789 0.         0.21821789 0.         0.         0.
  0.         0.21821789 0.21821789 0.         0.43643578 0.
  0.21821789 0.         0.43643578 0.21821789 0.         0.
  0.         0.21821789 0.21821789 0.         0.         0.        ]
--------------------------------------------------------------------------
 [0.         0.         0.         0.2410822  0.         0.
  0.         0.2410822  0.2410822  0.2410822  0.         0.
  0.         0.         0.         0.         0.         0.2410822
  0.55004769 0.         0.         0.         0.         0.2410822
  0.         0.         0.         0.         0.48216441 0.
  0.         0.         0.         0.         0.2410822  0.2410822 ]
--------------------------------------------------------------------------
 [0.15698297 0.15698297 0.         0.         0.62793188 0.47094891
  0.         0.         0.         0.         0.15698297 0.15698297
  0.         0.15698297 0.         0.15698297 0.15698297 0.
  0.1193896  0.         0.         0.15698297 0.         0.
  0.         0.15698297 0.         0.         0.         0.31396594
  0.15698297 0.         0.         0.15698297 0.         0.        ]]

从打印信息中,我们可以直观的看到每个词在这片文章中的重要程度(重要性),以后我们再处理过程中。可以进行排序,然后根据其TF-IDF对文章进行分类。

注意:( T F I D F = T f I d f \color{#FF0000}{TFIDF值=Tf*Idf} ),为什么药用到它呢?因为TfidfVectorizer是机器学习算法的重要依据

猜你喜欢

转载自blog.csdn.net/weixin_43013761/article/details/89598890
今日推荐