先说下环境:Win10+spyder+py3.6
- 控制CPU个数的参数
n_job
当设置为1时程序能够正常运行。 - 但是当
n_job>1
或者n_job=-1
时,程序会报错,报错内容如下: 错误I - 通过大量查阅资料,以及很多人尝试的标准解决方法如下: 官方解决方案
- 按照该方法描述修改后,CSDN有位博主确实能够成功运行了。可是这边进行了同样的修改后,问题并没有解决,还是出现上述错误。
- 这时stackoverflow上有位大佬说可以按如下方式解决: 大佬解决方案
- 按照他一波操作后,依然没什么卵用。
- 但是呢,在重新打开spyder首次运行程序时,却发生了以下的报错内容,这让人似乎感觉到了一线生机: 错误II
- 之后再运行都是出现错误I的内容。
- 总结一下程序发生错误的问题如下:
1.重启spyder(相当于重启kernel),首次运行程序会发生错误II
2.之后无论怎样运行程序,都是发生错误I - 于是直觉告诉我错误II才是本质原因,经过一波操作后,设置
__spec__ = None
,成功解决该问题。
贴下成功运行的代码:
from sklearn.datasets import load_wine
from sklearn.model_selection import GridSearchCV
from sklearn import svm
from sklearn.ensemble import BaggingClassifier
def Test():
data = load_wine()
Feat = data.data
Label = data.target
bag_clf = BaggingClassifier( base_estimator=svm.SVC(kernel='rbf'), bootstrap=True,n_jobs=-1)
bag_clf.fit(Feat,Label)
Params = [{"base_estimator__C":[1,2,3],
"base_estimator__gamma":[1.2,0.9],
"max_features":[0.3,0.4,0.5],
"max_samples":[0.9,0.8,0.7],
"n_estimators":[60,80,100],
"random_state":[120,100]}]
grid_search = GridSearchCV(bag_clf, Params, cv=5,verbose=1.1,n_jobs=-1)
grid_search.fit(Feat,Label)
print('bestparam=',grid_search.best_params_ ,'score=',grid_search.best_score_)
if __name__ == '__main__':
__spec__ = None
Test()
运行结果如下:
运行结果
网友评论