RandomizedSearchCV能否在多个CPU上运行?

2024-10-03 19:26:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我试着用随机搜索来学习逻辑回归的高参数。代码如下:

random_searcher = RandomizedSearchCV(
  estimator = MyLogRegClassifier(),
  param_distributions = {'penalty': ['l2', 'l1'], 
                         'class_weight': [None, 'auto'],
                         'C': logspace(-20, 20, 10000), 
                         'intercept_scaling': logspace(-20, 20, 10000)},
  cv = 4,
  scoring = make_scorer(f1_score, average='samples'),
  n_iter = 100,
  n_jobs = -1,
  pre_dispatch = 10,
  refit = False
)
random_searcher.fit(X_tr, y_tr)

但是,它不能使用多个CPU,它总是在一个CPU上运行。但是当我切换到GridSearchCV时,它会产生多个进程并加载所有cpu。在

^{pr2}$

X\u tr是形状稀疏矩阵(6700,25640),y\u tr是形状为(6700,83)的稠密矩阵 MyLogRegClassifier本质上是OneVsRestClassifier(LogisticRegression())。在

class MyLogRegClassifier(BaseEstimator, ClassifierMixin):
    def __init__(self, C=1.0, penalty='l2', 
                 intercept_scaling=1, class_weight=None, n_jobs=1):
        self.C = C
        self.n_jobs = n_jobs
        self.penalty = penalty
        self.intercept_scaling = intercept_scaling
        self.class_weight = class_weight

    def fit(self, X, y):
        self.clf = OneVsRestClassifier(LogisticRegression(
            C=self.C, penalty=self.penalty,
            intercept_scaling=self.intercept_scaling, 
            class_weight=self.class_weight),
                                       n_jobs=self.n_jobs)
        self.clf.fit(X, y)
        return self

    def predict(self, X):
        return self.clf.predict(X)

我错过什么了吗?在


Tags: selfdefjobsrandomtrclassfitclf