关于scikit-learn中LogisticRegression的GridSearchCV

时间:2013-09-26 02:26:08

标签: python machine-learning scikit-learn cross-validation logistic-regression

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

它说Logistic回归并没有实现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.
>>> 

2 个答案:

答案 0 :(得分:6)

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

答案 1 :(得分:3)

您也可以将惩罚作为参数与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)。