一、导入模块
from sklearn.ensemble import RandomForestClassifier
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn import metrics
import numpy as np
二、加载x,y测试集训练集
x = np.array([[-1, -1],[-2, -1],
[1, 1],[2, 1],
[-1, 1],[-1, 2],
[1, -1],[1, -2],
[1, 1],[2, 2]])
y = np.array([1, 1, 0, 1, 0, 0, 1, 1, 0, 1])
# 1、得到测试集,测试集标签,训练集,训练集标签
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.2) # 按照80:20的比例切分数据
三、调用分类器
# 2、调用随机森林分类器
gbc = RandomForestClassifier(n_estimators=10, max_depth=5)
四、模型拟合
# 3、进行模型拟合
gbc.fit(x_train, y_train) # 拟合
五、输出测试集训练集准确率
# 4、输出训练集,测试集准确率
print("RF - Accuracy (Train): %.4g" % metrics.accuracy_score(y_train, gbc.predict(x_train)))
print("RF - Accuracy (Test): %.4g" % metrics.accuracy_score(y_test, gbc.predict(x_test)))
六、计算训练集的预测标签
y_pred1 = gbc.predict(x_test)
y_pred = y_pred1.round() # 如果只是出现概率值要用round()函数
print("label标签的类别分别如下: ", gbc.classes_) # 展示出各种类别
print("模型输入样本输入每种类别的概率,且取概率最大的类别作为样本预测结果: ", gbc.predict_proba([[5.7, 4.4]]))
print("模型预测输入样本所属的类别: ", gbc.predict([[5.7, 4.4]]))
七、输出预测集每个类别对应的概率
# 6、输出预测集的每个类别对应的概率
y_predprob = gbc.predict_proba(x_test)
print("y_predprob: ", y_predprob)
八、分析不同类别的准确率召回率
# 7、classification_report用来分析不同类别的准确率,召回率,F1值等,从而便于按照类别查看准确率、召回率。
print("precision_recall_f1-score_accuracy:\n", metrics.classification_report(y_test, y_pred))
九、混淆矩阵
# 8、混淆矩阵:a[i][j]将类别i的样本误判为类别j的个数
print("confusion_matrix:\n",metrics.confusion_matrix(y_test, y_pred))
十、模型准确率
# 9、准确率
print("Accuracy : %.4g" % metrics.accuracy_score(y_test, y_pred))
十一、roc曲线
# 10、roc_auc_score函数返回曲线下面积,输入和roc_curve函数一样
print("AUC Score (Train): %.3f" % metrics.roc_auc_score(y_test, y_pred, multi_class='ovo'))
十二、召回率 F1精确率
# average参数定义了该指标的计算方法,二分类时average参数默认是binary;多分类时,可选参数有micro、macro、weighted和samples。
# average参考取值: https://blog.csdn.net/weixin_44436677/article/details/105985358
# 11、其他指标
print("F1_score: %.3f" % metrics.f1_score(y_test, y_pred, average='binary'))
print("Precision: %.3f " % metrics.precision_score(y_test, y_pred, average='binary'))
print("Recall score : %.3f" % metrics.recall_score(y_test, y_pred, average='binary'))
十三、计算均方误差
# 12、计算均方误差
from sklearn.metrics import mean_squared_error
mse = mean_squared_error(y_test, y_pred)
print("mean_squared_error : %.3f" % mse)
十四、计算回归的决定系数
# 13、计算回归的决定系数
from sklearn.metrics import r2_score
r2 = r2_score(y_test, y_pred)
print("R2: %.3f" % r2)
十五、图表展示
# 14、图表表示
# sklearn.metric.roc_curve()函数用于绘制ROC曲线 也只能用于二分类模型
# 主要参数 y_true真实样本标签 y_score:每个样本的预测结果 pos_label:正样本的标签
# 返回三个值 fpr:false pos rate tpr: true pos rate threholds 阈值
# 召回率tpr = tp/tp+fn fpr=fp/fp+tn
import matplotlib.pyplot as plt
label = np.array([1, 1, -1, -1])
scores = np.array([0.7, 0.2, 0.4, 0.5])
fpr, tpr, thresholds=metrics.roc_curve(label, scores)
print('FPR:', fpr)
print('TPR:', tpr)
print('thresholds:', thresholds)
plt.plot(fpr, tpr)
plt.show()
十六、所有输出
10
RF - Accuracy (Train): 1
RF - Accuracy (Test): 1
label标签的类别分别如下: [0 1]
模型输入样本输入每种类别的概率,且取概率最大的类别作为样本预测结果: [[0.1 0.9]]
模型预测输入样本所属的类别: [1]
y_predprob: [[0.6 0.4]
[0.2 0.8]]
precision_recall_f1-score_accuracy:
precision recall f1-score support
0 1.00 1.00 1.00 1
1 1.00 1.00 1.00 1
accuracy 1.00 2
macro avg 1.00 1.00 1.00 2
weighted avg 1.00 1.00 1.00 2
confusion_matrix:
[[1 0]
[0 1]]
Accuracy : 1
AUC Score (Train): 1.000
F1_score: 1.000
Precision: 1.000
Recall score : 1.000
mean_squared_error : 0.000
R2: 1.000
FPR: [0. 0. 1. 1.]
TPR: [0. 0.5 0.5 1. ]
thresholds: [1.7 0.7 0.4 0.2]