Python 2.7 Logistic回归的交叉验证
我想知道如何在python中使用交叉验证来提高逻辑回归模型的准确性。正在使用的数据集称为“iris”。我已经成功地将交叉验证用于支持向量机模型,但我正在努力调整代码,以便对逻辑回归模型进行同样的验证。以下是我目前的代码:Python 2.7 Logistic回归的交叉验证,python-2.7,Python 2.7,我想知道如何在python中使用交叉验证来提高逻辑回归模型的准确性。正在使用的数据集称为“iris”。我已经成功地将交叉验证用于支持向量机模型,但我正在努力调整代码,以便对逻辑回归模型进行同样的验证。以下是我目前的代码: from sklearn import cross_validation from sklearn import datasets, linear_model iris = datasets.load_iris() x_iris = iris.data y_iris = iri
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)
我必须对代码进行哪些调整才能成功地实现逻辑回归模型的交叉验证
谢谢你的帮助
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.953333
vs.0.973333
但是对于参数调整您始终可以使用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(惩罚class='l2',C=100,解算器class='liblinear')
创建分类器将为您提供0.98
精度
温和警告:执行交叉验证时,您最好保存一部分数据,用于学习过程中未包含的测试目的。否则,您的学习算法会以某种方式看到所有数据,您很容易陷入过度拟合
让我知道我下面的答案是否适合你的需要,否则我会尝试看看你到底想要什么,干杯!