scikit-learn 中 LogisticRegression 上的 GridSearchCV

Posted

技术标签:

【中文标题】scikit-learn 中 LogisticRegression 上的 GridSearchCV【英文标题】:GridSearchCV on LogisticRegression in scikit-learn 【发布时间】:2013-10-01 20:05:06 【问题描述】:

我正在尝试通过使用交叉验证的网格参数搜索来优化 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.
>>> 

【问题讨论】:

【参考方案1】:

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

【讨论】:

【参考方案2】:

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

【讨论】:

非常感谢。我所要做的就是切换导入语句并且它起作用了。简单的回答。您(或其他任何人)能否告诉我在逻辑回归网格搜索中可以优化哪些参数?只是C吗?这是完整的对象:clf.best_estimator_ LogisticRegression(C=1, class_weight=None, dual=False, fit_intercept=True, intercept_scaling=1, pinch='l2', random_state=None, tol=0.0001) 是的,C 是最重要的。

以上是关于scikit-learn 中 LogisticRegression 上的 GridSearchCV的主要内容,如果未能解决你的问题,请参考以下文章

混淆矩阵中的 Scikit-learn 变化阈值

用scikit-learn进行LDA降维

是否可以在 scikit-learn 中打印决策树?

Python中计算TF-IDF(scikit-learn)

在 scikit-learn 中使用 nltk 搭配作为特征

用scikit-learn学习BIRCH聚类