将查准率与查全率作为坐标系构建坐标空间,就可以得到所谓的ROC空间。
P-R曲线的定义为:根据学习器的预测结果(一般为一个实值或概率)对测试样本进行排序,将最可能是“正例”的样本排在前面,最不可能是“正例”的样本排在后面,按此顺序逐个把样本作为正例进行预测,每次计算出当前的P值和R值。
P-R曲线的评估方法:若一个学习器A的P-R曲线被另一个学习器B的P-R曲线完全包住,则称B的性能优于A。若A和B的曲线发生了交叉,则谁的曲线下面积大,谁的性能更优。但一般来说曲线下的面积是很难估算的,因此使用BEP(平衡点,Break-Event Point),即当P =R时,平衡点越高,性能越优。
知识点:
对于多分类的问题,使用one-hot编码方式更加好
训练模型可以有多个尝试,然后选择其中性能最好的一个
代码如下:
from sklearn import datasets
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler, label_binarize
import numpy as np
import matplotlib.pyplot as plt
from sklearn.metrics import precision_recall_curve, average_precision_score
from sklearn.linear_model import LogisticRegression
from sklearn.multiclass import OneVsRestClassifier
from sklearn.discriminant_analysis import LinearDiscriminantAnalysis
from sklearn.svm import SVC
def data_preprocessing():
# 导入手写数据集
mnist = datasets.load_digits()
# 拆分数据与标签
X, y = mnist.data, mnist.target
# print(X.shape)
random_state = np.random.RandomState(0)
n_samples, n_features = X.shape
X = np.c_[X, random_state.randn(n_samples, 10*n_features)]
# print(X.shape)
# 数据标准化
X = StandardScaler().