【发布时间】:2020-03-10 13:49:49
【问题描述】:
我正在使用以下代码分解 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。
【问题讨论】:
-
SVM 训练速度很慢,而且你也有太多的样本要训练,首先尝试将训练规模减少到 5000-10000 左右,然后测试准确度,然后你可以在另一批 5k 样本上进行训练.该警告与训练时间无关。
-
这可能与伽玛无关。绝对让它变得如此缓慢的一件事是,SVM 根据定义是一个二元分类器。当您将它与多个类一起使用时,Scikit-Learn 会为每一对类训练一个模型(我相信 2^10)。所以它很长,因为你正在训练几十个分类器。此外,您没有使用 LinearSVC,因此非线性速度要慢一千倍。
-
我对伽玛的看法是这样的,但我想我会包括该信息以防万一。今天早上我在一个有一定功率和 GPU 的 Colab 笔记本上再次尝试了它。我不太确定它是否有帮助。 ....我对这个东西比较陌生——3 小时对于图像数据的二进制分类器来说是合理的时间?
-
如果您使用
sklearn训练模型,在 GPU 上使用 Colab 运行将无济于事,因为默认情况下sklearn模型仅在 CPU 上运行。二元分类器的训练时间取决于您使用的算法类型,速度和准确性之间总是需要权衡取舍。您可以尝试决策树、神经网络等。它们可能会在更短的时间内进行训练。 -
正如@techytushar 所说,先尝试将样本减少到 100,看看它是否正常工作或卡住,然后如果一切正常,则进一步增加。
标签: python scikit-learn jupyter-notebook svm mnist