机器学习中的评价方法总结(正确率,精确率,召回率,F1值,ROC曲线,AUC面积,Loss)

机器学习中的评价指标

对于一个模型的好坏,常常采用一系列指标来评价。往往评价指标分数越高,则反映模型更准确,具有更好的泛化性等。
评价指标可以对于分类任务中的某一类使用,看模型是否在该类有较好的表现。
也可以对整个分类任务,用于反映模型的整体效果

混淆矩阵

介绍评价指标就不得不说一下混淆矩阵了。混淆矩阵是在分类问题中反映模型判断正误的表格。以二分类为例,多分类类似。
混淆矩阵

真实值\预测值 Positive Negative
True TP FN
False FP TN

以上两种写法都可以
其中各项指标含义如下:
TP:真正类,是指真实标签为1,预测标签的值也为1。
FN:假负类,真实标签为1,预测标签值为0。
FP:假正类,真实标签为0,预测标签值为1。
TN:真负类,真实标签为0,预测标签为0。
以上就是在计算各项指标前需要统计的数据。

正确率(准确率、Accuracy)

正确率是指:反映一个模型能预测正确的概率。反映模型的正确程度,其公式如下:
A c c u r a c y _ r a t e = T P + T N T P + F P + F N + T N Accuracy\_rate=\frac{TP+TN}{TP+FP+FN+TN} Accuracy_rate=TP+FP+FN+TNTP+TN
分子为:真正类与真负类的个数和。
分母为:所有情况的总和。
可以绘制的图像为总体的正确率图像,横轴为迭代步数,纵轴为正确率。同时可以绘制Loss图像。
缺点
当数据十分不均衡的情况下(正负例比例为:10000:1)。将所有结果预测为某一类,即可得到很高的正确率,但模型有误。

精确率(Precision)

精确率:用于反映模型预测实例中的精确程度,即预测为正的样本中有多少是真正的正样本。
体现模型对负样本的区分能力。
其公式如下:
P r e c i s i o n _ r a t e = T P T P + F P Precision\_rate=\frac{TP}{TP+FP} Precision_rate=TP+FPTP
分子为TP是样本为正预测为正的样本个数。
分母为TP+FN,表示预测结果中预测为正的个数总和。
可以绘制正确率图像,横轴为迭代步数,纵轴为正确率图像。

召回率(Recall)

召回率:用于反映模型的敏感程度,即正确的样本中有多少被预测为正确的样本。
体现模型对正样本的识别能力。
其公式如下:
R e c a l l _ r a t e = T P T P + F N Recall\_rate=\frac{TP}{TP+FN} Recall_rate=

支持向量机(SVM)是一种常用的机器学习算法,用于二分类任务。评价指标如混淆矩阵、准确精确召回率F1等可以帮助我们理解模型性能。以下是这些概念以及如何计算它们,并结合MATLAB代码示例: 1. **混淆矩阵**: 表示真实类别预测类别之间的对比。对于二分类,它是一个2x2矩阵,包括真正例(TP)、假正例(FP)、真反例(TN)和假反例(FN)。 ```matlab % 假设y_true是实际标签,y_pred是预测标签 confMat = confusionmat(y_true, y_pred); ``` 2. **准确 (Accuracy)**: (TP + TN) / (TP + TN + FP + FN) ```matlab accuracy = sum(diag(confMat)) / sum(confMat(:)); ``` 3. **精确 (Precision)**: TP / (TP + FP) 4. **召回率 (Recall/Sensitivity)**: TP / (TP + FN) 5. **F1**: 2 * Precision * Recall / (Precision + Recall) 6. **Loss曲线**: 可能需要训练过程中的损失数据才能绘制,通常使用交叉验证得到多个模型,然后取平均。对于线性SVM,可以使用`svmtrain`函数的训练结果查看。 7. **AUC (Area Under the Curve)**: ROC曲线面积,衡量的是模型区分正负样本的能力。在MATLAB中,可以使用`perfcurve`函数生成ROC数据,再用`auc`计算AUC。 8. **ROC曲线**: 真实阳性(True Positive Rate, TPR) vs. 假阳性(False Positive Rate, FPR)。`perfcurve`函数会直接生成ROC数据,`plot`函数可以绘制出来。 完整的代码示例可能会包含数据预处理、模型训练、评估和可视化部分。请注意,为了实际运行代码,你需要准备一个SVM二分类的数据集,并调整适当的参数。这里只是一个基本框架: ```matlab % 加载数据并分割成训练集和测试集 load('your_data.mat'); [~, X_train, y_train] = trainTestSplit(X, y, 'HoldOut', 0.3); % 假设X是特征,y是标签 % 训练SVM模型 svmModel = fitcsvm(X_train, y_train); % 预测测试集 y_pred = predict(svmModel, X_test); % 计算混淆矩阵 confMat = confusionmat(y_test, y_pred); % 其他指标计算 ... % 绘制Loss曲线ROC曲线 ... % AUC计算 [~, fpr, tpr, thresholds] = perfcurve(y_test, y_pred, 'PositiveClass', 1); aucScore = auc(fpr, tpr); % ROC曲线 plot(fpr, tpr) xlabel('False Positive Rate') ylabel('True Positive Rate') title(['ROC Curve (AUC = ' num2str(aucScore) ')']) ``` 别忘了替换上述代码中的数据集名以及所需的参数设置。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值