【知识补充】利用sklearn绘制机器学习模型评估P-R曲线图像(附代码)
最近在做机器学习项目,模型评估要用到P-R曲线图(Precision & Recall),百度了一下发现基本上很难找到有博主给出sklearn绘制P-R曲线图的详细代码。找了很长时间终于找到了对应的模块函数的函数使用方法,跟各位朋友分享一下。注意点1、我在使用sklearn时,sklearn.cross_validation模块已经被替换为sklearn.model_selecti
·
最近在做机器学习项目,模型评估要用到P-R曲线图(Precision & Recall),百度了一下发现基本上很难找到有博主给出sklearn绘制P-R曲线图的详细代码。找了很长时间终于找到了对应的模块函数的函数使用方法,跟各位朋友分享一下。
注意点
1、我在使用sklearn时,sklearn.cross_validation模块已经被替换为sklearn.model_selection,原先的一些函数被修改了。目前我只发现该模块下的StratifiedKFold对象的初始化只需要一个参数n_splits(原先为n_folds),并且初始化好该对象后需要"<新对象>.split(Xtrain,yLabel)"后才能得到实现K折交叉验证的生成器(generator),之前的初始化后就是一个生成器了;
2、sklearn.metrics模块下的precision_recall_curve函数可以实现P-R曲线的散点数据生成(然后plot一下就可以了),另外该模块下的roc_curve、auc函数分别可以实现ROC曲线的散点数据生成以及AUC值的计算。
代码
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn import svm,datasets,linear_model
from sklearn.linear_model import LinearRegression,Lasso
from sklearn.model_selection import cross_val_score
from sklearn.metrics import roc_curve,auc,precision_recall_curve
from sklearn.model_selection import KFold,StratifiedKFold
iris = datasets.load_iris()
X = iris.data
y = iris.target
X,y = X[y!=2],y[y!=2] # 去掉了label为2,label只能二分才可以
n_samples,n_features = X.shape
random_state = np.random.RandomState(0)
X = np.c_[X,random_state.randn(n_samples,200*n_features)]
kfold = StratifiedKFold(n_splits=5) # 使用5折交叉验证,并且画ROC曲线
cv = kfold.split(X,y)
classifier = svm.SVC(kernel="linear",probability=True,random_state=random_state)
for i,(train,test) in enumerate(cv): # 通过训练数据,使用svm线性核建立模型,并对测试集进行测试,求出预测得分
probas_ = classifier.fit(X[train],y[train]).predict_proba(X[test])
precision,recall,thresholds = precision_recall_curve(y[test],probas_[:,1])# 最重要的函数:通过precision_recall_curve()函数,求出recall,precision,以及阈值
plt.plot(recall,precision,lw=1)
plt.plot([0,1],[0,1],'--',color=(0.6,0.6,0.6),label="Luck") # 画对角线
plt.xlim([-0.05,1.05])
plt.ylim([-0.05,1.05])
plt.xlabel("Recall Rate")
plt.ylabel("Precision Rate")
plt.show()
分享学习,共同进步!
更多推荐
已为社区贡献6条内容
所有评论(0)