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

????????????????????????

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

二分类问题是生活应用当中最广泛使用的机器学习算法.但是正在这里,将使用深度学习框架keras来进行对问题求解,看似大材小用,也别有一番风味.

数据集

这里使用keras自带的数据集,它包含了来自互联网电影数据库(IMDB)的50000条具有较为容易撕逼的鹅评论.数据集被奉为用于训练的25000跳屏录吧与勇于测试的25000条评论,训练集和测试集都包含50%的正面评论和50%的负面评论.

加载IMDB数据集

from keras.datasets import imdb
(train_data, train_labels), (test_data, test_labels) = imdb.load_data(num_words=10000)

下载完数据如下所示

Downloading data from https://s3.amazonaws.com/text-datasets/imdb.npz
17465344/17464789 [==============================] - 0s 0us/step

这里的参数num_words=10000代表只保留前10000个最哦常熟县的单词,.

Train_ata 和 test_data 这两个变量都是评论组成的列表,每条评论又是单词索引组成的列表(表示一系列单词)traln_ label s 和 test_1 abe1 s 都是 0 和 1 组成的列表,其中 0 代表负面(negative),1 代表正面(positive)

train_data.shape
>> (25000,)
train_labels.shape
>> (25000,)

可以对上面的参数进行验证

max([max(sequence) for sequence in train_data])
>> 9999

我是一个比较好奇人,这里对评论字符串输出的列表,这是怎么实现的呢?能不能将其还原一下呢?可以试试,哈哈哈

word_index = imdb.get_word_index()
reverse_word_index = dict([(value, key) for (key, value) in word_index.items()])
decoded_review = ' '.join([reverse_word_index.get(i -3, '?') for i in train_data[0]])

输出的结果是

"? this film was just brilliant casting location scenery story direction everyone's really suited the part ......

这里使用的到单词的频次统计问题,之后我会整理出来

准备数据

对于数据序列是不能直接输入神经网络的,这个和图像识别有不一样的地方.需要将列表转换成深度学习所擅长的张量运算.

填充列表使其具有相同的长度,值啊讲列表转化成形状为(samples, word_indices)的整数张量,然后网络第一层使用能处理这种张量的陈(Embedding)

one-hot,对标签转换成0和1组成的向量.常用的还有Boolean,count统计法.然后网络第一层可以用Dense成,它能够处理浮点数向量数据

X_train = vectorize_sequences(train_data)
X_test = vectorize_sequences(test_data)

Y_train = np.asarray(train_labels).astype('float32')
Y_test = np.asarray(test_labels).astype('float32')

构建模型

from keras import models, layers
model = models.Sequential()
model.add(layers.Dense(16, activation='relu', input_shape=(10000,)))
model.add(layers.Dense(128,activation='relu'))
model.add(layers.Dense(1,activation='sigmoid'))
model.summary()

可以查看模型的具体参数

Model: "sequential_2"
_________________________________________________________________
Layer (type)                 Output Shape              Param #
=================================================================
dense_4 (Dense)              (None, 16)                160016
_________________________________________________________________
dense_5 (Dense)              (None, 128)               2176
_________________________________________________________________
dense_6 (Dense)              (None, 1)                 129
=================================================================
Total params: 162,321
Trainable params: 162,321
Non-trainable params: 0
_________________________________________________________________

编译模型

model.compile(optimizer='rmsprop',
              loss='binary_crossentropy',
              metrics=['accuracy'])

日志显示

WARNING:tensorflow:From /usr/local/lib/python3.6/dist-packages/keras/backend/tensorflow_backend.py:3657: The name tf.log is deprecated. Please use tf.math.log instead.

WARNING:tensorflow:From /tensorflow-1.15.0/python3.6/tensorflow_core/python/ops/nn_impl.py:183: where (from tensorflow.python.ops.array_ops) is deprecated and will be removed in a future version.
Instructions for updating:
Use tf.where in 2.0, which has the same broadcast rule as np.where

如果这里不能学习好,可以自定义优化器么,并修改初始的学习率

from keras import optimizers
model.compile(optimizer=optimizers.RMSprop(lr=0.001),
              loss='binary_crossentropy',
              metrics=['accuracy'])

同理,可以修改损失函数

from keras import losses, metrics
model.compile(optimizer=optimizers.RMSprop(lr=0.001),                                                  loss=losses.binary_crossentropy,
              metrics=[metrics.binary_accuracy])

验证模型

X_val=X_train[:10000]
partial_X_train = X_train[10000:]

Y_val =Y_train[:10000]
partial_Y_train = Y_train[10000:]
history = model.fit(partial_X_train,partial_Y_train,epochs=2000,batch_size=512,validation_data=(X_val,Y_val))

这里使用的Google服务器,所以epoch设置的大一些,但是请注意,并不是越大越好,大部分情况会过拟合,也即是说训练集上非常好,测试集上非常差

最后的训练结果

......

打印结果

history_dict = history.history
history_dict.keys()
>> dict_keys(['val_acc', 'acc', 'val_loss', 'loss'])

原文地址:https://www.cnblogs.com/TuringEmmy/p/12528520.html

时间: 2024-09-30 05:07:31

电影评论分类:二分类问题的相关文章

scikit-learn机器学习(二)逻辑回归进行二分类(垃圾邮件分类),二分类性能指标,画ROC曲线,计算acc,recall,presicion,f1

数据来自UCI机器学习仓库中的垃圾信息数据集 数据可从http://archive.ics.uci.edu/ml/datasets/sms+spam+collection下载 转成csv载入数据 import matplotlib matplotlib.rcParams['font.sans-serif']=[u'simHei'] matplotlib.rcParams['axes.unicode_minus']=False import pandas as pd import numpy as

文本分类--多分类

文本分类算是自然语言处理领域最最常见的问题了,开源的工具也很好用,但是苦于训练速度缓慢,需要引进多核的版本,开源提供的多核支持参数有限,而同事提供的又有语言障碍,觉得自己探索下多分类器. 分类算法有很多,但是效果较好的基本就是LR和SVM,而这两个算法业内著名的开源代码应该就是liblinear和libsvm,libsvm支不支持多核暂时还未了解,但是liblinear支持的多核版本也就三组(0.2.11),正好避开了我需要用的那组参数,于是就摸索下liblinear的train代码. 一.先说

好还是坏:人工智能二分类问题

上一篇文章我们介绍了深度学习的 Hello World,代码写起来相比其他语言的 Hello World 有点多,且其背后的很多原理你可能还没有完全弄懂,但从宏观上来看,整体的思想是很好理解的.接下包括本篇在内的三篇文章,我们来用深度学习解决三个实际问题,也是非常经典的三个问题,分别是: 二分类问题(电影评论的好坏偏向性判断) 多分类问题(将新闻按照主题分类) 回归问题(根据房地产数据估算房地产价格) 我们解决这三个问题用到的训练模型为: 今天是第一篇,我们关注他们其中比较简单的二分类问题,代码

基于TextCNN的情感二分类

0. Cause I just wanna wake up in the fleeting light 0.1 アイスクリームみた溶けそう.その瞳にみつめられたなら 新论文方向想好了,一个改进的TextCNN应用实例吧.数据集来源于学长之前打比赛时官方发的2G数据包,大概达到的效果就是通过用户短评去给某个景点的旅行指标进行打分.当然会有一个疑问,在我们现实的应用场景中不都是用户进行打分吗.但这里我要做的是对短评的深层语义进行挖掘,然后得出打分(无奈,为了写论文而写),其实确实没有什么意义,但是自

matlab 实现感知机线性二分类算法(Perceptron)

感知机是简单的线性分类模型 ,是二分类模型.其间用到随机梯度下降方法进行权值更新.参考他人代码,用matlab实现总结下. 权值求解过程通过Perceptron.m函数完成 function W = Perceptron(X,y,learnRate,maxStep) % Perceptron.m % Perception Learning Algorithm(感知机) % X一行为一个样本,y的取值{-1,+1} % learnRate:学习率 % maxStep:最大迭代次数 [n,m] =

【机器学习具体解释】SVM解二分类,多分类,及后验概率输出

转载请注明出处:http://blog.csdn.net/luoshixian099/article/details/51073885 CSDN?勿在浮沙筑高台 支持向量机(Support Vector Machine)以前在分类.回归问题中非常流行.支持向量机也称为最大间隔分类器,通过分离超平面把原始样本集划分成两部分. 首先考虑最简单的情况:线性可分支持向量机.即存在一个超平面能够把训练样本分开. 1.线性可分支持向量机 1.考虑一个线性二分类的问题:例如以下左图,在二维平面上有两种样本点x

【机器学习详解】SVM解二分类,多分类,及后验概率输出

转载请注明出处:http://blog.csdn.net/luoshixian099/article/details/51073885 CSDN?勿在浮沙筑高台 支持向量机(Support Vector Machine)曾经在分类.回归问题中非常流行.支持向量机也称为最大间隔分类器,通过分离超平面把原始样本集划分成两部分. 首先考虑最简单的情况:线性可分支持向量机,即存在一个超平面可以把训练样本分开. 1.线性可分支持向量机 1.考虑一个线性二分类的问题:如下左图,在二维平面上有二种样本点x,目

Spark 多项式逻辑回归__二分类

package Spark_MLlib import org.apache.spark.ml.Pipeline import org.apache.spark.ml.classification.{LogisticRegression, LogisticRegressionModel} import org.apache.spark.ml.evaluation.MulticlassClassificationEvaluator import org.apache.spark.ml.feature

Spark 二项逻辑回归__二分类

package Spark_MLlib import org.apache.spark.ml.Pipeline import org.apache.spark.ml.classification.{BinaryLogisticRegressionSummary, LogisticRegression, LogisticRegressionModel} import org.apache.spark.ml.evaluation.MulticlassClassificationEvaluator i