机器学习不神秘!手把手教你用R语言打造文本分类器

简单安装几个R软件包,你就直接在自己电脑上打造出一个文本分类器,用进行机器来评估人类写作。 本文是一篇极简的上手教程,它想用清晰明了的步骤告诉读者,机器学习不神秘,关键是动手!仅需七步,你也一样能“作诗”,完全无需像曹子建那样“才高八斗”。

作者 | Fedor Karmanov

翻译 | AI科技大本营(rgznai100)

参与 | Joe,波波

在本教程中,我们将用到大量的R软件包,以快速实现一个用于亚马逊评论数据的分类器算法。该分类器能以极高的准确度来判断一个评论是正面的还是负面的。

为了明确地给出分类算法的工作用例,这里采用了斯坦福网络分析项目(Stanford Network Analysis Project)的数据,该数据已被解析成小的文本块,并进行过适当的标注。你可以从它的Github代码库获取到这些数据。

斯坦福网络分析项目 https://snap.stanford.edu/data/web-Amazon.html Github链接 https://github.com/Rogerh91/Springboard-Blog-Tutorials/tree/master/Machine%20Learning%20with%20R%20Tutorial

开始前的数据策管,是整个数据处理过程中至关重要的一环:要确保所用的信息都已被恰当地分类和标注。

在机器学习中,数据的标注和分类的质量往往能决定整个模型的准确度。也就是说,熟悉一下文件内容在被如何组织与标注,会非常有价值:“Train”文件夹包含了400条被标为“Neg”(negative,负面)的1星书评,与400条被标为“Pos”(positive,“正面”)的5星评论。这就是我们的“黄金标准”:我们根据用户撰写书评时所给的评分星级来判断评论内容正面与否。我们使用“Train”文件夹内的数据来训练分类器,然后它用训练所得的规律来推测“Test”文件夹内的评论是正面还是负面。

通过这种方式,我们就能打造出一个基于机器学习的文本分类器,它可以准确判断每条亚马逊书评正面与否,或任何短文本信息的正面与否,以此来评估给定产品的消费体验。

从更大的视角看,这一过程所演示的是如何用最简单的R语言来学习并预测人类写作。这是一个用R语言进行机器学习的有效用例。

该教程运行在R语言的Jupyter Notebook环境:

http://blog.revolutionanalytics.com/2015/09/using-r-with-jupyter-notebooks.html

你可以在任何能编译并运行R脚本的平台上来练习。

我们将使用R语言的“caret”、“tm”和“kernlab”包来解析和读取数据,然后进行模型训练。如果你没装这些包,请用下面的命令安装。

关于R软件包如何安装的更多说明,请参考这里

https://www.r-bloggers.com/installing-r-packages/。

其中,“dplyr”包和” splitstackshape”是用来帮我们控制数据的,并把它们组织成模型能够使用的数据。接着,让我们激活这些已安装好的R软件包,并展开机器学习的实践操作。

第一步是导入并清洗所有的数据。因此,我们将使用”tm”包,它用 ”VCorpus” 函数和 ”tm_map” 函数来使数据变得可用。下面将用到大段大段的代码块,我们希望其中的注释能有助于你理解里面的机制。

1. 导入并清洗数据

2. 为训练数据创建文本矩阵

3. 重复以上两步来准备测试数据

上述代码给出了两个新的数据矩阵:一个是”data.dtm”,包含了“Training”文件夹内的所有数据,另一个是”test.dtm”,包含了“Test”文件夹内的所有数据。本教程的绝大部分,我们都是在跟”train.dtm”打交道,用于生成、训练和验证结果。先不停地使用训练数据,然后再用测试数据进行模型验证,这是用R进行机器学习实践的基本步骤。

以下两步涉及到数据处理过程中非常重要的两个方面,从而能确保分类器很好地工作。

  • 第一步:确保数据集在列向量上一致,即我们只采用两个矩阵在列上重叠的数据。
  • 第二步:确保数据都有标签列,以注明该文本是“正面”还是“负面”。因为训练数据的标注值是已知的,我们必须从原始文件中把它们分离出来,并追加到训练数据的“corpus”列。而测试数据没有相应这些标签,我们先用一些空值进行填充。

4. 确保测试矩阵和训练矩阵的列向量一致(找到交集)

5. 获取训练数据的正确标注,并为测试数据设置相应的空值

如果以上步骤的运行都正确无误,你可以开始训练分类器了!

注意:本教程将不对模型作交叉验证(cross-validation),但更高水平的用户或研究者应当创建多个数据包,并用它们来对模型进行交叉验证,从而获得更加可靠的模型准确值。

不管怎样,这里的模型只会用下面的混淆矩阵(confusion matrix)来进行一次模型准确度验证。这将会生成一些指标,以帮助我们计算刚刚建好的预测模型的准确度。

6. 准备好数据集,进行模型训练并检验结果

如上所述,我们用训练数据来对模型进行训练和测试。如果一切顺利,你应该能看到以下的输出:

混淆矩阵(confusion matrix)以尽可能简单的形式给出了最终的输出结果,以及模型在训练数据上预测的性能分析。例如“Accuracy”(准确度)表明分类器在训练数据集上的预测精度:这里高达92.8%!这就意味着大致有93%的情况,分类器仅根据文本内容就准确地判断它是正面的还是负面的。

在更严谨的场景下,你需要在不同的数据集(通常是随机从训练数据集中获得的子集)上进行同样的流程,以进行交叉验证。比如上面的例子,很明显构建的分类器能非常好地判断亚马逊书评是负面的还是正面的。因此,我们进行下一步的测试。我们已经基于使用R进行机器学习的知识,构建了一个非常好的分类器。但是,这个模型还不能用于实践。幸运的是,在测试数据上运行这个模型,只需修改“df.test”变量即可。

7. 在测试数据上进行最终预测,并标注文件名

以上代码表示,预测模型在测试数据上运行并输出结果”results”。然后,我们使用原始数据行名作为预测结果向量行名,并最终生成测试数据的预测结果。

总的来说,以上使用R构建机器学习模型的流程帮助你快速实现一个分类器。它以相当高的准确度区分在线书评的情感种类。当你有大量的用户评论数据(用来分析某个产品或服务的客户体验度),这样一个分类器非常实用。此外,还能用于帮助研究者构建可以自动清除差评或者好评的算法。我们希望这个教程能让你感受到使用R进行机器学习实践的威力。

原文链接 https://www.springboard.com/blog/machine-learning-with-r/

原文发布于微信公众号 - AI科技大本营(rgznai100)

原文发表时间:2017-07-02

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏CVer

重磅 | TensorFlow学习资料最全集锦

TensorFlow 已然成为深度学习框架中的扛把子,各位童鞋即使没有学习过,但一定有所耳闻。本文总结了TensorFlow相关的入门指南、网上教程、视频教程、...

1963
来自专栏AI科技大本营的专栏

手动特征工程已经OUT了!自动特征工程才是改进机器学习的方式

【导读】近年来,我们在自动模型选择和超参数调优方面取得了进展,但机器学习流程中最重要的方面-- 特征工程,在很大程度上被我们所忽略。在本文中,我们将使用 Fea...

1783
来自专栏深度学习入门与实践

【深度学习系列】用PaddlePaddle进行人脸识别

上个案例中我们讲了如何用PaddlePaddle进行车牌识别的方法,这次的案例中会讲到如何用PaddlePaddl进行人脸识别,在图像识别领域,人脸识别也属于...

4368
来自专栏量子位

自动机器学习工具全景图:精选22种框架,解放炼丹师

收集原始数据、合并数据源、清洗数据、特征工程、模型构建、超参数调优、模型验证和设备部署。

1574
来自专栏AI研习社

AI 玩微信跳一跳的正确姿势——跳一跳 Auto-Jump 算法详解

最近,微信小游戏跳一跳可以说是火遍了全国,从小孩子到大孩子仿佛每一个人都在刷跳一跳,作为无(zhi)所(hui)不(ban)能(zhuan)的 AI 程序员,我...

4048
来自专栏机器学习算法与Python学习

10月机器学习开源项目Top10

过去一个月里,我们对近 250 个机器学习开源项目进行了排名,并挑选出热度前 10 的项目。这份清单的平均 github star 数量高达 1345,涵盖了包...

1043
来自专栏机器之心

贾扬清撰文详解Caffe2:从强大的新能力到入门上手教程

选自 Nvidia Blog 作者:Aaron Markham、贾扬清 机器之心编译 昨天,Facebook 推出了 Caffe2,一个兼具表现力、速度和模块性...

3183
来自专栏腾讯大数据的专栏

深度神经网络DNN的多GPU数据并行框架 及其在语音识别的应用

深度神经网络(Deep Neural Networks, 简称DNN)是近年来机器学习领域中的研究热点,产生了广泛的应用。DNN具有深层结构、数千万参数需要学...

2737
来自专栏量子位

如何用3D-CNN确认说话人身份?这里有Code+Paper

安妮 编译自 Github 量子位出品 | 公众号 QbitAI 说话人确认(Speaker Verification)是一种以语言特性确认说话人身份的技术。 ...

3574
来自专栏AI科技大本营的专栏

10月机器学习开源项目Top10

【导读】过去一个月里,我们对近 250 个机器学习开源项目进行了排名,并挑选出热度前 10 的项目。这份清单的平均 github star 数量高达 1345,...

1023

扫码关注云+社区

领取腾讯云代金券