深度学习:Keras使用神经网络进行简单文本分类分析新闻组数据

简介: 深度学习:Keras使用神经网络进行简单文本分类分析新闻组数据

深度学习无处不在。在本文中,我们将使用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.filenames
 
data_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定义Tokenizer
tokenizer = 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.8742
 
Test 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:DL20news-bydate20news-bydate-testcomp.graphics38758 Predicted label: comp.graphics
File -> C:DL20news-bydate20news-bydate-testmisc.forsale76115 Predicted label: misc.forsale
File -> C:DL20news-bydate20news-bydate-testsoc.religion.christian21329 Predicted label: soc.religion.christian


我们知道目录名是文件的真实标签,因此上述预测是准确的。

结论

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

相关文章
|
3天前
|
机器学习/深度学习 算法 开发者
深度学习的魔法:用神经网络识别手写数字
【9月更文挑战第2天】在这篇技术文章中,我们将一起探索深度学习的奥秘,并尝试使用神经网络来识别手写数字。通过简单的代码示例,我们将了解如何构建和训练一个深度学习模型,以及如何使用它来进行手写数字的识别。无论你是初学者还是有经验的开发者,这篇文章都将为你提供有价值的见解和实践技巧。
|
4天前
|
机器学习/深度学习 人工智能 自然语言处理
深度学习中的艺术:探索神经网络的奥秘
【9月更文挑战第2天】 在人工智能的宏伟画卷中,深度学习以其独特的魅力和强大的能力占据了中心舞台。本文将深入浅出地探讨深度学习的核心——神经网络,揭示其如何模拟人脑处理信息的方式,以及它在图像识别、自然语言处理等领域的应用。我们将从基础概念出发,逐步深入到网络结构的设计思想,最后探讨深度学习面临的挑战与未来发展方向。通过本文,读者将获得对深度学习基本原理的理解,并激发进一步探索这一领域的好奇心。
|
5天前
|
存储 安全 算法
取证分析在网络安全中的关键作用
【8月更文挑战第31天】
12 0
|
5天前
|
机器学习/深度学习 运维 监控
|
5天前
|
机器学习/深度学习 人工智能 自然语言处理
深度学习中的卷积神经网络(CNN)入门
【8月更文挑战第31天】在人工智能的浪潮中,深度学习以其强大的数据处理能力成为时代的宠儿。本文将引导你走进深度学习的核心组件之一——卷积神经网络(CNN),并带你一探其背后的奥秘。通过简明的语言和直观的代码示例,我们将一起构建一个简易的CNN模型,理解它在图像处理领域的应用,并探索如何利用Python和TensorFlow实现它。无论你是初学者还是有一定基础的开发者,这篇文章都将为你打开一扇通往深度学习世界的大门。
|
5天前
|
测试技术 数据库
探索JSF单元测试秘籍!如何让您的应用更稳固、更高效?揭秘成功背后的测试之道!
【8月更文挑战第31天】在 JavaServer Faces(JSF)应用开发中,确保代码质量和可维护性至关重要。本文详细介绍了如何通过单元测试实现这一目标。首先,阐述了单元测试的重要性及其对应用稳定性的影响;其次,提出了提高 JSF 应用可测试性的设计建议,如避免直接访问外部资源和使用依赖注入;最后,通过一个具体的 `UserBean` 示例,展示了如何利用 JUnit 和 Mockito 框架编写有效的单元测试。通过这些方法,不仅能够确保代码质量,还能提高开发效率和降低维护成本。
16 0
|
5天前
|
机器学习/深度学习 人工智能 TensorFlow
深度学习入门:使用Python和TensorFlow构建你的第一个神经网络
【8月更文挑战第31天】 本文是一篇面向初学者的深度学习指南,旨在通过简洁明了的语言引导读者了解并实现他们的第一个神经网络。我们将一起探索深度学习的基本概念,并逐步构建一个能够识别手写数字的简单模型。文章将展示如何使用Python语言和TensorFlow框架来训练我们的网络,并通过直观的例子使抽象的概念具体化。无论你是编程新手还是深度学习领域的新兵,这篇文章都将成为你探索这个激动人心领域的垫脚石。
|
2天前
|
机器学习/深度学习 TensorFlow 算法框架/工具
深度学习在图像识别中的应用与挑战
【9月更文挑战第2天】本文将探讨深度学习技术如何在图像识别领域大放异彩,并分析其面临的主要挑战。我们将通过一个实际的代码示例,展示如何利用深度学习模型进行图像分类任务,从而让读者对深度学习在图像识别中的应用有一个直观的理解。
38 22
|
4天前
|
机器学习/深度学习 人工智能 自动驾驶
深度学习的浪潮之下:探索其奥秘与应用
在人工智能的星空中,深度学习犹如一颗璀璨的星辰,以其独特的魅力和强大的能力引领着科技的潮流。本文将深入浅出地介绍深度学习的核心概念、关键技术以及在多个领域的实际应用,旨在为读者揭开深度学习神秘的面纱,展示其如何改变我们的生活和工作方式。
|
3天前
|
机器学习/深度学习 安全 算法框架/工具
深度学习在图像识别中的应用与挑战
【8月更文挑战第33天】本文将探讨深度学习如何革新图像识别领域,从基础概念到技术挑战,再到未来展望。我们将通过实际代码示例深入理解卷积神经网络(CNN)的构建和训练过程,并讨论如何克服深度学习在图像识别中面临的主要难题。

热门文章

最新文章

下一篇
DDNS