【问题标题】:How to deal with multi class classification with SVM?如何用 SVM 处理多类分类?
【发布时间】:2020-08-13 19:54:36
【问题描述】:

我不明白如何使用 SVM 处理多类分类。我在互联网上找到的所有方法都是一对一的方法,仅用于二进制分类。但是,我的目标是例如:

print(target)

输出:

[ 0  0  0 ... 9 9 9] 

那么,如何正确处理 SVM 呢?我刚刚像那些例子一样构建了模型。但是,在我看来,这不是多标签分类的正确方法。请指导我。如果 SVM 根本不是一个好的选择,请建议我在随机森林、决策树、K 最近邻等中哪一个会好(并且像下面的示例一样易于实现)(除了我有的 NN 和 CNN已经在我的数据集中用这两种算法实现了,我只需要一种算法来比较我的结果)。到目前为止,我的编码:

X_train, X_test, y_train, y_test = train_test_split(data, target, test_size=0.2, random_state=42)

from sklearn.svm import SVC
model_svm = SVC(kernel='linear')
clf_svm = model_svm.fit(X_train,y_train)
y_svm = model_svm.predict(X_test)

from sklearn.metrics import accuracy_score
print('Accuracy of SVM: ', accuracy_score(y_svm, y_test))

【问题讨论】:

  • 请澄清您实际上是在谈论多标签(一个样本可以同时属于多个类)还是简单的多类(许多类,但一个样本只能属于一类)分类。
  • 多类,例如Fashion-MNIST;我已经编辑了我的问题的标题
  • 你到底问什么不清楚;您对此处显示的代码有任何具体问题吗?

标签: machine-learning svm


【解决方案1】:

你使用了线性核,它只适用于线性边界:

model_svm = SVC(kernel='linear')

尝试使用rbf,它可以用于大多数非线性边界并且非常有效。

model_svm = SVC(kernel='rbf')

参考:https://scikit-learn.org/stable/auto_examples/svm/plot_svm_kernels.html

【讨论】:

  • 究竟是为了什么?请记住,OP 实际上并没有报告他们现有方法的任何具体问题(至少还没有 - 在 cmets 中要求这样做)。
  • 只是一个基本问题,时尚界是线性边界还是非线性边界?
  • 是的,它有非线性边界。看看时尚 MNIST 数据,它看起来像那样。
  • 您如何定义“看”?尽管答案很可能是正确的(从某种意义上说,任何事物都比大象更可能是非大象的),但问题本身并不是那么“基本”@user1896653 这就是为什么我坚持确切 i> 是你的问题。
  • 那么,对于多类分类问题,如果我们要处理SVM,我们应该使用多项式或RBF而不是线性核,对吧?
猜你喜欢
  • 2020-02-10
  • 2019-01-30
  • 2011-03-21
  • 2014-05-07
  • 2016-07-15
  • 2013-05-20
  • 2015-01-28
  • 2012-04-02
相关资源
最近更新 更多