我在KNeighborsClassifier上运行GridSearchCV,并将n_jobs超参数设置为-1,因此所有CPU都用于网格搜索。所以直觉上我认为应该有8种不同的超参数组合并行运行。
在运行过程中,使用Ubuntu上的htop,我可以看到所有8个CPU都被Python使用了99%,看起来一切正常。但jupyter在运行过程中输出
[Parallel(n_jobs=1)]: Using backend SequentialBackend with 1 concurrent workers.
从代码输出来看,似乎所有操作都是串行执行的,而不是并行执行的。
那么这里到底发生了什么?
编辑:代码如下
from sklearn.model_selection import GridSearchCVparam_grid_knn=[ { 'weights' : ['uniform','distance'], 'n_jobs' : [-1], 'n_neighbors' : [3,5,7], 'p' :[1,2] }]knn = KNeighborsClassifier()grid_search = GridSearchCV(knn,param_grid_knn,cv=5,scoring='accuracy',return_train_score=True,verbose=2,refit=True)grid_search.fit(train_data,train_labels)
回答:
我找到了答案,n_jobs=1指的是GridSearchCV使用的n_jobs,默认值为1,因为我在函数调用中没有指定它。