OVR模式和sklearn模型评价标准学习

OvR则是每次将一个类的样例作为正例、所有其他类的样例作为反例来训练N个分类器.在测试时若仅有一个分类器预测为正类,则对应的类别标记作为最终分类结果如图3.4所示若有多个分类器预测为正类、则通常考虑分类器的预测置信度,选择置信度最大的类别标记作为分类结果.

容易看出,OvR只需训练N个分类器,而且训练时,OvR的每个分类器均使用全部训练样例,因此,在类别很多时,至于预测性能,则取决于具体的数据分布,在多数情形下两者差不多.

 

 实例分析,数据如下:
一、数据

真实类别:A, A, A, A, B, B, B, C, C
通过OVR预测类别:A, A, B, C, B, B, C, B, C

首先介绍二分类混淆矩阵:

对于二分类问题,可将样例根据其真实类别与学习器预测类别的组合分为真正例(true positive)、假正例(false positive)、 真反例(rue negativer假反例(false negative)四种情形,令TP、FP、TN、FN分别表示其对应的样例数,则显然有TP+FP+ TN +FN =样例总数.分类结果的“混淆矩阵如表所示.

查准率:在预测结果正例中,真正例所占比例。

查全率:在真实正例中,预测正例所占比例

查准率和查全率是一对矛盾的度量.上般来说,查准率高时,查全率往往偏低;而查全率高时,查准率往往偏低.

 



根据上图的思想则各个类别的真假阳阴性:

        A      B      C     总计

TP   2      2      1       5
FP   0      2      2       4
FN   2      1      1       4 


# 计算各个类别的准确率,召回率,与F1-score
from sklearn.metrics import precision_recall_fscore_support
 
y_true = [1, 1, 1, 1, 2, 2, 2, 3, 3]
y_pred = [1, 1, 2, 3, 2, 2, 3, 2, 3]
 
p_class, r_class, f_class, support_micro = precision_recall_fscore_support(y_true,y_pred,labels=[1,2,3])
 
print(p_class)
print(r_class)
print(f_class)
print(support_micro)


[1.         0.5        0.33333333]
[0.5        0.66666667 0.5       ]
[0.66666667 0.57142857 0.4       ]
[4 3 2]
from sklearn.metrics import f1_score
 
y_true = [1, 1, 1, 1, 2, 2, 2, 3, 3]
y_pred = [1, 1, 2, 3, 2, 2, 3, 2, 3]
 
f1_macro = f1_score(y_true,y_pred,average='macro')
 
 
print('f1_macro: {0}'.format(f1_macro))

f1_macro: 0.546031746031746
from sklearn.metrics import confusion_matrix, ConfusionMatrixDisplay


# 预测分类结果
y_pred = clf.predict(X_test)

# 你可以打印一下预测结果和分类结果
print("y_test: ", y_test)
print("y_pred: ", y_pred)

# 得到混淆矩阵(confusion matrix,简称cm)
# confusion_matrix 需要的参数:y_true(真实标签),y_pred(预测标签)
cm = confusion_matrix(y_true=y_test, y_pred=y_pred)

# 打印混淆矩阵
print("Confusion Matrix: ")
print(cm)

# 画出混淆矩阵
# ConfusionMatrixDisplay 需要的参数: confusion_matrix(混淆矩阵), display_labels(标签名称列表)
disp = ConfusionMatrixDisplay(confusion_matrix=cm, display_labels=labels)
disp.plot()
plt.show()

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
机器学习-基于python实现对数几率回归模型对西瓜、鸢尾花进行分类源码+项目说明+实验报告 【项目介绍】 该资源内项目代码都是经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载使用,也适合小白学习进阶, 或者实际项目借鉴参考! 当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。如果基础还行,也可在此代码基础上进行修改,以实现其他功能。 数据集特征分析 本次实验采用西瓜数据集以及鸢尾花数据集,西瓜数据集中包含17个样本,每个西瓜样本包含两维特征,包括西瓜的含糖量以及密度,以及对应的好瓜和坏瓜标签用0和1表示。鸢尾花数据集中包含150个样本,每个样本包含四维特征分别是花萼长、花萼宽、花瓣长、花瓣宽,以及对应的鸢尾花品种标签,三个鸢尾花品种分别用0、1、2表示。 由于西瓜数据集样本数量较少,因此这里采用将所有17个样本作为训练集,并再次利用17个样本作为测试集验证模型的准确度。将鸢尾花数据集以8:2的比例切分为训练集和测试集。最后使用sklearn自带的模型验证工具对本次实现的对数几率回归模型进行精准度分析。 对于鸢尾花数据集的多分类问题,我采用的是OVR的方式,分别将鸢尾花的三个品种作为正例,将剩余两个品种作为负例训练三个分类器,再计算每个分类器的置信度,将置信度最高的分类器作为样本的预测结果。由此得到的多分类模型在鸢尾花数据集上的分类准确度最高可以达到100%。 文件目录 |-- IrisRegress.py 鸢尾花数据集分类测试 |-- LogisticModel.py 对数几率回归模型 |-- README.md |-- WaterRegress.py 西瓜数据集3.0分类测试 以上是西瓜数据集,西瓜数据集每个样本有含糖量以及密度两维特征,以及对应的好瓜和坏瓜标签。以及对应的数据分布情况,由上图可以可以看出西瓜数据集的含糖量以及密度分布并不是很规范,因此导致后面的对数几率回归分类模型的准确度最多只能达到70-80%, 通过参数的调试当w初始值设为0.05,迭代次数1000时模型的准确率达到71%,通过调试的过程可以发现准确率在60-70%左右。 这也是数据集的数据量少和样本分布规律并不明显导致的。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值