机器学习分析方法有哪些
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
机器学习分析方法有哪些
比如我有5000条商品评论,如果我要把这些评论分成积极和消
极两类。那我就可以先从里面选2000条评论,然后对这2000条数
据进行人工标注,把这2000条评论标为“积极”或“消极”。这
“积极”和“消极”就是类标签。
假设有1000条评论被标为“积极”,有1000条评论被标为“消极”。(两者数量相同对训练分类器是有用的,如果实际中数量不相同,应该减少和增加数据以使得它们数量相同)
特征就是分类对象所展现的部分特点,是实现分类的依据。我们经常会做出分类的行为,那我们依据些什么进行分类呢?
而在情感分类中,一般从“词”这个层次来选择特征。
比如这句话“手机非常好用!”,我给了它一个类标签“Positive”。里面有四个词(把感叹号也算上),“手机”,“非常”,“好用”,“!”。我可以认为这4个词都对分类产生了影响,都是分类的依据。也就是无论什么地方出现了这四个词的其中之一,文本都可以被分类为“积极”。这个是把所有词都作为分类特征。
同样的,对这句话,我也可以选择它的双词搭配(Bigrams)作为
特征。比如“手机非常”,“非常好用”,“好用!”这三个搭配作
为分类的特征。以此类推,三词搭配(Trigrams),四词搭配都是可
以被作为特征的。
特征降维说白了就是减少特征的数量。这有两个意义,一个是特征数量减少了之后可以加快算法计算的速度(数量少了当然计算就快了),另一个是如果用一定的方法选择信息量丰富的特征,可以减少
噪音,有效提高分类的准确率。
那要用什么方法来减少特征数量呢?答案是通过一定的统计方法
找到信息量丰富的特征。
统计方法包括:词频(TermFrequency)、文档频率(DocumentFrequency)、互信息(PointwiseMutualInformation)、信息熵(InformationEntropy)、卡方统计(Chi-Square)等等。
在情感分类中,用词频选择特征,也就是选在语料库中出现频率高的词。比如我可以选择语料库中词频最高的2000个词作为特征。
用文档频率选特征,是选在语料库的不同文档中出现频率最高的词。而其它三个,太高端冷艳,表示理解得还不清楚,暂且不表。。。
不过意思都是一样的,都是要通过某个统计方法选择信息量丰富的特征。特征可以是词,可以是词组合。
在使用分类算法进行分类之前,第一步是要把所有原始的语料文本转化为特征表示的形式。
还是以上面那句话做例子,“手机非常好用!”
如果在NLTK中,如果选择所有词作为特征,其形式是这样的:[{“手机”:True,“非常”:True,“好
用”:True,“!”:True},positive]
如果选择双词作为特征,其形式是这样的:[{“手机非
常”:True,“非常好用”:True,“好用!”:True},positive]
如果选择信息量丰富的词作为特征,其形式是这样的:[{“好用”:True},positive]
(NLTK需要使用字典和数组两个数据类型,True表示对应的元素是特征。至于为什么要用True这样的方式,我也不知道。。。反正
见到的例子都是这样的。。。有空再研究看是不是可以不这样的吧)
无论使用什么特征选择方法,其形式都是一样的。都是[{“特征1”:True,“特征2”:True,“特征N”:True,},类标签]
机器学习分类必须有数据给分类算法训练,这样才能得到一个(基于训练数据的)分类器。
有了分类器之后,就需要检测这个分类器的准确度。
图2:开发集和测试集(摘自《NaturalLanguageProcessingwithPython》)
一般来说,训练集的数量应该远大于测试集,这样分类算法才能找出里面的规律,构建出高效的分类器。
用回前面的例子。假设2000条已经标注了积极和消极的评论数据,开发集可以是随机的1600条,测试集是剩余的随机400条。然后开发集中,训练集可以是随机的1400条,开发测试集是200条。
这个时候终于可以使用各种高端冷艳的机器学习算法啦!
我们的目标是:找到最佳的机器学习算法。
可以使用朴素贝叶斯(NaiveBayes),决策树(DecisionTree)等NLTK自带的机器学习方法。也可以更进一步,使用NLTK的scikit-learn接口,这样就可以调用scikit-learn里面的所有,对,是所有机器学习算法了。我已经忍不住的泪流满面。
其实方法很容易。只要以下五步。
1.仅仅使用开发集(DevelopmentSet)。
2.用分类算法训练里面的训练集(TrainingSet),得出分类器。
3.用分类器给开发测试集分类(Dev-TestSet),得出分类结果。
4.对比分类器给出的分类结果和人工标注的正确结果,给出分类器的准确度。
5.使用另一个分类算法,重复以上三步。
在检验完所有算法的分类准确度之后,就可以选出最好的一个分类算法了。
在选出最好的分类算法之后,就可以测试不同的特征维度对分类准确度的影响了。一般来说,特征太少则不足以反映分类的所有特点,使得分类准确率低;特征太多则会引入噪音,干扰分类,也会降低分类准确度。所以,需要不断的测试特征的数量,这样才可以得到最佳的分类效果。
在终于得到最佳分类算法和特征维度(数量)之后,就可以动用测试集。
直接用最优的分类算法对测试集进行分类,得出分类结果。对比分类器的分类结果和人工标注的正确结果,给出分类器的最终准确度。
用Python进行机器学习及情感分析,需要用到两个主要的程序包:nltk和scikit-learn
nltk主要负责处理特征提取(双词或多词搭配需要使用nltk来做)和特征选择(需要nltk提供的统计方法)。