关于数据挖掘:Matlab建立SVMKNN和朴素贝叶斯模型分类绘制ROC曲线附代码数据

43次阅读

共计 4138 个字符,预计需要花费 11 分钟才能阅读完成。

原文链接:http://tecdat.cn/?p=15508

最近咱们被客户要求撰写对于 SVM,KNN 和奢侈贝叶斯模型的钻研报告,包含一些图形和统计输入。

绘制 ROC 曲线通过 Logistic 回归进行分类

加载样本数据。

load fisheriris

通过应用与 versicolor 和 virginica 物种绝对应的度量来定义二元分类问题。

pred = meas(51:end,1:2);

定义二进制响应变量。

resp = (1:100)'>50;  % Versicolor = 0, virginica = 1

拟合逻辑回归模型。

mdl = fitglm(pred,resp,'Distribution','binomial','Link','logit');

计算 ROC 曲线。应用逻辑回归模型中的概率估计值作为得分。

perfcurve 将阈值存储在数组中。

显示曲线下的面积。

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 是 351×34 预测变量的矩阵。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);

计算后验概率。

第二列  score_svm 蕴含不良雷达收益的后验概率。

应用 SVM 模型的分数计算规范 ROC 曲线。

在同一样本数据上拟合奢侈贝叶斯分类器。

计算后验概率(分数)

[~,score_nb] = resubPredict(mdlNB);

应用奢侈贝叶斯分类的分数计算规范 ROC 曲线。

将 ROC 曲线绘制在同一张图上。


点击题目查阅往期内容

数据分享 | R 语言逻辑回归、线性判别分析 LDA、GAM、MARS、KNN、QDA、决策树、随机森林、SVM 分类葡萄酒穿插验证 ROC

左右滑动查看更多

01

02

03

04

 

只管对于较高的阈值,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

创立函数 mysigmoid.m,该函数 承受因素空间中的两个矩阵作为输出,并应用 S 形内核将其转换为 Gram 矩阵。

应用 Sigmoid 内核函数训练 SVM 分类器。应用标准化数据。

设置  gamma = 0.5,应用调整后的 S 形核训练 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'

因为这是一个多类问题,因而不能仅将其  score(:,2) 作为输出。这样做将无奈提供  perfcurve 无关两个阴性类别(setosa 和 virginica)分数的足够信息。此问题与二元分类问题不同,在二元分类问题中,晓得一个类别的分数就足以确定另一个类别的分数。因而,必须提供  perfcurve 将两个否定类的得分纳入思考范畴的函数。一种函数是 score(:,2)-max(score(:,1),score(:,3))。

X,默认为假阳性率,Y,默认为真阳性率(召回率或敏感性)。正类标签为  versicolor。因为未定义否定类别,因而  perfcurve 假如不属于必定类别的观测值属于一个类别。该函数将其承受为否定类。


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

指定  virginica 为否定类,并计算和绘制 ROC 曲线  versicolor

同样,必须提供  perfcurve 将否定类分数纳入考量的函数。要应用的函数的一个示例是 score(:,2)-score(:,3)。

 

计算 ROC 曲线的逐点置信区间

加载样本数据。

load fisheriris

仅将前两个变量用作预测变量,来定义二元问题。

pred = meas(51:end,1:2);

定义二进制因变量。

resp = (1:100)'>50;  % Versicolor = 0, virginica = 1

拟合逻辑回归模型。

通过垂直均匀(VA)和应用 bootstrap 进行采样,计算实在正率(TPR)上的逐点置信区间。

'NBoot',1000 将疏导样本的数量设置为 1000。'XVals','All' 提醒  perfcurve 返回  XY 和  T 所有分数的 Y 值,并 X 应用垂直均匀将所有值的值(真阳性率)均匀(假阳性率)。默认状况下将应用阈值均匀来计算相信范畴。

绘制逐点置信区间。

errorbar(X,Y(:,1),Y(:,1)-Y(:,2),Y(:,3)-Y(:,1));

 

不肯定总是能够管制误报率(FPR,X 此示例中的  值)。因而,可能心愿通过阈值均匀来计算实在正利率(TPR)的逐点置信区间。

绘制置信区间。

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

 


点击文末 “浏览原文”

获取全文残缺代码数据资料。

本文选自《Matlab 建设 SVM,KNN 和奢侈贝叶斯模型分类绘制 ROC 曲线》。

点击题目查阅往期内容

R 语言贝叶斯狭义线性混合(多层次 / 程度 / 嵌套)模型 GLMM、逻辑回归剖析教育留级影响因素数据
逻辑回归 Logistic 模型原理 R 语言分类预测冠心病危险实例
数据分享 | 用加性多元线性回归、随机森林、弹性网络模型预测鲍鱼年龄和可视化
R 语言高维数据惩办回归办法:主成分回归 PCR、岭回归、lasso、弹性网络 elastic net 剖析基因数据(含练习题)
Python 中 LARS 和 Lasso 回归之最小角算法 Lars 剖析波士顿住房数据实例
R 语言 Bootstrap 的岭回归和自适应 LASSO 回归可视化
R 语言 Lasso 回归模型变量抉择和糖尿病倒退预测模型 R 语言实现贝叶斯分位数回归、lasso 和自适应 lasso 贝叶斯分位数回归剖析
基于 R 语言实现 LASSO 回归剖析
R 语言用 LASSO,adaptive LASSO 预测通货膨胀工夫序列
R 语言自适应 LASSO 多项式回归、二元逻辑回归和岭回归利用剖析
R 语言惩办 logistic 逻辑回归(LASSO, 岭回归)高维变量抉择的分类模型案例
Python 中的 Lasso 回归之最小角算法 LARS
r 语言中对 LASSO 回归,Ridge 岭回归和弹性网络 Elastic Net 模型实现
r 语言中对 LASSO 回归,Ridge 岭回归和 Elastic Net 模型实现
R 语言实现 LASSO 回归——本人编写 LASSO 回归算法
R 应用 LASSO 回归预测股票收益
python 应用 LASSO 回归预测股票收益

正文完
 0