【问题标题】:Why the accuracy of svm in python and Matlab are different?为什么python和Matlab中svm的准确率不一样?
【发布时间】:2019-07-24 12:56:35
【问题描述】:

我在一个数据集上应用了 svm,我达到了 100% 的准确率! 但是当我使用 matlab 分类器应用程序时,我达到了 98.8% 的准确率。 在他们两个中,内核都是 RBF 。 在 python 中,我使用 20% 的数据作为测试数据,80% 的数据作为训练数据。 谁能解释一下?

all_data = pd.read_csv('data.csv', header=0, lineterminator="\n")
all_data = shuffle(all_data,random_state= 20)
all_data = all_data.apply(LabelEncoder().fit_transform)
data = np.array(all_data.drop('g', axis=1), dtype=np.float32)
labels = np.array(all_data['g'])
train_data = data[:200]
train_lable = labels[:200]
test_data = data[200:]
test_lable = labels[200:]
class_names = [25]
clf = svm.SVC(gamma=0.001)
clf.fit(train_data, train_lable)
score = clf.score(test_data,test_lable)
print(score)

【问题讨论】:

  • 每个设置都一样吗?无论如何,差异很小
  • 我不知道matlab是怎么分割训练数据和测试数据的,所以训练数据和测试数据可能会有一些差异,内核是一样的,其他设置都是默认的。跨度>
  • 嗯,有你的答案;匹配设置,您将获得相同的性能。
  • 经过大量搜索(我是 ML 等的初学者),这里是 python 和 Matlab 中的设置:在 python + kernel : RBF 中,使用一对一的方法(默认根据 sklearn doc 的 svm 是一对一的) , gamma = 0.0001 。在 MATLAB + 内核中:高斯(经过一番搜索,我意识到这两个(RBF 和高斯)是相同的。使用一对一方法,内核比例为 0.94。框约束级别:1(我不知道如何更改在 python 中,我在 sklearn 的 svm 文档中找不到任何内容。当我将 gamma 更改为 0.94 或更高时,准确度从 100% 降低到 40% 左右。

标签: python matlab classification svm


【解决方案1】:
  1. Matlab 和 Python 的两个库之间可能存在一些应用差异。
  2. SVM 对浮点精度很敏感,所以我猜这是因为 Matlab 和 Python 中浮点数的差异。如果您强制 matlab 以 uint64 进行计算,您可能会找到更接近的答案。

最好在datascience forum提问。

【讨论】:

    猜你喜欢
    • 2014-02-23
    • 2014-02-28
    • 2012-09-26
    • 1970-01-01
    • 2012-04-13
    • 2015-08-23
    • 2017-11-30
    • 2019-11-23
    • 1970-01-01
    相关资源
    最近更新 更多