【问题标题】:How to change a binary KNN classifier to be a SVM classifier?如何将二进制 KNN 分类器更改为 SVM 分类器?
【发布时间】:2017-07-15 20:24:44
【问题描述】:

我正在使用 KNN 分类器对性别进行分类。 我想添加一个 SVM 分类器,而不是具有相同标签 0 和 1 的 KNN 分类器(女性为 0,男性为 1)

我有一个测试示例矩阵sample,一个训练示例矩阵training,以及一个带有训练示例标签的向量group。我想要class,测试示例的标签向量。

class = knnclassify(sample, training, group);
if class==1
    x='Male';
else
    x='Female';
end

如何更改此代码以使用 SVM 找到 class

【问题讨论】:

  • 你能描述一下你得到的错误或不想要的输出吗?一个可能的问题是,这段代码在第三行有一个不匹配的“end”。
  • 您使用knnclassify 函数进行k-最近邻分类。如果你想使用 SVM 分类器,你需要使用 fitcsvmpredict 来训练你的 SVM 并对你的数据进行分类。 This tutorial 应该有帮助
  • 您的代码 sn-p 令人困惑,因为它没有提供示例输入和输出,而且它不是有效代码。感谢您修剪代码以突出显示相关部分,但如果您能提供真实的MCVE,则更好。
  • 在我链接的教程中,他们使用标签 {-1, 1},但 {0, 1} 也应该可以工作。
  • 我已编辑您的问题以使用更简单的代码并有更清晰的问题陈述。

标签: matlab


【解决方案1】:

要训练 SVM,您将需要 Statistics and Machine Learning Toolbox

knnclassify 与使用 SVM 分类器的最大区别在于,训练和分类新标签将是两个独立的步骤。

1。训练你的支持向量机:fitcsvm

这一步教分类器如何区分你的两个类。它正在学习一个线性分离器(或特征的加权组合),它在正例和负例之间具有最大的边距。你给它的所有例子都需要有基本事实标签。

SVM 有许多可调参数,您可以在训练步骤中调整这些参数。 Matlab 文档中有几个很好的tutorials 描述了差异,但对于最基本的版本,您可以只使用您的训练示例

model = fitcsvm(training,group);

此模型将在下一步中使用。

2。分类新示例:predict

要对新示例进行分类,请运行

class = predict(sample, model);

注意事项:

使用您的模型,您还可以运行交叉折叠验证,这对准确性分析很有用。

cvModel = crossval(model);
classError = kfoldLoss(cvModel);

您也可以像保存任何其他 Matlab 变量一样保存模型以供将来使用。

save('model.m', 'model');

knnclassify 来自生物信息学工具箱。在 Statistics and Machine Learning Toolbox 中,还有一个 KNN 模型,您可以使用 fitcknn 进行训练并使用 predict 进行分类。好处是您可以将您的 KNN 模型与多组数据重用,比较交叉验证结果,并将其保存以备将来使用。

【讨论】:

    猜你喜欢
    • 2013-07-04
    • 2012-04-02
    • 2011-11-11
    • 2014-04-19
    • 2019-05-26
    • 2019-01-28
    • 2016-06-26
    • 2013-12-08
    相关资源
    最近更新 更多