栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

机器学习——用鸢尾花数据集画P-R曲线和ROC曲线

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

机器学习——用鸢尾花数据集画P-R曲线和ROC曲线

P-R曲线

获取鸢尾花数据集

from sklearn import datasets
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei']  # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False  # 用来正常显示负号

#从4.5的标准开始
iris = datasets.load_iris()  # iris是一个字典集

我们去每个数据第一个元素来操作,去前100的数据作为训练集,每次的步长去0.1,经过观察,前一百,数据没有超过7的,取7作为最大的数。

from sklearn import datasets
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei']  # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False  # 用来正常显示负号

#从4.5的标准开始
iris = datasets.load_iris()  # iris是一个字典集

P=[]    #查准率
R=[]    #查全率

num=4.5 #判别标准

for it in range(1,26):
    num+=0.1
    TP = 0
    FN = 0
    FP = 0
    TN = 0
    for i in range(1, 100):

        # 小于num认为他是对的
        if(iris.data[i][0]<=num):
            if(iris.target[i]==0):
                TP+=1
            else:
                FN+=1

        else:
            if(iris.target[i]==1):
                TN+=1
            else:
                FP+=1

    chazhun=TP / (TP + FP)
    chaquan=TP / (TP + FN)
    print(TP," ",FN," ",FP," ",TN)
    P.append(chazhun)
    R.append(chaquan)

print(P)
print(R)

plt.figure(figsize=(8,6))
plt.plot(R,P,color="red",linestyle='--')
plt.title("P-R曲线")
plt.xlabel("查全率")
plt.ylabel("查准率")
# plt.grid(True,linestyle='--',color="red",alpha=0.5)
plt.show()




运行效果:

 ROC曲线

和上面一样,还是区每个数据的第一个元素来操作,7位最大数,步长为0.1,总之沿用上面的思路。

from sklearn import datasets
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei']  # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False  # 用来正常显示负号

#从4.5的标准开始
iris = datasets.load_iris()  # iris是一个字典集

TPR=[]    #真正例率
FPR=[]    #假正例率

num=4.5 #判别标准

for it in range(1,26):
    num+=0.1
    TP = 0
    FN = 0
    FP = 0
    TN = 0
    for i in range(1, 100):

        # 小于num认为他是对的
        if(iris.data[i][0]<=num):
            if(iris.target[i]==0):
                TP+=1
            else:
                FN+=1

        else:
            if(iris.target[i]==1):
                TN+=1
            else:
                FP+=1


    print(TP," ",FN," ",FP," ",TN)
    TPR.append(TP/(TP+FN))
    FPR.append(FP/(TN+FP))

print(TPR)
print(FPR)

plt.figure(figsize=(8,6))
plt.plot(FPR,TPR,color="red",linestyle='--')
plt.title("ROC曲线")
plt.xlabel("假正例率")
plt.ylabel("真正例率")
# plt.grid(True,linestyle='--',color="red",alpha=0.5)
plt.show()




运行效果:

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/822387.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号