| 
                         建立多层感知器模型。 
- # 设置多层感知器对应的模型 
 - mlp = MLPClassifier(hidden_layer_sizes=(10,), activation='logistic', alpha=0.1, max_iter=1000) 
 - # 对训练集进行模型训练 
 - mlp.fit(scaled_train_data, train_target) 
 - # 输出神经网络模型信息 
 - print(mlp) 
 
  
输出模型信息如下。 
接下来使用经过训练集训练的模型,对训练集及测试集进行预测。 
- # 使用模型进行预测 
 - train_predict = mlp.predict(scaled_train_data) 
 - test_predict = mlp.predict(scaler_test_data) 
 
  
输出预测概率,用户流失的概率。 
- # 输出模型预测概率(为1的情况) 
 - train_proba = mlp.predict_proba(scaled_train_data)[:, 1] 
 - test_proba = mlp.predict_proba(scaler_test_data)[:, 1] 
 
  
对模型进行评估,输出评估数据。 
- # 根据预测信息输出模型评估结果 
 - print(metrics.confusion_matrix(test_target, test_predict, labels=[0, 1])) 
 - print(metrics.classification_report(test_target, test_predict)) 
 
  
输出如下。 
模型对流失用户的f1-score(精确率和召回率的调和平均数)值为0.81,效果不错。 
此外对流失用户的灵敏度recall为0.83,模型能识别出83%的流失用户,说明模型识别流失用户的能力还可以。 
输出模型预测的平均准确度。 
- # 使用指定数据集输出模型预测的平均准确度 
 - print(mlp.score(scaler_test_data, test_target)) 
 - # 输出值为0.8282828282828283 
 
  
平均准确度值为0.8282。 
计算模型的ROC下面积。 
- # 绘制ROC曲线 
 - fpr_test, tpr_test, th_test = metrics.roc_curve(test_target, test_proba) 
 - fpr_train, tpr_train, th_train = metrics.roc_curve(train_target, train_proba) 
 - plt.figure(figsize=[3, 3]) 
 - plt.plot(fpr_test, tpr_test, 'b--') 
 - plt.plot(fpr_train, tpr_train, 'r-') 
 - plt.title('ROC curve') 
 - plt.show() 
 -  
 - # 计算AUC值 
 - print(metrics.roc_auc_score(test_target, test_proba)) 
 - # 输出值为0.9149632415075206 
 
  
ROC曲线图如下。 
训练集和测试集的曲线很接近,没有过拟合现象。 
AUC值为0.9149,说明模型效果非常好。 
对模型进行最优参数搜索,并且对最优参数下的模型进行训练。 
- # 使用GridSearchCV进行最优参数搜索 
 - param_grid = { 
 -     # 模型隐层数量 
 -     'hidden_layer_sizes': [(10, ), (15, ), (20, ), (5, 5)], 
 -     # 激活函数 
 -     'activation': ['logistic', 'tanh', 'relu'], 
 -     # 正则化系数 
 -     'alpha': [0.001, 0.01, 0.1, 0.2, 0.4, 1, 10] 
 - } 
 -  
 - mlp = MLPClassifier(max_iter=1000) 
 - # 选择roc_auc作为评判标准,4折交叉验证,n_jobs=-1使用多核CPU的全部线程 
 - gcv = GridSearchCV(estimator=mlp, param_grid=param_grid, 
 -                    scoring='roc_auc', cv=4, n_jobs=-1) 
 - gcv.fit(scaled_train_data, train_target) 
 
  
输出最优参数的模型的情况。 
- # 输出最优参数下模型的得分 
 - print(gcv.best_score_) 
 - # 输出值为0.9258018987136855 
 -  
 - # 输出最优参数下模型的参数 
 - print(gcv.best_params_) 
 - # 输出参数值为{'alpha': 0.01, 'activation': 'tanh', 'hidden_layer_sizes': (5, 5)} 
 -  
 - # 使用指定数据集输出最优模型预测的平均准确度 
 - print(gcv.score(scaler_test_data, test_target)) 
 - # 输出值为0.9169384823390232 
 
  
模型的roc_auc最高得分为0.92,即该模型下的ROC曲线下面积为0.92。 
较之前的0.9149,提高了一点点。 
模型的最优参数,激活函数为relu类型,alpha为0.01,隐藏层节点数为15个。 
模型的预测平均准确率为0.9169,较之前的0.8282,提高了不少。                         (编辑:泰州站长网) 
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! 
                     |