下面是贝叶斯分类器的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)如果有人可以提供代码片段来计算错误分类和准确性的贝叶斯错误。我查看了有关[class,err]=classify(...)
的matlab文档。但是,我无法遵循它并且工作。
(b)另外,如何绘制散点图和直方图,表明属于不同类别的数据点的数量?我尝试了scatter(training(:),target_class(:))
,但它提供了别的东西!
(c)如何使用crossvalidate()?一个例子真的会有所帮助。谢谢。
答案 0 :(得分:2)
(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个第一个成分。
更新:我错过了你实际上只有一个因素。您的分散语句可以很好地工作。你为什么不喜欢它?您还可以以不同方式为点添加颜色,并将target_class
添加为第四个参数。您也可以交换第一个和第二个参数,以便更好地代表。
(c)您可以使用统计工具箱中的CROSSVAL和CVPARTITION函数执行简历。有关有用的示例,请参阅文档。
这是另一个SO问题 - How to use a cross validation test with MATLAB?,几乎没有其他选项。