机器学习平凡之路七
- 循环神经网络
- 实例操作
循环神经网络
序列数据
序列数据,是特征的先后顺序对于数据的解释和处理十分重要的数据
语音数据,文本数据都是序列数据。比如一句话放在前面或者放在后面,会使文意有很大的不同
文本数据集的形状为3D张量(样本,序号,字编码)
时间序列数据,按时间顺序进行收集,用于描述现象随时间变化的情况,如果不记录时间戳,数字本身就没有意义
序列数据可以应用的场景:
- 文档分类,识别新闻的主题和书的类型,作者等
- 文档或时间序列对比,比如估测两个文档或两支股票的相关程度
- 文字情感分析,比如评论等情感划分为正面或者负面
- 时间序列预测,预测某地天气的历史数据来预测未来天气。
- 序列到序列的学习,比如两种语言之间的翻译
使用循环神经网络专门处理序列数据而生。它是一种具有记忆功能的神经网络,特点是能够把刚刚处理过的信息放进神经网络内存中。
原始文本如何转化为向量数据
通过One-hot编码分词
1 | from keras.preprocessing.text import Tokenizer |
会存在一个问题本来2个单词,增加到了30维度。一般也就是常人说的维度灾难。解决这个问题,就是使用词嵌入。降低其维度,让本来的0,1本成包含一个意义的数字
实例操作
用Tokennizer进行分词
1 | import pandas as pd |
1 | from keras.preprocessing.text import Tokenizer |
大部分的评论长度都在120以内
1 | from keras.preprocessing.sequence import pad_sequences |
通过pad_sequences截取成相同的长度,长度大于120截断,小于120,填充无意义的0值
构建SimpleRNN
1 | import tensorflow as tf |
1 | history = rnn.fit(X_train,y_train, |
1 | y = rnn.predict(X_test[1]) |
预测结果代码使用
定义恒星是否有行星环绕
代码如下
1 | from sklearn.utils import shuffle # 导入乱序工具 |
以上是CNN和RNN的组合
函数式API构建
1 | from keras.optimizers import Adam # 导入Adam优化器 |
构建多头网络
1 | # 构建正向网络 |
需要注意的点
- 数据集在升维之前,数据集进行逆序
1 | X_train_rev = [X[::-1] for X in X_train] # 数据逆序之后再进行升阶 |
- 训练模型时同时指定正序和逆序数据集作为输入
1 | model.fit([X_train, X_train_rev],y_train, |