首页 > 解决方案 > SVC 无法解决 MNIST

问题描述

我正在使用以下代码分解 MNIST 并运行 SVM:

mnist = fetch_openml('mnist_784', version=1)
X, y = mnist['data'], mnist['target']
y = y.astype(np.uint8)
X_train, X_test, y_train, y_test = X[:60000], X[60000:], y[:60000], y[60000:]
svm_clf = SVC()
svm_clf.fit(X_train, y_train)

昨晚我让它跑了。三个小时过去了,还是没有解决。

我得到了未来的警告

FutureWarning: The default value of gamma will change from 'auto' to 'scale' in version 0.22 to account better for unscaled features. Set gamma explicitly to 'auto' or 'scale' to avoid this warning.
  "avoid this warning.", FutureWarning)

但我无法想象不设置伽玛会以这种方式影响它。

我在 Jupyter 5.7.8 中运行 Python 3.6.7。

标签: pythonscikit-learnjupyter-notebooksvmmnist

解决方案


确实,没有解决办法。随着训练向量数量的增加,训练时间也会增加。

参考:https ://scikit-learn.org/stable/modules/svm.html#complexity

在此处输入图像描述

仅作记录,SVM 非常适合解决这些问题(请参阅此处:https ://scikit-learn.org/stable/auto_examples/classification/plot_digits_classification.html ),但是当数据集很大时,它们会变得很慢。


编辑1:在sklearn网站上有这个:

该实现基于 libsvm。拟合时间至少与样本数量成二次方关系,超过数万个样本可能不切实际。对于大型数据集,可以考虑使用 sklearn.linear_model.LinearSVC 或 sklearn.linear_model.SGDClassifier,可能在 sklearn.kernel_approximation.Nystroem 转换器之后。


推荐阅读