4

Я пытаюсь оптимизировать функцию логистической регрессии в scikit-learn, используя поиск по перекрестной проверке сетки, но я не могу ее реализовать.GridSearchCV on LogisticRegression in 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. 
>>> 

ответ

5

Название класса scikits.learn.linear_model.logistic.LogisticRegression относится к очень старой версии scikit-learn. Имя пакета верхнего уровня теперь sklearn, так как по крайней мере 2 или 3 выпуска. Очень вероятно, что у вас есть старые версии scikit-learn, установленные одновременно в вашем пути python. Удалите их все, затем переустановите 0.14 или позже и повторите попытку.

+0

Большое спасибо. Все, что мне нужно было сделать, это переключить оператор импорта, и это сработало. Простой ответ. Можете ли вы (или кто-либо еще) сказать мне, какие параметры можно оптимизировать в поиске сетки логистической регрессии? Это просто C? Вот полный объект: clf.best_estimator_ LogisticRegression (C = 1, class_weight = None, dual = False, fit_intercept = True, intercept_scaling = 1, штраф = 'l2', random_state = None, tol = 0.0001) – genekogan

+3

Да , '' C'' является самым важным. –

1

Вы также можете назначить штраф в качестве параметра вместе с C. Например. : grid_values ​​= {'штраф': ['l1', 'l2'], 'C': [0.001,0.01,0.1,1,10,100,1000]}. а затем, model_lr = GridSearchCV (lr, param_grid = grid_values).