1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > 拓端tecdat|Python使用神经网络进行简单文本分类

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

时间:2018-11-17 04:36:18

相关推荐

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

原文链接:/?p=8613

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

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

准备数据集

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

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

导入所需的软件包

Python

import pandas as pdimport numpy as npimport picklefrom keras.preprocessing.text import Tokenizerfrom keras.models import Sequentialfrom keras.layers import Activation, Dense, Dropoutfrom sklearn.preprocessing import LabelBinarizerimport sklearn.datasets as skdsfrom pathlib import Path

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

Python

# 为了复现性np.random.seed(1237)label_index = files_train.targetlabel_names = files_train.target_nameslabelled_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 = 20vocab_size = 15000batch_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.0000200/8145 [..............................] - ETA: 31s - loss: 0.0186 - acc: 0.9950300/8145 [>.............................] - ETA: 35s - loss: 0.0125 - acc: 0.9967400/8145 [>.............................] - ETA: 32s - loss: 0.0094 - acc: 0.9975500/8145 [>.............................] - ETA: 30s - loss: 0.0153 - acc: 0.9960...7900/8145 [============================>.] - ETA: 0s - loss: 0.1256 - acc: 0.98548000/8145 [============================>.] - ETA: 0s - loss: 0.1261 - acc: 0.98558100/8145 [============================>.] - ETA: 0s - loss: 0.1285 - acc: 0.98548145/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.graphicsFile -> C:\DL\20news-bydate\20news-bydate-test\misc.forsale\76115 Predicted label: misc.forsaleFile -> 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使用贝叶斯优化的深度学习

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。