深度学习: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库构建了一个简单而强大的神经网络。

相关文章
|
2天前
|
安全 网络安全 数据安全/隐私保护
网络安全与信息安全:保护你的数据,保护你的未来
【5月更文挑战第19天】在数字化世界中,网络安全和信息安全的重要性不言而喻。本文将深入探讨网络安全漏洞、加密技术以及安全意识等方面的问题,以期帮助读者更好地理解并应对这些挑战。我们将从网络攻击的常见形式开始,然后介绍一些防御策略,包括使用加密技术和提高安全意识等方法。最后,我们将讨论如何通过持续学习和适应来保持在这个快速发展的领域中的竞争力。
16 1
|
3天前
|
安全 网络协议 算法
网络安全与信息安全:保护你的数据,保护你的世界
【5月更文挑战第18天】在数字化的世界中,网络安全和信息安全已经成为我们生活的重要组成部分。本文将深入探讨网络安全漏洞、加密技术以及安全意识等方面的内容,帮助读者更好地理解和保护自己的数据。我们将讨论如何识别和防止网络安全威胁,如何使用加密技术来保护信息,以及如何提高自己的安全意识。
|
3天前
|
机器学习/深度学习 算法
揭秘深度学习中的对抗性网络:理论与实践
【5月更文挑战第18天】 在深度学习领域的众多突破中,对抗性网络(GANs)以其独特的机制和强大的生成能力受到广泛关注。不同于传统的监督学习方法,GANs通过同时训练生成器与判别器两个模型,实现了无监督学习下的高效数据生成。本文将深入探讨对抗性网络的核心原理,解析其数学模型,并通过案例分析展示GANs在图像合成、风格迁移及增强学习等领域的应用。此外,我们还将讨论当前GANs面临的挑战以及未来的发展方向,为读者提供一个全面而深入的视角以理解这一颠覆性技术。
|
4天前
|
机器学习/深度学习 人工智能 安全
网络安全与信息安全:保护数据的关键策略
【5月更文挑战第17天】在数字化时代,网络安全和信息安全已成为维护个人和企业资产的核心。本文将深入探讨网络安全漏洞的概念、加密技术的重要性以及提升安全意识的必要性。我们将分析当前网络环境中的安全挑战,介绍最新的加密方法,并分享如何培养强大的安全文化,以减少潜在的网络攻击和数据泄露风险。
|
5天前
|
机器学习/深度学习 数据可视化 PyTorch
使用Python实现深度学习模型:生成对抗网络(GAN)
使用Python实现深度学习模型:生成对抗网络(GAN)
20 3
|
6天前
|
安全 网络安全 数据安全/隐私保护
网络安全与信息安全:保护您的数据和隐私
【5月更文挑战第14天】本文将探讨网络安全漏洞、加密技术和安全意识等方面,以帮助读者更好地了解如何保护他们的数据和隐私。我们将讨论各种类型的网络攻击,以及如何使用加密技术来保护信息。此外,我们还将强调培养良好的安全习惯的重要性,以降低遭受网络攻击的风险。
|
1天前
|
机器学习/深度学习 算法 计算机视觉
构建高效图像分类模型:深度学习在特征提取中的应用
【5月更文挑战第20天】 在计算机视觉领域,图像分类任务是识别和分配数字图像到相应的类别中。随着深度学习技术的兴起,卷积神经网络(CNN)已经成为实现高精度图像分类的核心技术。本文将重点探讨利用深度学习进行图像特征提取的方法,并构建一个高效的图像分类模型。通过对比不同的网络架构、激活函数及其优化算法,我们旨在提供一套系统的方法论来改善模型的性能。
|
1天前
|
机器学习/深度学习 传感器 算法
深度学习在图像识别中的应用与挑战
【5月更文挑战第20天】 随着人工智能技术的飞速发展,深度学习已经成为计算机视觉领域的核心动力,尤其在图像识别任务中展现出了非凡的能力。本文将探讨深度学习技术在图像识别中的应用,涉及的关键算法如卷积神经网络(CNN),以及在实际应用中遇到的挑战和解决方案。通过分析现有文献和最新研究成果,我们将概述深度学习如何推动图像识别的边界,并讨论未来的发展方向。
|
1天前
|
机器学习/深度学习 传感器 自动驾驶
基于深度学习的图像识别技术在自动驾驶领域的应用进展
【5月更文挑战第20天】 随着人工智能技术的飞速发展,深度学习在图像识别领域取得了显著成果。这些进展为自动驾驶技术的安全性与可靠性提供了强大的技术支持。本文综述了深度学习在图像识别中的关键算法,分析了其在自动驾驶环境感知、决策制定和控制系统中的应用,并探讨了当前技术面临的主要挑战及潜在的解决策略。通过实验验证,深度学习模型表现出卓越的性能,推动了自动驾驶技术的进一步发展。
|
1天前
|
机器学习/深度学习 传感器 自动驾驶
基于深度学习的图像识别技术在自动驾驶系统中的应用
【5月更文挑战第20天】 随着人工智能技术的飞速发展,尤其是深度学习在图像处理领域的广泛应用,自动驾驶汽车逐渐成为现实。本文旨在探讨一种基于深度学习的图像识别技术,该技术能够有效提升自动驾驶系统的环境感知能力。通过构建一个多层次的卷积神经网络(CNN),我们能够实现对道路场景中多种元素的精确识别,包括行人、车辆以及交通标志等。文中详细介绍了网络架构的设计、训练过程以及优化策略,并分析了模型在实车测试中的表现。