2016-03-11 63 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精度。

溫和警告:進行交叉驗證時,你最好保存用於測試目的的數據尚未包括在學習過程中的一部分。否則,這種或那種你的學習算法已經看到了所有的數據,你很容易陷入過度擬合。