2015-05-08 7 views
1

У меня есть вопрос о точности и значениях отзыва в scikit learn. Я использую функцию SGDClassifier для классификации моих данных. Чтобы оценить производительность, я использую функцию точности и возврата precision_recall_fscore_support, но каждый раз, когда я запускаю программу, у меня разные значения в матрице точности и возврата. Как я могу получить истинные значения? Мой код:Scikit learn SGDClassifier: точность и отзыв изменяют значения каждый раз

scalerI = preprocessing.StandardScaler() 
X_train = scalerI.fit_transform(InputT) 
X_test = scalerI.transform(InputCross) 
clf = SGDClassifier(loss="log", penalty="elasticnet",n_iter=70) 
y_rbf = clf.fit(X_train,TargetT) 
y_hat=clf.predict(X_test) 
a= clf.predict_proba(X_test) 
p_and_rec=precision_recall_fscore_support(TargetCross,y_hat,beta=1) 

Спасибо

ответ

1

От docs SGDClassifier имеет random_state параметров, который инициализируется в None это начальное значение используется для генератора случайных чисел. Вы должны установить это значение, так что результаты повторяются так установить random_state=0 или любой другой любимый номер, который вы хотите

clf = SGDClassifier(loss="log", penalty="elasticnet",n_iter=70, random_state=0) 

должны давать одинаковые результаты для каждого прогона

Из документов:

random_state : int seed, RandomState instance или None (по умолчанию). Запуск генератора псевдослучайных чисел для использования при перетасовке данных .

+0

О, спасибо! Я не понял смысла случайного состояния. Так что теперь вопрос может заключаться в том, как выбрать наилучшее количество, чтобы получить наилучшие результаты. – PSan

+0

Не беспокойтесь, пожалуйста, проверьте, и если он исправит вашу проблему, не забудьте принять мой ответ, в левом верхнем углу моего ответа будет пустое галочко. Это улавливает много людей, включая меня, всегда проверяйте, имеет ли конструктор для классификатора параметр «random_state». – EdChum

+0

Просто проверено, и все работает! Спасибо – PSan

0

У меня такая же проблема, за исключением того, что при запуске SGDClassifier с GridSearchCV на сетке параметров. Я даже установил random_state в SGDClassifier. Я замечаю, что если я запускаю поиск сетки несколько раз, я получаю не очень-то-то-то разные средние баллы для комманд param из run to run. Я даже устанавливаю warm_start = False только для того, чтобы убедиться, что каждый комманд с параметром был чистой инициализацией.

+0

Итак, я понял, что вызывало рандомизацию в GridSearchCV. Если параметр перекрестной проверки не передается в поиск по сетке, и у вас есть несколько классов, поиск по сетке по умолчанию использует стратифицированные kfolds с его случайным перетасовкой случайных данных. Если вы инициализируете KFolds с заданным random_state и передаете его в поиск сетки, дельта из нескольких прогонов сетчатого поиска уменьшается до 1.00E-05 – Turbo