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()
运行效果: