下面是贝叶斯分类器的 Matlab 代码,它将任意数字分类到它们的类中。
training = [3;5;17;19;24;27;31;38;45;48;52;56;66;69;73;78;84;88];
target_class = [0;0;10;10;20;20;30;30;40;40;50;50;60;60;70;70;80;80];
test = [1:2:90]';
class = classify(test,training, target_class, 'diaglinear'); % Naive Bayes classifier
[test class]
(a) 如果有人可以提供用于计算错误分类和准确性的贝叶斯误差的代码片段。我浏览了matlab关于[class,err]=classify(...)
的文档。但是,我无法遵循它并工作。
(b) 另外,如何绘制散点图和直方图来指示属于不同类别的数据点的数量?我尝试了 scatter(training(:),target_class(:))
但它提供了其他东西!
(c) 如何使用 crossvalidate()?一个例子确实会有帮助。谢谢。
最佳答案
(a) 要计算错误分类误差,您还需要了解 test_class
。然后您可以将输出 class
变量与 test_class
进行比较。
misserr = sum(test_class~=class)./numel(test_class);
如果您没有测试类,第二个输出参数 err
将为您提供在训练集上应用生成模型的错误分类错误的估计。
(b)如果训练数据集中只有 2 个因子(列),您可以这样做
scatter(training(:,1),training(:,2),[],target_class)
相应地,您可以将 SCATTER3 用于 3 个因子。
对于更多因素,您可以使用 PRINCOMP 执行主成分分析并绘制 2 或 3 个第一成分。
更新:我错过了你实际上只有一个因素。你的 scatter 语句可以很好地工作。你为什么不喜欢它?您还可以添加 target_class
作为第四个参数,对点进行不同的着色。您还可以交换第一个和第二个参数以获得更好的表示。
(c) 您可以使用 CROSSVAL 执行 CV和 CVPARTITION统计工具箱中的函数。请参阅文档以获取有用的示例。
这是另一个问题 - How to use a cross validation test with MATLAB?几乎没有其他选项。
关于classification - 误分类错误率和准确率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9967089/