机器学习——用鸢尾花数据集画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()




运行效果:

机器学习——用鸢尾花数据集画P-R曲线和ROC曲线_第1张图片

 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()




运行效果:

机器学习——用鸢尾花数据集画P-R曲线和ROC曲线_第2张图片

 

你可能感兴趣的:(python,算法)