R语言中的情感分析与机器学习

Python08

R语言中的情感分析与机器学习,第1张

来源 | 雪晴数据

利用机器学习可以很方便的做情感分析。本篇文章将介绍在R语言中如何利用机器学习方法来做情感分析。在R语言中,由Timothy P.Jurka开发的情感分析以及更一般的文本挖掘包已经得到了很好的发展。你可以查看下sentiment包以及梦幻般的RTextTools包。实际上,Timothy还写了一个针对低内存下多元Logistic回归(也称最大熵)的R包maxtent。

然而,RTextTools包中不包含朴素贝叶斯方法。e1071包可以很好的执行朴素贝叶斯方法。e1071是TU Wien(维也纳科技大学)统计系的一门课程。这个包的主要开发者是David Meyer。

我们仍然有必要了解文本分析方面的知识。用R语言来处理文本分析已经是公认的事实(详见R语言中的自然语言处理)。tm包算是其中成功的一部分:它是R语言在文本挖掘应用中的一个框架。它在文本清洗(词干提取,删除停用词等)以及将文本转换为词条-文档矩阵(dtm)方面做得很好。这里是对它的一个介绍。文本分析最重要的部分就是得到每个文档的特征向量,其中词语特征最重要的。当然,你也可以将单个词语特征扩展为双词组,三连词,n-连词等。在本篇文章,我们以单个词语特征为例做演示。

注意,在R中用ngram包来处理n-连词。在过去,Rweka包提供了函数来处理它,感兴趣的可以查看这个案例。现在,你可以设置RTextTools包中create_matrix函数的参数ngramLength来实现它。

第一步是读取数据:

创建词条-文档矩阵:

现在,我们可以用这个数据集来训练朴素贝叶斯模型。注意,e1071要求响应变量是数值型或因子型的。我们用下面的方法将字符串型数据转换成因子型:

测试结果准确度:

显然,这个结果跟python得到的结果是相同的(这篇文章是用python得到的结果)。

其它机器学习方法怎样呢?

下面我们使用RTextTools包来处理它。

首先,指定相应的数据:

其次,用多种机器学习算法训练模型:

现在,我们可以使用训练过的模型做测试集分类:

准确性如何呢?

得到模型的结果摘要(特别是结果的有效性):

结果的交叉验证:

结果可在我的Rpub页面找到。可以看到,maxent的准确性跟朴素贝叶斯是一样的,其它方法的结果准确性更差。这是可以理解的,因为我们给的是一个非常小的数据集。扩大训练集后,利用更复杂的方法我们对推文做的情感分析可以得到一个更好的结果。示例演示如下:

推文情感分析

数据来自victornep。victorneo展示的是用python对推文做情感分析。这里,我们用R来处理它:

读取数据:

首先,尝试下朴素贝叶斯

然后,尝试其他方法:

这里,我们也希望得到正式的测试结果。包括:

1.analytics@algorithm_summary:包括精确度,召回率,准确率,F-scores的摘要

2.analytics@label_summary:类标签摘要

3.analytics@document_summary:所有数据和得分的原摘要

4.analytics@ensemble_summary:所有 精确度/覆盖度 比值的摘要

现在让我们看看结果:

与朴素贝叶斯方法相比,其它算法的结果更好,召回精度高于0.95。结果可在Rpub查看

原文链接:http://www.xueqing.cc/cms/article/107

起源

我们的存在离不开信息,我们依赖数据而存在,大脑就是一个黑箱,连接黑箱和外界的就是你的感官,在时间流里,各种数据被我们的感官提取,传入大脑。大脑可以对信息进行建模,理解信息,预测未来,通过肌肉控制器对外发出指令,改变外在的世界。

语言是这整个环节当中一个非常重要的因素,语言可以将数据在不同的大脑模型间传递,这些模型就组成了更为强大的网络,创造了高等文明。语言也是一种客观的记录工具。

我们人类的语言是对我们存在世界的一种映射,而计算机语言则很局限,仅为执行任务而生;我们的大脑能够对整个世界建模,能对将这世界的每一个物体抽象建模。

人类之所以强大,是因为它是作为一个整体存在的,任何个体都只会是这个网络中的一个节点。

我们一直存在于大数据之中,只是现在我们更容易的获取数据了。

如果我们理解了数据中存在的有规律的模式,我们就能做出有潜力的预测。

机器学习,发明计算机算法,把数据转化为智能行为。(核心循环的三者:现有数据;统计方法;计算能力)

数据挖掘,从大型数据库中产生新的洞察,侧重寻找有价值的信息;机器学习侧重于执行一个已知的任务。

(在商业上一个重要的应用就是根据客户的购买行为,预测其需求,从而为其提供个性化的服务和推销。)

1.2 学习理论

定义:如果机器能够获取经验并且能利用它们,在以后的类似经验中能够提高它的表现,这种行为就是机器的学习。

学习过程:

数据输入,观察(抽象并提取信息),记忆(将信息存储在大脑的某个文件里),回忆(打开大脑里的文件)

抽象化,将数据转换成更宽泛的表现形式

一般化,应用抽象数据来形成行动的基础

举例:学习&考试

过目不忘并不是一种本领,而是一种低级的作弊方式,你没有深刻理解知识,数据本身并不能为你做出决策;必须理解核心概念(建立大纲、概念图),明确信息之间的关系,以主题为中心(这就是知识抽象化)。 一般化,需要大量抽象数据,理解如何将已有知识应用到未知场景中(好的老师能做到这两点)。

1.2.1 抽象化和知识表达

原始数据是没有意义的,仅仅是一些01或符号而已,抽象化赋予数据以具体含义。

idea 和 reality,只是语言的抽象连接。

知识表达中,将原始数据概括在一个模型里,该模型就是数据间结构化的显式描述。(方程,图表,分类都是模型)

学习的任务和所分析数据的类型决定选择使用什么模型。

用一个特定的模型来拟合数据集的过程称为训练(还没达到学习,这还只是抽象化,学习还包括一般化)。

当模型被训练后,数据转换为一个汇总了原始信息的抽象形式。模型提供了数据之间的关系或联系。

1.2.2 一般化

抽象化过程中可能发现无数的内在关系,有多种方法可以对内在关系建模(集合),为了预测,必须选定模型。

定义:一般化描述了把抽象化的知识转换成可以用于行动的形式。是训练过程中对所有可用于数据抽象化的模型的搜索过程。

一般不会遍历每一种可能来确定模型,而是用启发式方法。

偏差,就是系统误差,是模型与真实值之间的差距。偏差是普遍存在的。

一般化的最后一步就是在存在偏差的情况下判断模型的成功性。

数据中必然存在噪音,模型不能拟合噪音而造成过度拟合,模型处理噪音数据的好坏是判断模型成功与否的重要方面。