как автоматически выбрать максимальное значение в list.append - python - PullRequest
0 голосов
/ 16 мая 2018

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

models = []
models.append(('LR', LogisticRegression()))
models.append(('KNN', KNeighborsClassifier()))
models.append(('NB', GaussianNB()))
models.append(('SVM', SVC()))

maxval = models[0] # initialize max to first element
results = []
names = []
storeresults = []
for name, model in models:

kfold = model_selection.KFold(n_splits=10, random_state=seed)
cv_results = model_selection.cross_val_score(model, X_tr, Y_tr, cv=kfold, scoring=scoring)
results.append(cv_results)
names.append(name)
msg = "%s: %f (%f)" % (name, cv_results.mean(), cv_results.std()
print(msg)

maxval = max(results)
#print(maxval)
print('The best classifier is ' , maxval)

Мой вывод:

LR: 0.552291 (0.021477)
SVM: 0.897305 (0.015317)
KNN: 0.884636 (0.016431)
NB: 0.609434 (0.026586)

The best classifier is  0.654986522911 NB

Это должен был быть SVM, но как мне это сделать?

первое число после имени является средним значением результатов, а числа в скобках являются стандартным отклонением. Когда я бегу в своем питоне spyder, он выбирает NB (Наивный Байес) вместо SVM (Support Machine Vector).

Ответы [ 2 ]

0 голосов
/ 16 мая 2018
max_cross_val_score = max(cv_results.mean()) 
max_cross_val_score_classifier = models[cv_results.mean().index(max_cross_val_score)]

Лучшим классификатором является max_cross_val_score_classifier с max_cross_val_score в качестве максимального показателя перекрестной проверки.

0 голосов
/ 16 мая 2018

Значением каждого элемента списка является массив.model_selection.cross_val_score возвращает массив.Итак, вы берете максимум массивов (что приведет к ошибке в Python 2.x).

Создайте список со средним числом массивов, и вы получите SVM в качестве ответа

...