自然语言处理实践(新闻文本分类)——task03

基于机器学习的文本分类

  • TF-IDF
    TF-IDF算法是一种在文本挖掘中广泛使用的特征向量化方法,它可以体现一个文档中词语在语料库中的重要程度。

TF-IDF实践步骤,也即是一般的文本处理和模型训练步骤:

1.获取原始文本内容信息。

2.转换成纯小写,按空格把文章分成独立的词组成的list。

3.去除噪音符号: [""","=","\","/",":","-","(",")",",",".","\n"]等

4.去除停用词

5.提取词干,把相近的词转换为标准形式,比如把文章中的go,going,went,goes统一成go

6.wordcount,统计每个词出现的次数,去掉出现次数较少的词,比如在一百篇文档中,只出现了1~2次的词,显然是没有意义的。

7.训练IDF模型

8.对输入的每篇测试文章计算其TFIDF向量,然后可以利用TFIDF向量求文章之间的相似度(比如用欧拉距离,余弦相似度,Jaccard系数等方法)。
在这里插入图片描述
Fit_transform学习到一个字典,并返回Document-term的矩阵(即词典中的词在该文档中出现的频次)

在这里插入图片描述
Fit步骤学习idf vector,一个全局的词权重_idf_diag。输入的X是一个稀疏矩阵,行是样本数,列是特征数。

Transform步骤是把X这个计数矩阵转换成tf-idf表示, X = X * self._idf_diag,然后进行归一化

sklearn中有TF-IDF的库函数。

TfidfVectorizer(analyzer='word', binary=False, decode_error='strict',
        dtype=<class 'numpy.int64'>, encoding='utf-8', input='content',
        lowercase=True, max_df=1.0, max_features=None, min_df=1,
        ngram_range=(1, 1), norm='l2', preprocessor=None, smooth_idf=True,
        stop_words=None, strip_accents=None, sublinear_tf=False,
        token_pattern='(?u)\\b\\w\\w+\\b', tokenizer=None, use_idf=True,
        vocabulary=None)

关于参数:

input:string{‘filename’, ‘file’, ‘content’}

如果是'filename',序列作为参数传递给拟合器,预计为文件名列表,这需要读取原始内容进行分析

如果是'file',序列项目必须有一个”read“的方法(类似文件的对象),被调用作为获取内存中的字节数

否则,输入预计为序列串,或字节数据项都预计可直接进行分析。

encoding:string, ‘utf-8’by default

如果给出要解析的字节或文件,此编码将用于解码

decode_error: {‘strict’, ‘ignore’, ‘replace’}

如果一个给出的字节序列包含的字符不是给定的编码,指示应该如何去做。默认情况下,它是'strict',这意味着的UnicodeDecodeError将提高,其他值是'ignore'和'replace'

strip_accents: {‘ascii’, ‘unicode’, None}

在预处理步骤中去除编码规则(accents),”ASCII码“是一种快速的方法,仅适用于有一个直接的ASCII字符映射,"unicode"是一个稍慢一些的方法,None(默认)什么都不做

analyzer:string,{‘word’, ‘char’} or callable

定义特征为词(word)或n-gram字符,如果传递给它的调用被用于抽取未处理输入源文件的特征序列

preprocessor:callable or None(default)

当保留令牌和”n-gram“生成步骤时,覆盖预处理(字符串变换)的阶段

tokenizer:callable or None(default)

当保留预处理和n-gram生成步骤时,覆盖字符串令牌步骤

ngram_range: tuple(min_n, max_n)

要提取的n-gram的n-values的下限和上限范围,在min_n <= n <= max_n区间的n的全部值

stop_words:string {‘english’}, list, or None(default)

如果未english,用于英语内建的停用词列表

如果未list,该列表被假定为包含停用词,列表中的所有词都将从令牌中删除

如果None,不使用停用词。max_df可以被设置为范围[0.7, 1.0)的值,基于内部预料词频来自动检测和过滤停用词

lowercase:boolean, default True

在令牌标记前转换所有的字符为小写

token_pattern:string

正则表达式显示了”token“的构成,仅当analyzer == ‘word’时才被使用。两个或多个字母数字字符的正则表达式(标点符号完全被忽略,始终被视为一个标记分隔符)。

max_df: float in range [0.0, 1.0] or int, optional, 1.0 by default

当构建词汇表时,严格忽略高于给出阈值的文档频率的词条,语料指定的停用词。如果是浮点值,该参数代表文档的比例,整型绝对计数值,如果词汇表不为None,此参数被忽略。

min_df:float in range [0.0, 1.0] or int, optional, 1.0 by default

当构建词汇表时,严格忽略低于给出阈值的文档频率的词条,语料指定的停用词。如果是浮点值,该参数代表文档的比例,整型绝对计数值,如果词汇表不为None,此参数被忽略。

max_features: optional, None by default

如果不为None,构建一个词汇表,仅考虑max_features--按语料词频排序,如果词汇表不为None,这个参数被忽略

vocabulary:Mapping or iterable, optional

也是一个映射(Map)(例如,字典),其中键是词条而值是在特征矩阵中索引,或词条中的迭代器。如果没有给出,词汇表被确定来自输入文件。在映射中索引不能有重复,并且不能在0到最大索引值之间有间断。

binary:boolean, False by default

如果未True,所有非零计数被设置为1,这对于离散概率模型是有用的,建立二元事件模型,而不是整型计数

dtype:type, optional

通过fit_transform()或transform()返回矩阵的类型

norm:‘l1’, ‘l2’, or None,optional

范数用于标准化词条向量。None为不归一化

use_idf:boolean, optional

启动inverse-document-frequency重新计算权重

smooth_idf:boolean,optional

通过加1到文档频率平滑idf权重,为防止除零,加入一个额外的文档

sublinear_tf:boolean, optional

应用线性缩放TF,例如,使用1+log(tf)覆盖tf

一些调整

  1. 参数设置为tfidf = TfidfVectorizer(
    ngram_range=(1,2)
    ,max_df= 0.9
    ,min_df= 0.01
    ,sublinear_tf=True)
  2. 将数据集全部导入。
  3. 分类器用了三个,logic、sgd、ridge。其中效果最好的是logic。fi分数最高,预测结果准确率也最高。
    在这里插入图片描述
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值