PYTHON银行机器学习:回归、随机森林、KNN近邻、决策树、高斯朴素贝叶斯、支持向量机SVM分析营销活动数据|数据分享-3
https://developer.aliyun.com/article/1489342
KNN近邻
classifier = KNeighborsClassifier(n_neighbors =13,metric = 'minkowski' , p=2) print("Mean accuracy: ",accuracyknn/K) print("The best AUC: ", bestaucknn)
\[\[7952 30\] \[1046 15\]\]
\[\[7987 30\] \[1010 15\]\]
\[\[7989 23\] \[1017 13\]\]
\[\[7920 22\] \[1083 17\]\]
\[\[7948 21\] \[1052 21\]\]
高斯朴素贝叶斯
kf = KFold(n_splits=K, shuffle=True) gaussian = GaussianNB()
\[\[7340 690\] \[ 682 331\]\]
\[\[7321 633\] \[ 699 389\]\]
\[\[7291 672\] \[ 693 386\]\]
\[\[7300 659\] \[ 714 369\]\]
\[\[7327 689\] \[ 682 344\]\]
`````` models = pd.DataFrame({ 'Model': \['KNN', 'Logistic Regression', 'Naive Bayes', 'Decision Tree','Random Forest'\], 'Score': \[ accuracyknn/K, accuracylogreg/K, accuracygnb/K, accuracydt/K, accuracyrf/K\], 'BestAUC': \[bestaucknn,bestauclogreg,bestaucgnb, bestaucdt,bestaucrf\]})
我们看到根据 AUC 值的最佳模型是朴素贝叶斯我们不应该太在意最低的 R2 分数,因为数据非常不平衡(很容易预测 y=0)。在混淆矩阵中,我们看到它预测了漂亮的价值真正值和负值。令我们惊讶的是,决策树的 AUC 约为 50%。
欠采样
我们尝试对变量 y=0 进行欠采样
gTrain, gValid = train\_test\_split
逻辑回归
predsTrain = logreg.predict(gTrainUrandom)
predsTrain = logreg.predict(gTrain20Urandom)
predsTrain = logreg.predict(gTrrandom)
决策树
`````` print("Train AUC:", metrics.roc\_auc\_score(ygTrds))
随机森林
print("Train AUC:", metrics.roc\_auc\_score(ygTr, predsTrain), "Valid AUC:", metrics.roc\_auc\_score(ygVd, preds))
KNN近邻
print("Train AUC:", metrics.roc\_auc\_score(ygTrm, predsTrain), "Valid AUC:", metrics.roc\_auc\_score(ygVal10, preds))
高斯朴素贝叶斯
print("Train AUC:", metrics.roc\_auc\_score(ygTraom, predsTrain), "Valid AUC:", metrics.roc\_auc\_score(ygid, preds))
过采样
我们尝试对变量 y=1 进行过采样
feates = datolist() print(feures) feaes.remove('y')
print(gTrainOSM.shape)
(31945, 39) `````` smt = SMOT
(32345, 39) `````` smt = SMOT
(32595, 39) `````` ygTrain10OSM=gTrain10OSM\['y'\] gTrain10OSM=gTrain10OSM.drop(columns=\['y'\])
逻辑回归
print("Train AUC:", metrics.roc\_auc\_score(ygTrin10SM, predsTrain), "Valid AUC:", metrics.roc\_auc\_score(ygValid, preds))
决策树
dt2.fit(,ygTranOS) predsTrain = dtpreict(TrainOSM) preds = dt2.predict(gValid)
随机森林
random_forest.fit(rainOSM, ygTranOS) predsTrain = random_forest.prect(gTraiOSM) p
KNN近邻
classifier.fit(granOSM, yTanOSM) predsTrain = classifier.predict(gTaiSM) preds = classifier.predict(Vaid)
高斯朴素贝叶斯
gaussian.fit(gTriOM, ygrainM) predsTrain = gaussian.predcti)
结论
我们看到欠采样和过采样变量 y 对 AUC 没有太大帮助。