如何加快cross_val_score?
Posted
技术标签:
【中文标题】如何加快cross_val_score?【英文标题】:how to speed up cross_val_score? 【发布时间】:2020-01-05 16:01:57 【问题描述】:我想使用sklearn.model_selection.cross_val_score
评估 MNIST 数据集上的 SGDClassifier。
3折我花了大约6分钟。
如何使用完整的系统功能加快进程(我的意思是使用从 CPU 到显卡等的所有东西)
顺便说一下,我正在监控 CPU 使用情况,它只使用了 54% 的电量。
from sklearn.datasets import fetch_openml
from sklearn.linear_model import SGDClassifier
from sklearn.model_selection import cross_val_score
mnist = fetch_openml('mnist_784')
X, y = mnist['data'], mnist['target']
X_train, X_test, y_train, y_test = X[:60000], X[60000:], y[:60000], y[60000:]
y_train_5 = (y_train == 5)
y_test_5 = (y_test == 5)
sgd_clf = SGDClassifier(random_state=42)
sgd_clf.fit(X_train, y_train)
cross_val_score(sgd_clf, X_train, y_train, cv=3, scoring='accuracy')
【问题讨论】:
尝试将n_jobs=x
where x>1
放入 cross_val_score
。不确定它是否会起作用
【参考方案1】:
来自docs:
n_jobs :int 或 None,可选(默认=None)
用于进行计算的 CPU 数量。除非在 joblib.parallel_backend 上下文中,否则 None 表示 1。 -1 表示使用所有处理器。
即您可以将所有可用的内核与
cross_val_score(sgd_clf, X_train, y_train, cv=3, scoring='accuracy', n_jobs=-1)
或指定其他值 n_jobs=k
,如果使用所有内核会使您的机器变慢或无响应。
这将使用更多的 CPU 内核;据我所知,scikit-learn 中没有将计算卸载到 GPU 的功能。
【讨论】:
你知道 sklearn 是在工作进程之间共享数据集还是为每个进程复制它?否则可能会导致内存错误 @ShihabShahriarKhan 我猜它有共享但不确定,你最好检查一下,看看情况如何以上是关于如何加快cross_val_score?的主要内容,如果未能解决你的问题,请参考以下文章
cross_val_score 和 gridsearchCV 是如何工作的?
如何正确使用 GridSearchCV 和 cross_val_score?
如何使用 sklearn cross_val_score() 标准化数据
ValueError:调用 cross_val_score 时发现未知类别