背景
我正在回答这个问题,因为我需要研究内容,而这样的问题是一个很好的借口。谢谢你的好机会。
我使用来自内置 Fisher 鸢尾花数据的数据:http:
//archive.ics.uci.edu/ml/datasets/Iris
我还使用 Mathworks 分类教程中的代码片段,以及 plotroc
问题描述
域内有更清晰的边界来分类“setosa”,但“versicoloir”与“virginica”有重叠。这是一个二维图,并且已经丢弃了一些其他信息来生成它。在这种情况下,分类边界的模糊性是有用的。
%load data
load fisheriris
%show raw data
figure(1); clf
gscatter(meas(:,1), meas(:,2), species,'rgb','osd');
xlabel('Sepal length');
ylabel('Sepal width');
axis equal
axis tight
title('Raw Data')
分析
假设我们想要确定定义“virginica”与“non-virginica”的线性分类器的界限。我们可以查看其他类的“self vs. not-self”,但它们会有自己的
所以现在我们做一些线性判别式并为它们绘制 ROC:
%load data
load fisheriris
load iris_dataset
irisInputs=meas(:,1:2)';
irisTargets=irisTargets(3,:);
ldaClass1 = classify(meas(:,1:2),meas(:,1:2),irisTargets,'linear')';
ldaClass2 = classify(meas(:,1:2),meas(:,1:2),irisTargets,'diaglinear')';
ldaClass3 = classify(meas(:,1:2),meas(:,1:2),irisTargets,'quadratic')';
ldaClass4 = classify(meas(:,1:2),meas(:,1:2),irisTargets,'diagquadratic')';
ldaClass5 = classify(meas(:,1:2),meas(:,1:2),irisTargets,'mahalanobis')';
myinput=repmat(irisTargets,5,1);
myoutput=[ldaClass1;ldaClass2;ldaClass3;ldaClass4;ldaClass5];
whos
plotroc(myinput,myoutput)
结果如下所示,尽管它需要删除对角线的重复副本:
您可以在代码中注意到我堆叠“myinput”和“myoutput”并将它们作为输入提供给“plotroc”函数。您应该将分类器的结果作为目标和实际值,并且可以获得类似的结果。这会将分类器的实际输出与目标值的理想输出进行比较。这些是 plotroc 的输入。
所以这会给你“内置的”ROC,这对快速工作很有用,但不会让你详细学习每一步。
此时您可以提出的问题包括:
- 哪个分类器最好?在这种情况下,我如何确定什么是最好的?
- 分类器的凸包是什么?是否存在比任何纯方法都提供更多信息的分类器组合?也许是装袋?