前言

在R和Python之间如何进行选择一直是一个热议的话题。机器学习世界也被不同语言偏好所划分。但是随着深度学习的盛行,天平逐渐向Python倾斜,因为截至目前为止Python具有大量R所没有的深度学习的资源库和框架。

但是随着Keras在R中的实现,语言选择的斗争又重新回到舞台中央。Python几乎已经慢慢变成深度学习建模的默认语言,但是随着在R中以TensorFlow(CPU和GPU均兼容)为后端的Keras框架的发行, 即便是在深度学习领域,R与Python抢占舞台的战争也再一次打响。

以下是以R语言为基础,调用Keras包的一个深度学习练习。

电影评论分类:二分类问题

1. 问题描述

二分类问题可能是应用最广泛的机器学习问题,在本例中,我们将根据电影评论的内容文字将其划分为正面或负面。

我们将使用IMDB数据集,它包含来自互联网电影数据库(IMDB) 的50000条严重两级分化的评论。数据被分为用于训练的25000条评论与用于测试的25000条评论,训练集和测试集都包含50%的正面评论和50%的负面评论。

2. 加载Keras,以及一些其他必需的库。

library(keras)
library(dplyr)
library(ggplot2)
library(purrr)

3. 下载IMDB数据集

IMDB数据集与Keras一起打包。它已经被预处理,使得评论(单词序列)已经被转换为整数序列,其中每个整数表示字典中的特定单词。

以下代码将IMDB数据集下载到您的计算机(如果您已经下载了它,则使用缓存副本):

imdb <- dataset_imdb(num_words = 10000)c(train_data, train_labels) %<-% imdb$train
c(test_data, test_labels) %<-% imdb$test

该参数num_words = 10000保留了训练数据中最常出现的10,000个单词。丢弃罕见的单词以保持数据的大小可管理。

方便地,数据集附带一个索引映射单词到整数,必须单独下载:

word_index <- dataset_imdb_word_index()

我们已经在word_index上面下载了一个列表,其中单词为键,整数为值。如果我们从中创建数据框,我们可以方便地在两个方向上使用它。

word_index_df <- data.frame(word = names(word_index),idx = unlist(word_index, use.names = FALSE),stringsAsFactors = FALSE
)# The first indices are reserved
word_index_df <- word_index_df %>% mutate(idx = idx + 3)
word_index_df <- word_index_df %>%add_row(word = "<PAD>", idx = 0)%>%add_row(word = "<START>", idx = 1)%>%add_row(word = "<UNK>", idx = 2)%>%add_row(word = "<UNUSED>", idx = 3)word_index_df <- word_index_df %>% arrange(idx)

4. 准备数据

train_data <- pad_sequences(train_data,value = word_index_df %>% filter(word == "<PAD>") %>% select(idx) %>% pull(),padding = "post",maxlen = 256
)test_data <- pad_sequences(test_data,value = word_index_df %>% filter(word == "<PAD>") %>% select(idx) %>% pull(),padding = "post",maxlen = 256
)

5. 构建模型

# input shape is the vocabulary count used for the movie reviews (10,000 words)
vocab_size <- 10000model <- keras_model_sequential()
model %>% layer_embedding(input_dim = vocab_size, output_dim = 16) %>%layer_global_average_pooling_1d() %>%layer_dense(units = 16, activation = "relu") %>%layer_dense(units = 1, activation = "sigmoid")model %>% summary()
损失函数和优化器
model %>% compile(optimizer = 'adam',loss = 'binary_crossentropy',metrics = list('accuracy')
)
创建验证集
x_val <- train_data[1:10000, ]
partial_x_train <- train_data[10001:nrow(train_data), ]y_val <- train_labels[1:10000]
partial_y_train <- train_labels[10001:length(train_labels)]

6. 训练模型

history <- model %>% fit(partial_x_train,partial_y_train,epochs = 40,batch_size = 512,validation_data = list(x_val, y_val),verbose=1
)

7. 评估模型

results <- model %>% evaluate(test_data, test_labels)
results

小结

1)通常需要对原始数据进行大量预处理,以便将其转换为张量输入到神经网络中。单词序列可以编码为二进制向量,但也有其他编码方式。
2)带有relu激活的Dense层堆叠,可以解决很多问题(包括情感分类)。
3)对于二分类问题(两个输出类别),网络的最后一层应该是只有一个单元并使用sigmoid激活的dense层,网络输出应该是0~1范围内的标量,表示概率值。
4)对于二分类问题的sigmoid标量输出,应该使用binary_crossentropy损失函数。
5)无论问题是什么,rmsprop优化器通常都是足够好的选择。
6)随着神经网络在训练数据集上的表现越来越好,模型最终都会过拟合,并在前所未见的数据上得到越来越差的结果。一定要一直监控模型在训练集之外的数据上的性能。

参考:Tutorial: Text Classification
R语言滴水穿石系列文章(一):dplyr-高效的数据变换与整理工具
R语言绘图之ggplot2包

电影评论分类:二分类问题 —— R语言实现相关推荐

  1. 使用逻辑回归和词向量进行(英文)电影评论情感(二)分类

    问题描述:对电影评论进行情感分类,类型一共有两种:正面评价 (pos) 和负面评价 (neg). 训练数据集:英文电影评论及对应的分类标签,保存在工作路径下.样本举例如下: 使用的算法:sklearn ...

  2. 基于Keras的IMDB数据集电影评论情感二分类

    原创不易,如果有转载需要的话,请在首行附上本文地址,谢谢. 第一步加载IMDB数据集,如若加载不成功,这里提供一种解决方法:点开IMDB数据下载链接(喜欢的话给个小星星和follow一下),fork到 ...

  3. 4.使用Keras和Tensorflow Hub对电影评论进行文本分类

    使用Keras和Tensorflow Hub对电影评论进行文本分类 本指南使用tf.keras(一个在TensorFlow中用于构建和训练模型的高级API)和tensorflow_hub(一个用于在一 ...

  4. Deep Learing 记录:电影评论分类——二分类问题

    文章目录 一.数据集介绍与可视化展示 1.数据集介绍 2.数据展示--评论解码 二.数据处理与说明 1.train_data处理(列表处理) 2.train_labels处理(标签向量化) 三.网络构 ...

  5. python对电影进行预测评分_基于R语言构建的电影评分预测模型

    原标题:基于R语言构建的电影评分预测模型 欢迎关注天善智能 hellobi.com,我们是专注于商业智能BI,大数据,数据分析领域的垂直社区,学习.问答.求职,一站式搞定! 对商业智能BI.大数据分析 ...

  6. 大量土壤代谢物分类试试HMDB数据库-R语言爬虫HMDB数据库

    HMDB数据库爬虫 经常我们需要使用功能HMDB数据库的一些代谢物信息,虽然HMDB收录的代谢物已经几十万种,但是信息清楚的还是分为子库的这些.这些物质一共有大约1万种,我这里分不同的子库进行爬虫,得 ...

  7. mcem r语言代码_一个简单文本分类任务-EM算法-R语言

    一.问题介绍 概率分布模型中,有时只含有可观测变量,如单硬币投掷模型,对于每个测试样例,硬币最终是正面还是反面是可以观测的.而有时还含有不可观测变量,如三硬币投掷模型.问题这样描述,首先投掷硬币A,如 ...

  8. R语言应用实战系列(二)-基于R语言的方差分析

    前言 回归分析重点考察变量间的相关关系或因果关系,当包含因子是解释变量时,关注点通常是从变量间的关系转向组与组之间的差异分析,这种分析样本组之间的区别的方法称为方差分析(Analysis of Var ...

  9. 复现《NC》图表(二):R语言一键画表达量箱线图并添加显著性

    我们接着重现NC这篇文章的Figure2,这篇文章里有很多这样的箱线图,这也是这个重现系列重点要讲的内容.原文作者提供了这部分代码,对于所有图提供了详细的数据,可以参考作图. 这里重现的重点在于批量画 ...

  10. R语言实战应用精讲50篇(二十七)-R语言实现随机森林(附R语言代码)

    随机森林回归 回归问题指的是因变量或者被预测变量是连续性变量的情形,比如预测身高体重的具体数值是多少的情形.整个代码大致可以分为包.数据.模型.预测评估4个部分,接下来逐一解读. 1.包部分,也就是加 ...

最新文章

  1. UVa712 S-Trees满二叉树
  2. “美登杯”上海市高校大学生程序设计 C. 小花梨判连通 (并查集+map)
  3. 依弗科(上海)机电设备有限公司
  4. AppDomainManager后门的实现思路
  5. 深度学习pytorch--softmax回归(二)
  6. 单模单纤光纤收发器指示灯及故障问题详解
  7. 最优乘车(信息学奥赛一本通-T1377)
  8. 能干什么_闲鱼流量系统能干什么?真的有用吗?
  9. httpclient依赖_.NetCore 3.1高性能微服务架构:封装调用外部服务的接口方法HttpClient客户端思路分析...
  10. R语言——RStudio下载R包时总是下载不成功?解决方案
  11. 麟龙指标通达信指标公式源码_麟龙指标通达信指标公式源码
  12. 异步时钟域的亚稳态问题和同步器(四)
  13. 怎么使用SolidPlant3D创建管道?
  14. 山地车中轴进水表现_4种自行车中轴的拆卸和保养方法
  15. 向右箭头代码css,CSS的箭头代码
  16. ARP欺骗——断网攻击
  17. 四气调神大论篇 :四季养生法
  18. DELETE 语句与 REFERENCE 约束“FK_T_score_T_student_number“冲突。
  19. POS、银联密钥体系
  20. 如何在Google表格中直接使用Google翻译

热门文章

  1. (转)C# 获取汉字的拼音首字母和全拼(含源码)[A]
  2. CorelDRAW x8警告您所用的软件疑似非法盗版软件,软件功能3天内将被永久停用,解决方法教程
  3. JQuery实现复选框CheckBox的全选、反选、提交操作
  4. 西安交通大学学生邮箱设置
  5. 身边的礼仪---整理版
  6. [唐诗]古风(其一)-李白
  7. 论文大致思路(不断更新)
  8. 关于直接在网页中插入mp4视频实际应用中经历的那些事儿
  9. 2022制冷与空调设备运行操作培训试题及答案
  10. Excel多条件求和 SUMPRODUCT函数用法详解