完整演示代码请见本书GitHub上的15-5.py。
1.数据清洗与特征提取
我们尝试使用DNN算法进行训练与分类,数据清洗与特征提取方式与上例一致。
2.训练
我们使用TensorFlow提供的Scikit-Learn风格的接口,相对于TensorFlow原生的API接口,Scikit-Learn风格的接口更加简洁,比如构造多层隐藏层时,只要设置即可,不用反复调用创建隐藏层的函数。以创建两层隐藏层的DNN为例:
x_train, x_test, y_train, y_test=load_SpamBase("../data/spambase/spambase.data") feature_columns = tf.contrib.learn.infer_real_valued_columns_from_input(x_train) classifier = tf.contrib.learn.DNNClassifier( feature_columns=feature_columns, hidden_units=[30,10], n_classes=2)
其中hidden_units=[30,10]表明具有两层隐藏层,每层节点数分别为30和10。对训练集合进行训练,其中steps=500表明训练500个批次,batch_size=10表明每个批次有10个训练数据:
classifier.fit(x_train, y_train, steps=500,batch_size=10) y_predict=list(classifier.predict(x_test, as_iterable=True))
3.验证
使用测试数据集进行分类,得到分类结果y_predict,将y_predict与训练测试集的标记y_test进行比对,得到测试结果:
score = metrics.accuracy_score(y_test, y_predict) print('Accuracy: {0:f}'.format(score))
测试结果准确率约为87%,比朴素贝叶斯略好:
Accuracy: 0.866377