我试图通过使用交叉验证的网格参数搜索来优化scikit-learn中的逻辑回归函数,但似乎无法实现它。
文档中说逻辑回归实现了get_params()方法,但实际上它并没有实现。我该如何在我的真实数据上优化这个函数呢?
>>> param_grid = {'C': [0.001, 0.01, 0.1, 1, 10, 100, 1000] }>>> clf = GridSearchCV(LogisticRegression(penalty='l2'), param_grid)>>> clfGridSearchCV(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.>>>
回答:
类名scikits.learn.linear_model.logistic.LogisticRegression
指的是一个非常旧的scikit-learn版本。从至少2到3个版本以来,最顶级的包名已经改为sklearn
。很可能你的Python路径中同时安装了旧版本的scikit-learn。请卸载所有旧版本,然后重新安装0.14或更高版本,再试一次。