代码之家  ›  专栏  ›  技术社区  ›  genekogan

GridSearchCV在scikit学习中的LogisticRegression

  •  10
  • genekogan  · 技术社区  · 11 年前

    我试图通过使用交叉验证的网格参数搜索来优化scikit learn中的逻辑回归函数,但我似乎无法实现。

    它说逻辑回归没有实现get_params(),但在文档中它说实现了。我该如何根据我的实际情况来优化这个函数?

    >>> param_grid = {'C': [0.001, 0.01, 0.1, 1, 10, 100, 1000] }
    >>> clf = GridSearchCV(LogisticRegression(penalty='l2'), param_grid)
    >>> clf
    GridSearchCV(cv=None,
           estimator=LogisticRegression(C=1.0, intercept_scaling=1, dual=False, fit_intercept=True,
              penalty='l2', tol=0.0001),
           fit_params={}, iid=True, loss_func=None, n_jobs=1,
           param_grid={'C': [0.001, 0.01, 0.1, 1, 10, 100, 1000]},
           pre_dispatch='2*n_jobs', refit=True, score_func=None, verbose=0)
    >>> clf = clf.fit(gt_features, labels)
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
      File "/Library/Python/2.7/site-packages/scikit_learn-0.14_git-py2.7-macosx-10.8-x86_64.egg/sklearn/grid_search.py", line 351, in fit
        base_clf = clone(self.estimator)
      File "/Library/Python/2.7/site-packages/scikit_learn-0.14_git-py2.7-macosx-10.8-x86_64.egg/sklearn/base.py", line 42, in clone
        % (repr(estimator), type(estimator)))
    TypeError: Cannot clone object 'LogisticRegression(C=1.0, intercept_scaling=1, dual=False, fit_intercept=True,
              penalty='l2', tol=0.0001)' (type <class 'scikits.learn.linear_model.logistic.LogisticRegression'>): it does not seem to be a scikit-learn estimator a it does not implement a 'get_params' methods.
    >>> 
    
    3 回复  |  直到 11 年前
        1
  •  8
  •   ogrisel    10 年前

    类名 scikits.learn.linear_model.logistic.LogisticRegression 指的是一个非常古老的scikit学习版本。顶级程序包名称现在为 sklearn 因为至少有2或3次释放。很可能您的python路径中同时安装了旧版本的scikit-learn。将它们全部卸载,然后重新安装0.14或更高版本,然后重试。

        2
  •  8
  •   yatu Sayali Sonawane    5 年前

    您也可以将惩罚作为参数与C一起给出。例如:

    grid_values = {'penalty': ['l1','l2'], 'C': [0.001,0.01,0.1,1,10,100,1000]} 然后, model_lr = GridSearchCV(lr, param_grid=grid_values)

        3
  •  2
  •   Enrique Benito Casado    3 年前
    from sklearn.model_selection import GridSearchCV
    

    根据计算机的功率,您可以选择:

    parameters = [{'penalty':['l1','l2']}, 
                  {'C':[1, 10, 100, 1000]}]
    grid_search = GridSearchCV(estimator = logreg,  
                               param_grid = parameters,
                               scoring = 'accuracy',
                               cv = 5,
                               verbose=0)
    
    
    grid_search.fit(X_train, y_train)   
    

    或者那个深的。

    parameters = [{'solver': ['newton-cg', 'lbfgs', 'liblinear', 'sag', 'saga']},
                  {'penalty':['none', 'elasticnet', 'l1', 'l2']},
                  {'C':[0.001, 0.01, 0.1, 1, 10, 100]}]
    
    
    
    grid_search = GridSearchCV(estimator = logreg,  
                               param_grid = parameters,
                               scoring = 'accuracy',
                               cv = 5,
                               verbose=0)
    
    
    grid_search.fit(X_train, y_train)