IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> 机器学习笔记-TF-IDF统计方法 -> 正文阅读

[人工智能]机器学习笔记-TF-IDF统计方法

机器学习笔记-TF-IDF统计方法

TF-IDF统计方法

简介

TF-IDF是一种统计方法,用以评估一字词对于一个文件集或一个语料库中的其中一份文件的重要程度。字词的重要性随着它在文件中出现的次数成正比增加,但同时会随着它在语料库中出现的频率成反比下降。

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

TFIDF实际上是:
T F ? I D F TF * IDF TF?IDF
TF为词频(Term Frequency),指的是某一个给定的词语在该文件中出现的频率。这个数字是对词数(term count)的归一化,以防止它偏向长的文件。

IDF为逆向文件频率(Inverse Document Frequency),某一特定词语的IDF,可以由总文件数目除以包含该词语之文件的数目,再将得到的商取以10为底的对数得到:
i d f ( t ) = l o g [ ( 1 + n ) / ( 1 + d f ( t ) ) ] + 1 idf(t) = log[(1+n)/(1+df(t))] + 1 idf(t)=log[(1+n)/(1+df(t))]+1
某一特定文件内的高词语频率,以及该词语在整个文件集合中的低文件频率,可以产生出高权重的TF-IDF。因此,TF-IDF倾向于过滤掉常见的词语,保留重要的词语。

通过scikit-learn使用TF-IDF方法

TfidTransformer

在scikit-learn中,TFIDF算法的归一化由TfidfTransformer类实现。它可以将一个词频矩阵以归一化后的tf或tf-idf形式呈现。

>>> from sklearn.feature_extraction.text import TfidfTransformer
>>> transformer = TfidfTransformer(smooth_idf=False)
>>> transformer
TfidfTransformer(smooth_idf=False) 

如果smooth_idf为True,则idf公式的分母+1,否则不加。

fit(X[, y])

# 得到idf向量(global term weights).

fit_transform(X[, y])

# Fit to data, then transform it.

CountVectorize

CountVectorizer是属于常见的特征数值计算类,是一个文本特征提取方法。对于每一个训练文本,它只考虑每种词汇在该训练文本中出现的频率。

CountVectorizer会将文本中的词语转换为词频矩阵,它通过fit_transform函数计算各个词语出现的次数。

>>> from sklearn.feature_extraction.text import CountVectorizer
>>> vectorizer = CountVectorizer() # 实例化vectorizer
>>> vectorizer
CountVectorizer()

用它来对一个由文本文档组成的简约文集进行标记和词频统计:

>>> corpus = [
...     'This is the first document.',
...     'This is the second second document.',
...     'And the third one.',
...     'Is this the first document?',
... ]
>>> X = vectorizer.fit_transform(corpus) # 使用fit_transform得到词频矩阵(特征向量)
>>> X
<4x9 sparse matrix of type '<... 'numpy.int64'>'
    with 19 stored elements in Compressed Sparse ... format>
>>> analyze = vectorizer.build_analyzer() # 对其中的词语进行分析
>>> analyze("This is a text document to analyze.") == (
...     ['this', 'is', 'text', 'document', 'to', 'analyze'])
True

在拟合过程中,分析器会找到并分配一个唯一的整数索引给每个词语,该索引对应于所得矩阵中的一列。可以按以下方式检索这些列的解释:

>>> vectorizer.get_feature_names() == (
...     ['and', 'document', 'first', 'is', 'one',
...      'second', 'the', 'third', 'this'])
True

>>> X.toarray()
array([[0, 1, 1, 1, 0, 0, 1, 0, 1],
       [0, 1, 0, 1, 0, 2, 1, 0, 1],
       [1, 0, 0, 0, 1, 0, 1, 1, 0],
       [0, 1, 1, 1, 0, 0, 1, 0, 1]]...)

查看语料库大小:

vocab = vectorizer.vocabulary_
vocab_len = len(vocab)

将来在对transform方法进行调用时,训练语料库中未出现的单词将被完全忽略:

>>> vectorizer.transform(['Something completely new.']).toarray() # fit过程已经根据喂进去的数据训练好了
array([[0, 0, 0, 0, 0, 0, 0, 0, 0]]...)

在前一语料库中,第一个文档和最后一个文档恰好具有相同的词,因此被编码为相等的向量。特别是,我们失去了最后一个文档是疑问形式的信息。为了保留本地指令信息,除了提取单个词之外,我们还可以提取 2-grams 的单词:

>>> bigram_vectorizer = CountVectorizer(ngram_range=(1, 2),
...                   token_pattern=r'\b\w+\b', min_df=1)
>>> analyze = bigram_vectorizer.build_analyzer()
>>> analyze('Bi-grams are cool!') == (
...   ['bi', 'grams', 'are', 'cool', 'bi grams', 'grams are', 'are cool'])
True

TfidfVectorizer

TfidfVectorizer将原始文档集合转换为TF-IDF特性的矩阵,相当于CountVectorizer 后面跟着TfidfTransformer。使用方法类似CountVectorizer。

def transfer2TfidfVector():
    '''
        使用TfidfVectorizer方法提取特征向量,并将向量化转换器应用到新的测试数据

        TfidfVectorizer()方法的参数设置:
        min_df = 2,stop_words="english"

        test_data - 需要转换的原数据

        返回值:
        transfer_test_data - 二维数组ndarray
        '''

    test_data = ['Once again, to not believe in God is different than saying\n>I BELIEVE that God does not exist. I still maintain the position, even\n>after reading the FAQs, that strong atheism requires faith.\n>\n \nNo it in the way it is usually used. In my view, you are saying here that\ndriving a car requires faith that the car drives.\n \n...']
    transfer_test_data = None
    
    vectorizer = TfidfVectorizer(min_df = 2, stop_words = "english") 
    '''
    stop_words_ 被忽略的术语
    min_df	float in range [0.0, 1.0] or int, default=1
	在构建词汇表时,忽略那些文档频率严格低于给定阈值的术语。这个值在文献中也称为cut-off。如果是浮点数,则该参数表示文档的比例,整数	   绝对计数。如果词汇表不是None,则忽略此参数。
	'''
    vectorizer.fit(X)
    transfer_test_data = vectorizer.transform(test_data).toarray()

    return transfer_test_data
  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2021-10-20 12:29:39  更:2021-10-20 12:30:50 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/27 8:33:20-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码