Logistic回归的交叉验证

时间:2016-03-11 20:05:32

标签: python-2.7

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

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)

我必须对代码进行哪些调整才能实现逻辑回归模型的成功交叉验证?

感谢您的帮助。

1 个答案:

答案 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

通过这样做,创建具有最佳参数LogisticRegression(penalty='l2',C=100,solver='liblinear')的分类器将为您提供0.98准确度。

  

温和警告:执行交叉验证时,您最好将部分数据保存用于测试目的,但未包含在学习过程中。否则,您的学习算法会以某种方式看到所有数据,您很容易陷入过度拟合之中。