| 建立多层感知器模型。 # 设置多层感知器对应的模型 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,提高了不少。 (编辑:晋中站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |