原文链接:http://tecdat.cn/?p=8613

原文出处:拓端数据部落公众号

深度学习无处不在。在本文中,我们将使用Keras进行文本分类。

准备数据集

出于演示目的,我们将使用  20个新闻组  数据集。数据分为20个类别,我们的工作是预测这些类别。如下所示:

通常,对于深度学习,我们将划分训练和测试数据。

导入所需的软件包

Python
import pandas as pd
import numpy as np
import pickle
from keras.preprocessing.text import Tokenizer
from keras.models import Sequential
from keras.layers import Activation, Dense, Dropout
from sklearn.preprocessing import LabelBinarizer
import sklearn.datasets as skds
from pathlib import Path

将数据从文件加载到Python变量

Python
# 为了复现性np.random.seed(1237)label_index = files_train.target
label_names = files_train.target_names
labelled_files = files_train.filenamesdata_tags = ["filename","category","news"]
data_list = []# 读取文件中的数据并将其添加到列表data = pd.DataFrame.from_records(data_list, columns=data_tags)

我们的数据无法以CSV格式提供。我们有文本数据文件,文件存放的目录是我们的标签或类别。

我们将使用scikit-learn load_files方法。这种方法可以提供原始数据以及标签和标签索引。

最后我们得到一个数据框,其中包含文件名,类别和实际数据。

拆分数据进行训练和测试

Python
# 让我们以80%的数据作为训练,剩下的20%作为测试。train_size = int(len(data) * .8)train_posts = data['news'][:train_size]
train_tags = data['category'][:train_size]
train_files_names = data['filename'][:train_size]test_posts = data['news'][train_size:]
test_tags = data['category'][train_size:]
test_files_names = data['filename'][train_size:]

标记化并准备词汇

Python
# 20个新闻组num_labels = 20
vocab_size = 15000
batch_size = 100# 用Vocab Size定义Tokenizertokenizer = Tokenizer(num_words=vocab_size)
tokenizer.fit_on_texts(train_posts)

在对文本进行分类时,我们首先使用Bag Of Words方法对文本进行预处理。

预处理输出标签/类

在将文本转换为数字向量后,我们还需要确保标签以神经网络模型接受的数字格式表示。

建立Keras模型并拟合

PowerShell
model = Sequential()

它为输入数据的维度以及构成模型的图层类型提供了简单的配置。

这是拟合度和测试准确性的代码段

100/8145 [..............................] - ETA: 31s - loss: 1.0746e-04 - acc: 1.0000
200/8145 [..............................] - ETA: 31s - loss: 0.0186 - acc: 0.9950
300/8145 [>.............................] - ETA: 35s - loss: 0.0125 - acc: 0.9967
400/8145 [>.............................] - ETA: 32s - loss: 0.0094 - acc: 0.9975
500/8145 [>.............................] - ETA: 30s - loss: 0.0153 - acc: 0.9960
...
7900/8145 [============================>.] - ETA: 0s - loss: 0.1256 - acc: 0.9854
8000/8145 [============================>.] - ETA: 0s - loss: 0.1261 - acc: 0.9855
8100/8145 [============================>.] - ETA: 0s - loss: 0.1285 - acc: 0.9854
8145/8145 [==============================] - 29s 4ms/step - loss: 0.1293 - acc: 0.9854 - val_loss: 1.0597 - val_acc: 0.8742Test accuracy: 0.8767123321648251

评估模型

Python

for i in range(10):prediction = model.predict(np.array([x_test[i]]))predicted_label = text_labels[np.argmax(prediction[0])]print(test_files_names.iloc[i])print('Actual label:' + test_tags.iloc[i])print("Predicted label: " + predicted_label)

在Fit方法训练了我们的数据集之后,我们将如上所述评估模型。

混淆矩阵

混淆矩阵是可视化模型准确性的最佳方法之一。

保存模型

通常,深度学习的用例就像在不同的会话中进行数据训练,而使用训练后的模型进行预测一样。

# 创建一个HDF5文件'my_model.h5'model.model.save('my_model.h5')# 保存令牌生成器,即词汇表with open('tokenizer.pickle', 'wb') as handle:pickle.dump(tokenizer, handle, protocol=pickle.HIGHEST_PROTOCOL)

Keras没有任何实用程序方法可将Tokenizer与模型一起保存。我们必须单独序列化它。

加载Keras模型

Python

预测环境还需要注意标签。

encoder.classes_ #标签二值化

预测

如前所述,我们已经预留了一些文件进行实际测试。

Python


labels = np.array(['alt.atheism', 'comp.graphics', 'comp.os.ms-windows.misc',
'comp.sys.ibm.pc.hardware', 'comp.sys.mac.hardware', 'comp.windows.x',
'misc.forsale', 'rec.autos', 'rec.motorcycles', 'rec.sport.baseball',
'rec.sport.hockey', 'sci.crypt', 'sci.electronics', 'sci.med', 'sci.space',
'soc.religion.christian', 'talk.politics.guns', 'talk.politics.mideast',
'talk.politics.misc', 'talk.religion.misc'])...
for x_t in x_tokenized:prediction = model.predict(np.array([x_t]))predicted_label = labels[np.argmax(prediction[0])]print("File ->", test_files[i], "Predicted label: " + predicted_label)i += 1

输出

File -> C:\DL\20news-bydate\20news-bydate-test\comp.graphics\38758 Predicted label: comp.graphics
File -> C:\DL\20news-bydate\20news-bydate-test\misc.forsale\76115 Predicted label: misc.forsale
File -> C:\DL\20news-bydate\20news-bydate-test\soc.religion.christian\21329 Predicted label: soc.religion.christian
我们知道目录名是文件的真实标签,因此上述预测是准确的。

结论

在本文中,我们使用Keras python库构建了一个简单而强大的神经网络。


最受欢迎的见解

1.r语言用神经网络改进nelson-siegel模型拟合收益率曲线分析

2.r语言实现拟合神经网络预测和结果可视化

3.python用遗传算法-神经网络-模糊逻辑控制算法对乐透分析

4.用于nlp的python:使用keras的多标签文本lstm神经网络分类

5.用r语言实现神经网络预测股票实例

6.R语言基于Keras的小数据集深度学习图像分类

7.用于NLP的seq2seq模型实例用Keras实现神经机器翻译

8.python中基于网格搜索算法优化的深度学习模型分析糖

9.matlab使用贝叶斯优化的深度学习

拓端tecdat|Python使用神经网络进行简单文本分类相关推荐

  1. 神经网络python实例分类_Python使用神经网络进行简单文本分类

    原文链接:http://tecdat.cn/?p=8613​tecdat.cn 深度学习无处不在.在本文中,我们将使用Keras进行文本分类. 准备数据集 出于演示目的,我们将使用 20个新闻组 数据 ...

  2. 拓端tecdat荣获掘金社区入驻新人奖

    2021年7月,由掘金发起了"入驻成长礼"颁奖活动.本次活动邀请到知名开发者.服务机构代表等业界人士. 据了解,掘金社区"新入驻创作者礼"主要对已经积累了一定历 ...

  3. 拓端tecdat荣获2022年度51CTO博主之星

    相信技术,传递价值,这是51CTO每一个技术创作者的动力与信念,2022 年度,拓端tecdat 作为新锐的数据分析咨询公司,在51CTO平台上,不断的输出优质的技术文章,分享前沿创新技术,输出最佳生 ...

  4. 利用TensorFlow和神经网络来处理文本分类问题

    利用TensorFlow和神经网络来处理文本分类问题 By 机器之心2017年8月23日 10:33 在这篇文章中,机器之心海外分析师对Medium(链接见文后)上的一篇热门博客进行了介绍,讨论了六个 ...

  5. [Pytorch系列-61]:循环神经网络 - 中文新闻文本分类详解-3-CNN网络训练与评估代码详解

    作者主页(文火冰糖的硅基工坊):文火冰糖(王文兵)的博客_文火冰糖的硅基工坊_CSDN博客 本文网址:https://blog.csdn.net/HiWangWenBing/article/detai ...

  6. Tensorflow使用CNN卷积神经网络以及RNN(Lstm、Gru)循环神经网络进行中文文本分类

    Tensorflow使用CNN卷积神经网络以及RNN(Lstm.Gru)循环神经网络进行中文文本分类 本案例采用清华大学NLP组提供的THUCNews新闻文本分类数据集的一个子集进行训练和测试http ...

  7. [Pytorch系列-60]:循环神经网络 - 中文新闻文本分类详解-2-LSTM网络训练与评估代码详解

    作者主页(文火冰糖的硅基工坊):文火冰糖(王文兵)的博客_文火冰糖的硅基工坊_CSDN博客 本文网址:https://blog.csdn.net/HiWangWenBing/article/detai ...

  8. 拓端tecdat|bilibili视频流量数据潜望镜

    最近我们被客户要求撰写关于bilibili视频流量的研究报告,包括一些图形和统计输出. 最新研究表明,中国有超过7亿人在观看在线视频内容.Bilibili,被称为哔哩哔哩或简称为B站,是中国大陆第二个 ...

  9. 文本分类(下) | 卷积神经网络(CNN)在文本分类上的应用

    正文共3758张图,4张图,预计阅读时间18分钟. 1.简介 原先写过两篇文章,分别介绍了传统机器学习方法在文本分类上的应用以及CNN原理,然后本篇文章结合两篇论文展开,主要讲述下CNN在文本分类上的 ...

  10. 第十课.简单文本分类

    目录 文本处理 基本处理方式 正则表达式 去除停用词 文本表示 单词表示 词袋模型 实验:基于朴素贝叶斯的垃圾邮件过滤 文本处理 通常来说,在使用一个算法进行文本分类之前,需要做一些文本获取.文本处理 ...

最新文章

  1. 《Haskell趣学指南》—— 第1章,第1.2节小朋友的第一个函数
  2. java tomcat mysql_java+tomcat+mysql实现登录界面基本思路
  3. Android --- 漂亮的 Loader 加载动画
  4. eclipse创建springboot项目_Spring Initializer+IntelliJ IDEA创建Spring Boot项目(图文)
  5. nodejs里socket.on和socket.once的单步调试
  6. SAP CRM WebClient UI和Hybris backoffice UI开发的相同点
  7. [2020-11-24 contest]糖果机器(二维偏序),手套(状压dp),甲虫(区间dp),选举(线段树 最大子段和)
  8. win7上安装wince6.0
  9. -mysql-锁机制分为表级锁和行级锁
  10. java 文件通道_Java NIO(四)文件通道
  11. java关闭applet_java – Applet会自动关闭
  12. 什么是Ultrabook
  13. android 8.0 悬浮窗 最简demo
  14. Java常用开发工具推荐
  15. TBODY的使用方法和意义
  16. view基础知识介绍(一)
  17. 分数在c语言程序中怎么输入,如何在c语言中实现分数相加,以分数形式输出,并化为最简...
  18. Linux学习笔记(管道)
  19. 驾考记录之科目三(2021-06-16)(上海旗忠考场)
  20. Java框架入门篇——Spring

热门文章

  1. (30 gadget day 8) 你爱我有几分 — Mindwave mobile
  2. 安装windows7系统报错
  3. 语音网关典型配置实例
  4. win10使用import pcap 建议放弃,还是使用linux系统吧
  5. 翻译 Real-Time Global Localization of Robotic Cars in Lane Level via Lane Marking Detection and Shape
  6. numpy.reshape
  7. __setattr__,__getattr__,__delattr__
  8. 数据--第24课 - 队列的特别实现
  9. 年入百万的表弟给我上一课:互联网思维该怎么接地气
  10. JavaWeb项目架构之Kafka分布式日志队列