(1)Logistic Regression (逻辑回归)模型
训练 Logistic Regression (逻辑回归)模型,并评估其性能。在模型的性能报告中包括准确率以及其他分类指标,以帮助我们了解模型在测试数据上的表现。具体实现代码如下所示。
LRclassifier = LogisticRegression(solver='saga', max_iter=500, random_state=1)
LRclassifier.fit(X_train, y_train)
y_pred = LRclassifier.predict(X_test)
print(classification_report(y_test, y_pred))
print(confusion_matrix(y_test, y_pred))
from sklearn.metrics import accuracy_score
LRAcc = accuracy_score(y_pred,y_test)
print('LR accuracy: {:.2f}%'.format(LRAcc*100))
对上述代码的具体说明如下:
执行会输出:
precision recall f1-score support
0 0.83 0.87 0.85 23
1 0.86 0.82 0.84 22
accuracy 0.84 45
macro avg 0.85 0.84 0.84 45
weighted avg 0.84 0.84 0.84 45
[[20 3]
[ 4 18]]
LR accuracy: 84.44%
(2)K-Nearest Neighbour (KNN)模型
通过 K-Nearest Neighbors (KNN) 分类器,针对不同的 k 值,评估模型的准确率。具体实现代码如下所示。
scoreListknn = []
for i in range(1,21):
KNclassifier = KNeighborsClassifier(n_neighbors = i)
KNclassifier.fit(X_train, y_train)
scoreListknn.append(KNclassifier.score(X_test, y_test))
plt.plot(range(1,21), scoreListknn)
plt.xticks(np.arange(1,21,1))
plt.xlabel("K value")
plt.ylabel("Score")
plt.show()
KNAcc = max(scoreListknn)
print("KNN best accuracy: {:.2f}%".format(KNAcc*100))
执行后输出:
KNN best accuracy: 91.11%
(3)Support Vector Machine (SVM)模型
使用支持向量机 (Support Vector Machine, SVM) 分类器,采用径向基核函数(RBF kernel)来训练模型,并对测试数据进行预测。具体实现代码如下所示。
SVCclassifier = SVC(kernel='rbf', max_iter=500)
SVCclassifier.fit(X_train, y_train)
y_pred = SVCclassifier.predict(X_test)
print(classification_report(y_test, y_pred))
print(confusion_matrix(y_test, y_pred))
from sklearn.metrics import accuracy_score
SVCAcc = accuracy_score(y_pred,y_test)
print('SVC accuracy: {:.2f}%'.format(SVCAcc*100))
执行后输出:
precision recall f1-score support
0 0.87 0.87 0.87 23
1 0.86 0.86 0.86 22
accuracy 0.87 45
macro avg 0.87 0.87 0.87 45
weighted avg 0.87 0.87 0.87 45
[[20 3]
[ 3 19]]
SVC accuracy: 86.67%
(4)贝叶斯模型
首先,创建一个名为 NBclassifier1 的分类朴素贝叶斯分类器 (CategoricalNB),使用分类朴素贝叶斯分类器 (Categorical Naive Bayes) 来训练模型,并对测试数据进行预测。具体实现代码如下所示。
precision recall f1-score support
0 0.81 0.74 0.77 23
1 0.75 0.82 0.78 22
accuracy 0.78 45
macro avg 0.78 0.78 0.78 45
weighted avg 0.78 0.78 0.78 45
[[17 6]
[ 4 18]]
Categorical Naive Bayes accuracy: 77.78%
执行后输出:
precision recall f1-score support
0 0.81 0.74 0.77 23
1 0.75 0.82 0.78 22
accuracy 0.78 45
macro avg 0.78 0.78 0.78 45
weighted avg 0.78 0.78 0.78 45
[[17 6]
[ 4 18]]
Categorical Naive Bayes accuracy: 77.78%
然后,创建一个名为 NBclassifier2 的高斯朴素贝叶斯分类器 (GaussianNB),使用高斯朴素贝叶斯分类器 (Gaussian Naive Bayes) 来训练模型,并对测试数据进行预测。具体实现代码如下所示。
NBclassifier2 = GaussianNB()
NBclassifier2.fit(X_train, y_train)
y_pred = NBclassifier2.predict(X_test)
print(classification_report(y_test, y_pred))
print(confusion_matrix(y_test, y_pred))
from sklearn.metrics import accuracy_score
NBAcc2 = accuracy_score(y_pred,y_test)
print('Gaussian Naive Bayes accuracy: {:.2f}%'.format(NBAcc2*100))
这段代码用于构建和评估使用高斯朴素贝叶斯分类器的模型,并提供了模型的性能指标。与之前的分类朴素贝叶斯不同,高斯朴素贝叶斯假设特征变量是连续分布的,而不是离散的。执行后输出:
precision recall f1-score support
0 0.77 0.87 0.82 23
1 0.84 0.73 0.78 22
accuracy 0.80 45
macro avg 0.81 0.80 0.80 45
weighted avg 0.80 0.80 0.80 45
[[20 3]
[ 6 16]]
Gaussian Naive Bayes accuracy: 80.00%
(5) Decision Tree模型
使用决策树分类器 (Decision Tree Classifier) 进行模型训练和评估,通过调整决策树的叶子节点数量来寻找最佳模型配置,并显示不同配置下的模型准确率,这有助于确定决策树模型的最佳超参数设置。具体实现代码如下所示。
scoreListDT = []
for i in range(2,21):
DTclassifier = DecisionTreeClassifier(max_leaf_nodes=i)
DTclassifier.fit(X_train, y_train)
scoreListDT.append(DTclassifier.score(X_test, y_test))
plt.plot(range(2,21), scoreListDT)
plt.xticks(np.arange(2,21,1))
plt.xlabel("Leaf")
plt.ylabel("Score")
plt.show()
DTAcc = max(scoreListDT)
print("Decision Tree Accuracy: {:.2f}%".format(DTAcc*100))
执行后输出:
Decision Tree Accuracy: 86.67%
(6)Random Forest模型
使用随机森林分类器 (Random Forest Classifier) 进行模型训练和评估,同时尝试不同的最大叶子节点数量来寻找最佳模型配置。具体实现代码如下所示。
scoreListRF = []
for i in range(2,25):
RFclassifier = RandomForestClassifier(n_estimators = 1000, random_state = 1, max_leaf_nodes=i)
RFclassifier.fit(X_train, y_train)
scoreListRF.append(RFclassifier.score(X_test, y_test))
plt.plot(range(2,25), scoreListRF)
plt.xticks(np.arange(2,25,1))
plt.xlabel("RF Value")
plt.ylabel("Score")
plt.show()
RFAcc = max(scoreListRF)
print("Random Forest Accuracy: {:.2f}%".format(RFAcc*100))
执行后输出:
Random Forest Accuracy: 93.33%
(7)Gradient Boosting模型
首先使用随机搜索方法,在给定的超参数空间中搜索最佳的梯度提升分类器的超参数组合,以达到模型性能的最优化。具体实现代码如下所示。
paramsGB={'n_estimators':[100,200,300,400,500],
'max_depth':[1,2,3,4,5],
'subsample':[0.5,1],
'max_leaf_nodes':[2,5,10,20,30,40,50]}
GB = RandomizedSearchCV(GradientBoostingClassifier(), paramsGB, cv=20)
GB.fit(X_train, y_train)
执行后输出:
RandomizedSearchCV(cv=20, estimator=GradientBoostingClassifier(),
param_distributions={'max_depth': [1, 2, 3, 4, 5],
'max_leaf_nodes': [2, 5, 10, 20, 30, 40,
50],
'n_estimators': [100, 200, 300, 400,
500],
'subsample': [0.5, 1]})
然后取随机搜索 (RandomizedSearchCV) 过程中找到的最佳模型和超参数的相关信息,通过查看这些信息,您可以了解到在随机搜索过程中找到的性能最佳的模型、最佳分数以及与该模型相关的超参数的值。这些信息对于进一步优化和调整模型非常有用。具体实现代码如下所示。
print(GB.best_estimator_)
print(GB.best_score_)
print(GB.best_params_)
print(GB.best_index_)
执行后输出:
GradientBoostingClassifier(max_depth=4, max_leaf_nodes=50, n_estimators=400,
subsample=1)
0.8270833333333332
{'subsample': 1, 'n_estimators': 400, 'max_leaf_nodes': 50, 'max_depth': 4}
9
最后训练一个梯度提升分类器 (GradientBoostingClassifier) 并对测试数据进行了预测。接下来,您打印了分类报告 (classification_report) 和混淆矩阵 (confusion_matrix),以评估模型的性能,并计算了模型的准确性。具体实现代码如下所示。
precision recall f1-score support
0 0.77 0.87 0.82 23
1 0.84 0.73 0.78 22
accuracy 0.80 45
macro avg 0.81 0.80 0.80 45
weighted avg 0.80 0.80 0.80 45
[[20 3]
[ 6 16]]
Gradient Boosting accuracy: 80.00%
执行后输出:
precision recall f1-score support
0 0.77 0.87 0.82 23
1 0.84 0.73 0.78 22
accuracy 0.80 45
macro avg 0.81 0.80 0.80 45
weighted avg 0.80 0.80 0.80 45
[[20 3]
[ 6 16]]
Gradient Boosting accuracy: 80.00%
创建一个比较不同机器学习模型准确性的 DataFrame,并按准确性降序排列了这些模型。具体实现代码如下所示。
compare = pd.DataFrame({'Model': ['Logistic Regression', 'K Neighbors',
'SVM', 'Categorical NB',
'Gaussian NB', 'Decision Tree',
'Random Forest', 'Gradient Boost'],
'Accuracy': [LRAcc*100, KNAcc*100, SVCAcc*100,
NBAcc1*100, NBAcc2*100, DTAcc*100,
RFAcc*100, GBAcc*100]})
compare.sort_values(by='Accuracy', ascending=False)
执行后输出:
Model Accuracy
6 Random Forest 93.333333
1 K Neighbors 91.111111
2 SVM 86.666667
5 Decision Tree 86.666667
0 Logistic Regression 84.444444
4 Gaussian NB 80.000000
7 Gradient Boost 80.000000
3 Categorical NB 77.777778
从上述结果可以看出,Gradient Boost 模型在这个问题上表现最佳,具有最高的准确性。这些结果可以帮助银行选择最适合他们的任务的机器学习模型。
本篇已完结
(10-2-01)贷款预测模型-CSDN博客
(10-2-02)贷款预测模型-CSDN博客
(10-2-03)贷款预测模型-CSDN博客
(10-2-04)贷款预测模型-CSDN博客