我想用不同的参数来评估不同的分类器。
为了加快LogisticRegression
的速度,我使用LogisticRegressionCV
(至少快2倍),并计划对其他分类器使用GridSearchCV
。
但是问题在于它给了我相等的C
参数,但没有AUC ROC
得分。
我将尝试修复许多参数,例如scorer
、random_state
、solver
、max_iter
、tol
...
请参考以下示例(实际数据没有关系):
测试数据和常见部分:
from sklearn import datasets
boston = datasets.load_boston()
X = boston.data
y = boston.target
y[y <= y.mean()] = 0; y[y > 0] = 1
import numpy as np
from sklearn.cross_validation import KFold
from sklearn.linear_model import LogisticRegression
from sklearn.grid_search import GridSearchCV
from sklearn.linear_model import LogisticRegressionCV
fold = KFold(len(y), n_folds=5, shuffle=True, random_state=777)
网格搜索
grid = {
'C': np.power(10.0, np.arange(-10, 10))
, 'solver': ['newton-cg']
}
clf = LogisticRegression(penalty='l2', random_state=777, max_iter=10000, tol=10)
gs = GridSearchCV(clf, grid, scoring='roc_auc', cv=fold)
gs.fit(X, y)
print ('gs.best_score_:', gs.best_score_)
gs.best_score_: 0.939162082194
LogisticRegressionCV
searchCV = LogisticRegressionCV(
Cs=list(np.power(10.0, np.arange(-10, 10)))
,penalty='l2'
,scoring='roc_auc'
,cv=fold
,random_state=777
,max_iter=10000
,fit_intercept=True
,solver='newton-cg'
,tol=10
)
searchCV.fit(X, y)
print ('Max auc_roc:', searchCV.scores_[1].max())
最大auc_roc值为0.970588235294
solver参数中使用了newton-cg
,其余也进行了尝试。我忘了什么?
P.S. 在这两种情况下,我还收到了警告信息 "/usr/lib64/python3.4/site-packages/sklearn/utils/optimize.py:193: UserWarning: Line Search failed warnings.warn('Line Search failed')",我也不理解它的含义。如果有人可以解释一下它的含义,我会很高兴,但我希望它与我的主要问题无关。
编辑更新
根据@joeln的评论,还需要添加max_iter=10000
和tol=10
参数。这不会在任何位数上改变结果,但警告消失了。
tol
并将相同的大max_iter
提供给LogisticRegression
?如果它们正在解决相同的方程并到达不同的最小值,那么可能是因为搜索停止得太早了。 - joelntol
值的问题。您建议使用什么值?不幸的是,我是一个机器学习新手,也不确定...关于数据方面-我的问题示例特别基于嵌入在sklearn波士顿房屋演示值中,并且完全可重现!因此,我期望任何人只需复制,粘贴并运行它,都应该收到完全相同的结果。 - Hubbitus