原文链接:http:///?p=15508绘制ROC曲线通过Logistic回归进行分类加载样本数据。 load fisheriris pred = meas(51:end,1:2); resp = (1:100)'>50; % Versicolor = 0, virginica = 1 mdl = fitglm(pred,resp,'Distribution','binomial','Link','logit');
显示曲线下的面积。
AUC AUC = 0.7918 曲线下的面积为0.7918。最大AUC为1,对应于理想分类器。较大的AUC值表示更好的分类器性能。 绘制ROC曲线
plot(X,Y) xlabel('False positive rate') ylabel('True positive rate') title('ROC for Classification by Logistic Regression') 使用ROC曲线比较分类方法加载样本数据 load ionosphere X 是351x34预测变量的矩阵。 Y 是类别标签的字符数组: 'b' 不良雷达回波和 'g' 良好雷达回波。重新格式化因变量以适合逻辑回归。 拟合一个逻辑回归模型来估计雷达返回的后验概率是一个不好的概率。
mdl = fitglm(pred,resp,'Distribution','binomial','Link','logit'); score_log = mdl.Fitted.Probability; % Probability estimates 使用得分的概率计算标准ROC曲线。 在相同的样本数据上训练SVM分类器标准化数据。 mdlSVM = fitcsvm(pred,resp,'Standardize',true); 第二列 使用SVM模型的分数计算标准ROC曲线。 在同一样本数据上拟合朴素贝叶斯分类器。 计算后验概率(分数) [~,score_nb] = resubPredict(mdlNB); 将ROC曲线绘制在同一张图上。 尽管对于较高的阈值,SVM可以产生更好的ROC值,但逻辑回归通常更擅长区分不良雷达收益与良好雷达。朴素贝叶斯的ROC曲线通常低于其他两个ROC曲线,这表明样本内性能比其他两个分类器方法差。 比较所有三个分类器的曲线下面积。
AUClog AUClog = 0.9659 AUCsvm AUCsvm = 0.9489 AUCnb AUCnb = 0.9393 Logistic回归的AUC度量最高,而朴素的贝叶斯则最低。该结果表明,逻辑回归对此样本数据具有更好的样本内平均性能。 确定自定义内核功能的参数值本示例说明如何使用ROC曲线为分类器中的自定义内核函数确定更好的参数值。 在单位圆内生成随机的一组点。 定义预测变量。将第一象限和第三象限中的点标记为属于正类别,而将第二象限和第二象限中的点标记为负类。
pred = [X1; X2]; resp = ones(4*n,1); resp(2*n + 1:end) = -1; % Labels 创建函数 使用Sigmoid内核函数训练SVM分类器。使用标准化数据。 设置
SVMModel2 = fitPosterior(SVMModel2); [~,scores2] = resubPredict(SVMModel2); 计算两个模型的ROC曲线和曲线下面积(AUC)。 绘制ROC曲线。
plot(x1,y1) hold on plot(x2,y2) hold off
title('ROC for classification by SVM'); 将gamma参数设置为0.5的内核函数可提供更好的样本内结果。 比较AUC度量。
auc1 auc2 auc1 =
0.9518
auc2 =
0.9985 伽玛设置为0.5时曲线下的面积大于伽玛设置为1时曲线下的面积。这也证实了伽玛参数值为0.5会产生更好的结果。为了直观比较这两个伽玛参数值的分类性能。 绘制分类树的ROC曲线加载样本数据。 load fisheriris species 由三种不同物种的鸢尾花组成。双矩阵 meas 包含对花朵的四种测量类型:萼片长度,萼片宽度,花瓣长度和花瓣宽度。所有度量单位均为厘米。使用萼片的长度和宽度作为预测变量训练分类树。 根据树预测物种的分类标签和分数 。 [~,score] = resubPredict(Model); score 对应于所指定的类 'ClassNames' 。由于这是一个多类问题,因此不能仅将其
suby = 12×2
0 0 0.1800 0.1800 0.4800 0.4800 0.5800 0.5800 0.6200 0.6200 0.8000 0.8000 0.8800 0.8800 0.9200 0.9200 0.9600 0.9600 0.9800 0.9800 ⋮
subnames = 1x2 cell {'setosa'} {'virginica'} 在ROC曲线上绘制ROC曲线和最佳工作点。 找到与最佳工作点相对应的阈值。
T((X==OPTROCPT(1))&(Y==OPTROCPT(2))) ans = 0.2857 指定 同样,必须提供 计算ROC曲线的逐点置信区间加载样本数据。 load fisheriris pred = meas(51:end,1:2); resp = (1:100)'>50; % Versicolor = 0, virginica = 1 通过垂直平均(VA)和使用bootstrap进行采样,计算真实正率(TPR)上的逐点置信区间。
绘制逐点置信区间。 errorbar(X,Y(:,1),Y(:,1)-Y(:,2),Y(:,3)-Y(:,1));
不一定总是可以控制误报率(FPR, 绘制置信区间。
figure() errorbar(X1(:,1),Y1(:,1),Y1(:,1)-Y1(:,2),Y1(:,3)-Y1(:,1)); 指定阈值计算ROC曲线。然后绘制曲线。
figure() errorbar(X1(:,1),Y1(:,1),Y1(:,1)-Y1(:,2),Y1(:,3)-Y1(:,1));
|
|