R如何计算预测精度
时间: 2024-01-12 17:05:19 浏览: 30
在R中计算预测精度需要已知预测结果和真实结果,可以使用混淆矩阵来计算预测精度。混淆矩阵是一个2x2的矩阵,其中行代表真实结果,列代表预测结果。对于一个二分类问题,混淆矩阵如下所示:
| | 预测为正类 | 预测为负类 |
| --- | --- | --- |
| 实际为正类 | TP | FN |
| 实际为负类 | FP | TN |
其中,TP表示将正类预测为正类的数量,FN表示将正类预测为负类的数量,FP表示将负类预测为正类的数量,TN表示将负类预测为负类的数量。
通过混淆矩阵,可以计算出以下指标:
- 精度(Accuracy):所有预测正确的样本数占总样本数的比例。计算公式为:(TP+TN)/(TP+TN+FP+FN)。
- 灵敏度(Sensitivity或Recall):真实为正类的样本中,被正确预测为正类的比例。计算公式为:TP/(TP+FN)。
- 特异度(Specificity):真实为负类的样本中,被正确预测为负类的比例。计算公式为:TN/(TN+FP)。
- 精确率(Precision):预测为正类的样本中,被正确预测为正类的比例。计算公式为:TP/(TP+FP)。
- F1值(F1-score):综合考虑精确率和召回率的指标。计算公式为:2*Precision*Sensitivity/(Precision+Sensitivity)。
下面以一个二分类问题的预测结果为例,假设预测结果存储在向量y_pred中,真实结果存储在向量y_true中,可以按如下方式计算预测精度:
```
# 加载混淆矩阵函数
library(caret)
# 计算混淆矩阵
confusion_matrix <- confusionMatrix(y_pred, y_true)
# 输出混淆矩阵
print(confusion_matrix$table)
# 计算精度、灵敏度、特异度、精确率、F1值
accuracy <- confusion_matrix$overall['Accuracy']
sensitivity <- confusion_matrix$byClass['Sensitivity']
specificity <- confusion_matrix$byClass['Specificity']
precision <- confusion_matrix$byClass['Pos Pred Value']
f1_score <- confusion_matrix$byClass['F1']
# 输出预测精度指标
print(paste("Accuracy:", round(accuracy, 2)))
print(paste("Sensitivity:", round(sensitivity, 2)))
print(paste("Specificity:", round(specificity, 2)))
print(paste("Precision:", round(precision, 2)))
print(paste("F1-score:", round(f1_score, 2)))
```
其中,y_pred和y_true均是长度相同的向量,存储预测结果和真实结果。上述代码中使用了caret包中的confusionMatrix()函数来计算混淆矩阵,并从混淆矩阵中提取出精度、灵敏度、特异度、精确率、F1值等指标。最后,使用round()函数将结果保留两位小数并输出。