Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 2.7 Logistic回归的交叉验证_Python 2.7 - Fatal编程技术网

Python 2.7 Logistic回归的交叉验证

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

我想知道如何在python中使用交叉验证来提高逻辑回归模型的准确性。正在使用的数据集称为“iris”。我已经成功地将交叉验证用于支持向量机模型,但我正在努力调整代码,以便对逻辑回归模型进行同样的验证。以下是我目前的代码:

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
精度

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


让我知道我下面的答案是否适合你的需要,否则我会尝试看看你到底想要什么,干杯!