文本分类 决策树 python_NLTK学习笔记(六):利用机器学习进行文本分类

关于分类文本,有三个问题

怎么识别出文本中用于明显分类的特征

怎么构建自动分类文本的模型

相关的语言知识

按照这个思路,博主进行了艰苦学习(手动捂脸。。)

一、监督式分类:建立在训练语料基础上的分类

训练过程中,特征提取器将输入转化为特征集,并且记录对应的正确分类。生成模型。预测过程中,未见过的输入被转换特征集,通过模型产生预测标签。

特征提取器和朴素贝叶斯分类器

特征提取器返回字典,这个字典被称为特征集。然后利用

nltk自带的朴素贝叶斯分类器 NaiveBayesClassifier 生成分类器。并且可以用nltk.classify.accuracy(分类器,测试集) 测试准确度。

import nltk

from nltk.corpus import names

import random

def gender_features(word): #特征提取器

return {'last_letter':word[-1]} #特征集就是最后一个字母

names = [(name,'male') for name in names.words('male.txt')]+[(name,'female') for name in names.words('female.txt')]

random.shuffle(names)#将序列打乱

features = [(gender_features(n),g) for (n,g) in names]#返回对应的特征和标签

train,test = features[500:],features[:500] #训练集和测试集

classifier = nltk.NaiveBayesClassifier.train(train) #生成分类器

print('Neo is a',classifier.classify(gender_features('Neo')))#分类

print(nltk.classify.accuracy(classifier,test)) #测试准确度

classifier.show_most_informative_features(5)#得到似然比,检测对于哪些特征有用

当然,当我们训练大的语料库的时候,链表会占用很大内存。这时候nltk提供了:apply_features,会生成链表,但是不会在内存中存储所有对象。

from nltk.classify import apply_features

train_set = apply_features(gender_features,names[500:])

test_set = apply_features(gender_features,names[:500])

过拟合:当特征过多

当特征过多的时候(特征集的键值过多),会对一般化的新例子不起作用,称为过拟合。如果抉择特征集的大小,需要不停的测试,找到最吻合的特征集。

错误分析

为了使特征提取器准确度更高,一般将源数据分为两大部分,三小部分:

开发集:

训练集:负责开发

开发测试集:负责错误分析

测试集:负责最终评估

下面

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值