设置2个隐藏层,隐藏层节点数都为5,隐藏层都使用ReLu激活函数。
- # 设置两个隐藏层,采用ReLu激活函数
- NN = NNClassifier(n = [np.nan,5,5,1],alpha = 0.02,
- ITERNUM = 200000, gfunc = 'ReLu')
- NN.fit(X_train,y_train)
- # 绘制目标函数迭代曲线
- %matplotlib inline
- NN.dfJ.plot(figsize = (12,8))
- # 测试在验证集的auc得分
- from sklearn.metrics import roc_auc_score
- Y_prob = NN.predict_prob(X_test)
- roc_auc_score(list(y_test),list(Y_prob))
AUC得分0.99874比采用单隐藏层的最优得分0.99958有所降低,可能是模型复杂度过高,我们尝试减少隐藏层节点的个数至3以降低模型复杂度。
- # 双隐藏层,隐藏层节点数为3
- NN = NNClassifier(n = [np.nan,3,3,1],alpha = 0.02,
- ITERNUM = 200000, gfunc = 'ReLu')
- NN.fit(X_train,y_train)
- # 绘制目标函数迭代曲线
- %matplotlib inline
- NN.dfJ.plot(figsize = (12,8))
- # 测试在验证集的auc得分
- from sklearn.metrics import roc_auc_score
- Y_prob = NN.predict_prob(X_test)
- roc_auc_score(list(y_test),list(Y_prob))
AUC得分0.99979,又有所提高。
和sklearn中自带的神经网络分类器进行对比。
- # 和sklearn中的模型对比
- from sklearn.neural_network import MLPClassifier
- # 第一隐藏层神经元个数为3,第二隐藏层神经元个数为3
- MLPClf = MLPClassifier(hidden_layer_sizes=(3,3),max_iter=200000,activation='relu')
- MLPClf.fit(X_train,y_train)
- # 绘制目标函数迭代曲线
- dfJ = pd.DataFrame(data = np.array(MLPClf.loss_curve_),columns = ['J'])
- dfJ.plot(figsize = (12,8))
- # 测试在验证集的auc得分
- from sklearn.metrics import roc_auc_score
- Y_prob = MLPClf.predict_proba(X_test)[:,1]
- roc_auc_score(list(y_test),list(Y_prob))
以上试验表明,针对当前数据数据集,选择ReLu激活函数,采用双隐藏层,每个隐藏层节点数设置为3是一个不错的选择,AUC得分为0.99979。该得分高于采用CV交叉验证优化超参数后的逻辑回归模型的0.99897的AUC得分。
(编辑:东莞站长网)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|