2016-03-11 213 views
2

我想知道如何在python中使用交叉验证来提高逻辑回归模型的准确性。正在使用的数据集称为“虹膜”。我已经成功地对SVM模型使用了交叉验证,但是我正在努力调整我的代码来为逻辑回归模型做同样的工作。这里是我到目前为止的代码:Logistic回归的交叉验证

from sklearn import cross_validation 
from sklearn import datasets, linear_model 
iris = datasets.load_iris() 
x_iris = iris.data 
y_iris = iris.target 
svc = svm.SVC(C=1, kernel='linear') 
k_fold = cross_validation.StratifiedKFold(y_iris, n_folds=10) 
# labels, the  number of folders 
#for train, test in k_fold: 
# print train, test 
scores = cross_validation.cross_val_score(svc, x_iris, y_iris, cv=k_fold,  scoring='accuracy') 
# clf.fit() is repeatedly called inside the cross_validation.cross_val_score() 
print scores 
print 'average score = ', np.mean(scores) 
print 'std of scores = ', np.std(scores) 

我必须对代码来实现成功的交叉验证我的逻辑回归模型怎样的调整?

感谢您的任何帮助。

+0

让我知道如果我的答案从下面适合您的需求,否则我会尝试看看你想要什么,欢呼! –

回答

2
lg = LogisticRegression() 
scores = cross_validation.cross_val_score(lg, x_iris, y_iris, cv=k_fold,scoring='accuracy') 
print scores 
print 'average score = ', np.mean(scores) 
print 'std of scores = ', np.std(scores) 

使用默认值分类器创建LogisticRegression对我来说工作正常。输出略低于SVM机器方法,0.9533333333330.973333333333

参数调整,你可以随时使用GridSearchCV自动进行尝试的参数所有可能的组合的cv倍交叉验证(在下面的例子中,我将使用10像之前)。例如:

from sklearn import grid_search 
parameters = { 
      'penalty':['l2'], 
      'C':[1,10,100], 
      'solver': ['newton-cg', 'lbfgs', 'liblinear', 'sag'], 
     } 
GS = grid_search.GridSearchCV(lg, parameters,cv=10,verbose=10) 
GS.fit(x_iris,y_iris) 
print GS.best_params_ # output: {'penalty': 'l2', 'C': 100, 'solver': 'liblinear'} 
print GS.best_score_ # output: 0.98 

通过这样做,创建分类与最佳PARAMS LogisticRegression(penalty='l2',C=100,solver='liblinear')会给你一个0.98精度。

温和警告:进行交叉验证时,你最好保存用于测试目的的数据尚未包括在学习过程中的一部分。否则,这种或那种你的学习算法已经看到了所有的数据,你很容易陷入过度拟合。