Почему матрица путаницы отличается, когда я выполняю ее снова?

Интересно, почему матрица путаницы меняется, когда я запускаю ее во второй раз, и можно ли этого избежать. Точнее, я получил [[53445 597] [958 5000]] в первый раз, однако я получаю [[52556 1486][805 5153]] при повторном выполнении.

# get the data from dataset and split into training-set and test-set
mnist = fetch_openml('mnist_784')
X, y = mnist['data'], mnist['target']
X_train, X_test, y_train, y_test = X[:60000], X[60000:], y[:60000], y[60000:]
# make the data random
shuffle_index = np.random.permutation(60000)
X_train, y_train = X_train[shuffle_index], y_train[shuffle_index]  
# true for all y_train='2', false for all others
y_train_2 = (y_train == '2')    
y_test_2 = (y_test == '2')

# train the data with a label of T/F depends on whether the data is 2
# I use the random_state as 0, so it will not change, am I right?
sgd_clf = SGDClassifier(random_state=0)
sgd_clf.fit(X_train, y_train_2)

# get the confusion_matrix
y_train_pred = cross_val_predict(sgd_clf, X_train, y_train_2, cv=3)
print('confusion_matrix is', confusion_matrix(y_train_2, y_train_pred))

Что это, что вы выполняете во второй раз? Только последняя строчка? Или все

yatu 27.05.2019 13:25

разве это не связано с тем, что shuffle_index меняется каждый раз и, следовательно, дает разные результаты?

crash 27.05.2019 13:26

Я выполняю все во второй раз

Ji Tiantian 27.05.2019 13:26

возможно это связано с shuffle_index, попробую еще раз, спасибо Crash

Ji Tiantian 27.05.2019 13:30
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
4
62
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы используете разные данные при каждом прогоне (shuffle_index), поэтому нет причин, по которым прогон машинного обучения и результирующая матрица путаницы должны быть точно такими же, хотя результаты должны быть близкими, если алгоритм работает хорошо.

Чтобы избавиться от случайности, либо укажите индексы:

shuffle_index = np.arange(60000) #Rather "not_shuffled_index"

Или используйте одно и то же семя:

np.random.seed(1) #Or any number
shuffle_index = np.random.permutation(60000) #Will be the same for a given seed

@JiTiantian Добро пожаловать в SO; если ответ решил вашу проблему, пожалуйста, примите его (см. Что мне делать, когда кто-то отвечает на мой вопрос?)

desertnaut 27.05.2019 15:49

Другие вопросы по теме