建立多层感知器模型。
- # 设置多层感知器对应的模型
- 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,提高了不少。
(编辑:ASP站长网)
|