随机森林预测的python代码,多个特征变量,一个预测结果,输入是excel表,包括验证集和训练集比例,并对新的数据文件进行预测并输出预测结果excel表格以及精度、准确率、召回率和F1值、AUC曲线图、roc曲线图、和混淆矩阵热力图及评价结果解析
时间: 2024-02-17 07:02:15 浏览: 106
随机森林代码,用于特征筛选
以下是随机森林预测的Python代码,实现多个特征变量、一个预测结果的分类任务。代码使用了Excel作为输入和输出文件格式,可以指定验证集和训练集比例,并计算了精度、准确率、召回率和F1值,绘制了AUC曲线图、ROC曲线图、混淆矩阵热力图,并解析了评价结果。
```python
import pandas as pd
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score, roc_curve, auc, confusion_matrix
import seaborn as sns
import matplotlib.pyplot as plt
# 读取数据
data = pd.read_excel('data.xlsx')
# 将数据分为训练集和验证集
train_ratio = 0.8 # 训练集比例
train_data = data.sample(frac=train_ratio, random_state=1)
test_data = data.drop(train_data.index)
# 定义特征变量和目标变量
features = ['feature1', 'feature2', 'feature3']
target = 'target'
# 训练随机森林模型
n_estimators = 100 # 决策树数目
rf = RandomForestClassifier(n_estimators=n_estimators, random_state=1)
rf.fit(train_data[features], train_data[target])
# 在验证集上进行预测并计算精度、准确率、召回率和F1值
pred = rf.predict(test_data[features])
accuracy = accuracy_score(test_data[target], pred)
precision = precision_score(test_data[target], pred)
recall = recall_score(test_data[target], pred)
f1 = f1_score(test_data[target], pred)
print('Accuracy:', accuracy)
print('Precision:', precision)
print('Recall:', recall)
print('F1 Score:', f1)
# 计算并绘制ROC曲线和AUC值
fpr, tpr, thresholds = roc_curve(test_data[target], pred)
roc_auc = auc(fpr, tpr)
print('AUC:', roc_auc)
plt.figure()
lw = 2
plt.plot(fpr, tpr, color='darkorange', lw=lw, label='ROC curve (area = %0.2f)' % roc_auc)
plt.plot([0, 1], [0, 1], color='navy', lw=lw, linestyle='--')
plt.xlim([0.0, 1.0])
plt.ylim([0.0, 1.05])
plt.xlabel('False Positive Rate')
plt.ylabel('True Positive Rate')
plt.title('Receiver operating characteristic')
plt.legend(loc="lower right")
plt.show()
# 计算并绘制混淆矩阵热力图
confusion_mat = confusion_matrix(test_data[target], pred)
print('Confusion matrix:')
print(confusion_mat)
sns.heatmap(confusion_mat, annot=True)
plt.show()
# 读取新数据文件并预测结果
new_data = pd.read_excel('new_data.xlsx')
new_pred = rf.predict(new_data[features])
new_data['predicted_target'] = new_pred
new_data.to_excel('predicted_results.xlsx', index=False)
```
评价结果解析:
- 精度(Accuracy):分类正确的样本数占总样本数的比例。
- 准确率(Precision):真正例(TP)占预测正例(TP+FP)的比例,表示预测为正例的样本中真正是正例的比例。
- 召回率(Recall):真正例(TP)占实际正例(TP+FN)的比例,表示实际为正例的样本中被正确预测为正例的比例。
- F1值:综合考虑准确率和召回率的指标,取值范围为0到1,F1值越大,表示模型预测效果越好。
- AUC:ROC曲线下的面积,取值范围为0到1,AUC越大,表示模型的分类效果越好。
阅读全文