加入收藏 | 设为首页 | 会员中心 | 我要投稿 核心网 (https://www.hxwgxz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 建站 > 正文

Python数据科学:神经网络

发布时间:2019-05-11 01:52:52 所属栏目:建站 来源:小F
导读:(Artificial Neural Network,ANN)人工神经网络模型,以数学和物理的方法对人脑神经网络进行简化、抽象和模拟。 本次只是一个简单的神经网络入门,涉及神经元模型和BP神经网络。 这里简单了解一下机器学习的三要素,分别是模型、策略与算法。 模型包括非随

建立多层感知器模型。

  1. # 设置多层感知器对应的模型 
  2. mlp = MLPClassifier(hidden_layer_sizes=(10,), activation='logistic', alpha=0.1, max_iter=1000) 
  3. # 对训练集进行模型训练 
  4. mlp.fit(scaled_train_data, train_target) 
  5. # 输出神经网络模型信息 
  6. print(mlp) 

输出模型信息如下。

接下来使用经过训练集训练的模型,对训练集及测试集进行预测。

  1. # 使用模型进行预测 
  2. train_predict = mlp.predict(scaled_train_data) 
  3. test_predict = mlp.predict(scaler_test_data) 

输出预测概率,用户流失的概率。

  1. # 输出模型预测概率(为1的情况) 
  2. train_proba = mlp.predict_proba(scaled_train_data)[:, 1] 
  3. test_proba = mlp.predict_proba(scaler_test_data)[:, 1] 

对模型进行评估,输出评估数据。

  1. # 根据预测信息输出模型评估结果 
  2. print(metrics.confusion_matrix(test_target, test_predict, labels=[0, 1])) 
  3. print(metrics.classification_report(test_target, test_predict)) 

输出如下。

模型对流失用户的f1-score(精确率和召回率的调和平均数)值为0.81,效果不错。

此外对流失用户的灵敏度recall为0.83,模型能识别出83%的流失用户,说明模型识别流失用户的能力还可以。

输出模型预测的平均准确度。

  1. # 使用指定数据集输出模型预测的平均准确度 
  2. print(mlp.score(scaler_test_data, test_target)) 
  3. # 输出值为0.8282828282828283 

平均准确度值为0.8282。

计算模型的ROC下面积。

  1. # 绘制ROC曲线 
  2. fpr_test, tpr_test, th_test = metrics.roc_curve(test_target, test_proba) 
  3. fpr_train, tpr_train, th_train = metrics.roc_curve(train_target, train_proba) 
  4. plt.figure(figsize=[3, 3]) 
  5. plt.plot(fpr_test, tpr_test, 'b--') 
  6. plt.plot(fpr_train, tpr_train, 'r-') 
  7. plt.title('ROC curve') 
  8. plt.show() 
  9.  
  10. # 计算AUC值 
  11. print(metrics.roc_auc_score(test_target, test_proba)) 
  12. # 输出值为0.9149632415075206 

ROC曲线图如下。

训练集和测试集的曲线很接近,没有过拟合现象。

AUC值为0.9149,说明模型效果非常好。

对模型进行最优参数搜索,并且对最优参数下的模型进行训练。

  1. # 使用GridSearchCV进行最优参数搜索 
  2. param_grid = { 
  3.     # 模型隐层数量 
  4.     'hidden_layer_sizes': [(10, ), (15, ), (20, ), (5, 5)], 
  5.     # 激活函数 
  6.     'activation': ['logistic', 'tanh', 'relu'], 
  7.     # 正则化系数 
  8.     'alpha': [0.001, 0.01, 0.1, 0.2, 0.4, 1, 10] 
  9.  
  10. mlp = MLPClassifier(max_iter=1000) 
  11. # 选择roc_auc作为评判标准,4折交叉验证,n_jobs=-1使用多核CPU的全部线程 
  12. gcv = GridSearchCV(estimator=mlp, param_grid=param_grid, 
  13.                    scoring='roc_auc', cv=4, n_jobs=-1) 
  14. gcv.fit(scaled_train_data, train_target) 

输出最优参数的模型的情况。

  1. # 输出最优参数下模型的得分 
  2. print(gcv.best_score_) 
  3. # 输出值为0.9258018987136855 
  4.  
  5. # 输出最优参数下模型的参数 
  6. print(gcv.best_params_) 
  7. # 输出参数值为{'alpha': 0.01, 'activation': 'tanh', 'hidden_layer_sizes': (5, 5)} 
  8.  
  9. # 使用指定数据集输出最优模型预测的平均准确度 
  10. print(gcv.score(scaler_test_data, test_target)) 
  11. # 输出值为0.9169384823390232 

模型的roc_auc最高得分为0.92,即该模型下的ROC曲线下面积为0.92。

较之前的0.9149,提高了一点点。

模型的最优参数,激活函数为relu类型,alpha为0.01,隐藏层节点数为15个。

模型的预测平均准确率为0.9169,较之前的0.8282,提高了不少。

(编辑:核心网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读