2016-03-11 3 views
2

Мне интересно, как использовать перекрестную проверку в 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) 

Какие изменения я должен сделать, чтобы код, чтобы добиться успешной проверки кросс для моей модели логистической регрессии?

Спасибо за любую помощь.

+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.953333333333 против 0.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 точности.

Нежного предупреждение: при выполнении перекрестной проверки вы бы лучше сохранить часть данных для целей тестирования, которые не были включены в учебном процессе. В противном случае, так или иначе, ваш алгоритм обучения видел все данные, и вы могли легко попасть в переработку.

Смежные вопросы