机器学习分析方法有哪些

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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提供的统计方法)。

相关文档
最新文档