我想用不同的参数对不同的分类器进行评分。
为了加速LogisticRegression
I use 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
Logistic回归CV
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
仅用于提供固定值,其他也尝试过。
我忘记了什么?
附:在这两种情况下我也收到警告“/usr/lib64/python3.4/site-packages/sklearn/utils/optimize.py:193:UserWarning:行搜索失败
warnings.warn('行搜索失败')“我也无法理解。如果有人也描述它的含义,我会很高兴,但我希望它与我的主要问题无关。
编辑更新
通过 @joeln 评论添加max_iter=10000
and tol=10
参数也。它不会改变任何数字的结果,但警告消失了。