神经网络判断红楼梦的作者
最近发现了一篇有意思的文章,用SVM去判断红楼梦的作者是不是同一个人
原理就是在文言文中,文言虚词分布均匀,书中每个回目都会出现很多文言虚词,差别在于出现频率不同,我们把文言虚词的出现频率作为特征。
所以我也用了神经网络实现了一下,因为训练样本较小,直接做了一个2层神经网络
#!/usr/bin/python
# -*- coding:utf-8 -*-
import numpy as np
import tflearn
from tflearn.data_utils import to_categorical
trainset = np.load('trainset.npy')
train_data = list(trainset[:, 0:-1]) # 去除label后的特征数据
train_data_label = list(trainset[:, -1]) # label
train_y = []
for x in train_data_label:
if x == 1 :
train_y.append([1,0])
else:
train_y.append([0,1])
print(train_y)
net = tflearn.input_data(shape=[None, 55])
# net = tflearn.embedding(net, input_dim=56, output_dim=128)
net = tflearn.fully_connected(net, 8)
net = tflearn.fully_connected(net, 8)
# net = tflearn.dropout(net, 0.8)
net = tflearn.fully_connected(net, 2, activation='softmax')
net = tflearn.regression(net)
model = tflearn.DNN(net, tensorboard_dir='tflearn_logs')
model.fit(train_data, train_y, n_epoch=100, show_metric=True)
testset = np.load('testset.npy')
test_data = testset[:, 0:-1] # 去除label后的特征数据
def make_print():
r_final = []
r = model.predict(test_data)
for x in r:
if x[0]>0.5 :
r_final.append(1)
else :
r_final.append(2)
return r_final
print(make_print()[0:80])
print(make_print()[80:120])
结果和SVM的差不多,都可以证明是2个作者所写的
前80回结果[1, 1, 1, 1, 1, 2, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 2, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
后40回结果
[1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2]
预先处理是直接用的SVM的github项目
项目地址:https://github.com/Huangtuzhi/reality-of-Dream-of-Red-Mansions

浙公网安备 33010602011771号