电影评论分类:二分类问题 —— R语言实现
前言
在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语言实现相关推荐
- 使用逻辑回归和词向量进行(英文)电影评论情感(二)分类
问题描述:对电影评论进行情感分类,类型一共有两种:正面评价 (pos) 和负面评价 (neg). 训练数据集:英文电影评论及对应的分类标签,保存在工作路径下.样本举例如下: 使用的算法:sklearn ...
- 基于Keras的IMDB数据集电影评论情感二分类
原创不易,如果有转载需要的话,请在首行附上本文地址,谢谢. 第一步加载IMDB数据集,如若加载不成功,这里提供一种解决方法:点开IMDB数据下载链接(喜欢的话给个小星星和follow一下),fork到 ...
- 4.使用Keras和Tensorflow Hub对电影评论进行文本分类
使用Keras和Tensorflow Hub对电影评论进行文本分类 本指南使用tf.keras(一个在TensorFlow中用于构建和训练模型的高级API)和tensorflow_hub(一个用于在一 ...
- Deep Learing 记录:电影评论分类——二分类问题
文章目录 一.数据集介绍与可视化展示 1.数据集介绍 2.数据展示--评论解码 二.数据处理与说明 1.train_data处理(列表处理) 2.train_labels处理(标签向量化) 三.网络构 ...
- python对电影进行预测评分_基于R语言构建的电影评分预测模型
原标题:基于R语言构建的电影评分预测模型 欢迎关注天善智能 hellobi.com,我们是专注于商业智能BI,大数据,数据分析领域的垂直社区,学习.问答.求职,一站式搞定! 对商业智能BI.大数据分析 ...
- 大量土壤代谢物分类试试HMDB数据库-R语言爬虫HMDB数据库
HMDB数据库爬虫 经常我们需要使用功能HMDB数据库的一些代谢物信息,虽然HMDB收录的代谢物已经几十万种,但是信息清楚的还是分为子库的这些.这些物质一共有大约1万种,我这里分不同的子库进行爬虫,得 ...
- mcem r语言代码_一个简单文本分类任务-EM算法-R语言
一.问题介绍 概率分布模型中,有时只含有可观测变量,如单硬币投掷模型,对于每个测试样例,硬币最终是正面还是反面是可以观测的.而有时还含有不可观测变量,如三硬币投掷模型.问题这样描述,首先投掷硬币A,如 ...
- R语言应用实战系列(二)-基于R语言的方差分析
前言 回归分析重点考察变量间的相关关系或因果关系,当包含因子是解释变量时,关注点通常是从变量间的关系转向组与组之间的差异分析,这种分析样本组之间的区别的方法称为方差分析(Analysis of Var ...
- 复现《NC》图表(二):R语言一键画表达量箱线图并添加显著性
我们接着重现NC这篇文章的Figure2,这篇文章里有很多这样的箱线图,这也是这个重现系列重点要讲的内容.原文作者提供了这部分代码,对于所有图提供了详细的数据,可以参考作图. 这里重现的重点在于批量画 ...
- R语言实战应用精讲50篇(二十七)-R语言实现随机森林(附R语言代码)
随机森林回归 回归问题指的是因变量或者被预测变量是连续性变量的情形,比如预测身高体重的具体数值是多少的情形.整个代码大致可以分为包.数据.模型.预测评估4个部分,接下来逐一解读. 1.包部分,也就是加 ...
最新文章
- UVa712 S-Trees满二叉树
- “美登杯”上海市高校大学生程序设计 C. 小花梨判连通 (并查集+map)
- 依弗科(上海)机电设备有限公司
- AppDomainManager后门的实现思路
- 深度学习pytorch--softmax回归(二)
- 单模单纤光纤收发器指示灯及故障问题详解
- 最优乘车(信息学奥赛一本通-T1377)
- 能干什么_闲鱼流量系统能干什么?真的有用吗?
- httpclient依赖_.NetCore 3.1高性能微服务架构:封装调用外部服务的接口方法HttpClient客户端思路分析...
- R语言——RStudio下载R包时总是下载不成功?解决方案
- 麟龙指标通达信指标公式源码_麟龙指标通达信指标公式源码
- 异步时钟域的亚稳态问题和同步器(四)
- 怎么使用SolidPlant3D创建管道?
- 山地车中轴进水表现_4种自行车中轴的拆卸和保养方法
- 向右箭头代码css,CSS的箭头代码
- ARP欺骗——断网攻击
- 四气调神大论篇 :四季养生法
- DELETE 语句与 REFERENCE 约束“FK_T_score_T_student_number“冲突。
- POS、银联密钥体系
- 如何在Google表格中直接使用Google翻译