Я работаю над обучением модели контролируемого обучения керасу для классификации данных в одну из 3 категорий. После обучения я запускаю это:
dataset = pandas.read_csv(filename, header=[0], encoding='utf-8-sig', sep=',')
# split X and Y (last column)
array = dataset.values
columns = array.shape[1] - 1
np.random.shuffle(array)
x_orig = array[:, 1:columns]
testy = array[:, columns]
columns -= 1
# normalize data
scaler = StandardScaler()
testx= scaler.fit_transform(x_orig)
#onehot
testy = to_categorical(testy)
# load weights
save_path = "[filepath]"
model = tf.keras.models.load_model(save_path)
# gets class breakdown
y_pred = model.predict(testx, verbose=1)
y_pred_bool = np.argmax(y_pred, axis=1)
y_true = np.argmax(testy, axis=1)
print(sklearn.metrics.precision_recall_fscore_support(y_true, y_pred))
sklearn.metrics.precision_recall_fscore_support
печатает, среди других показателей, поддержку для каждого класса. По этой ссылке поддержка - это число вхождений каждого класса в y_true, которое является истинными метками. https://scikit-learn.org/stable/modules/generated/sklearn.metrics.precision_recall_fscore_support.html
Моя проблема: при каждом запуске поддержка различна. Я использую одни и те же данные, и поддержка каждого класса всегда складывается одинаково (но отличается от общей суммы в файле - чего я тоже не понимаю), но число на класс отличается.
Например, один прогон может сказать [16870, 16299, 7807], а следующий может сказать [17169, 15923, 7884]. Они складываются одинаково, но каждый класс отличается.
Поскольку мои данные не меняются между прогонами, я ожидаю, что поддержка будет одинаковой каждый раз. Я ошибаюсь? Если нет, что происходит? Я пробовал поискать в Google, но не получил никаких полезных результатов.
Потенциально полезная информация: когда я запускаю sklearn.metrics.classification_report, у меня возникает та же проблема, и числа из нее совпадают с числами из precision_recall_fscore_support ,
Sidenote: не имеет отношения к вышеупомянутому вопросу, но я не мог google-fu также ответить на этот вопрос, я надеюсь, что это нормально, чтобы включить сюда. Когда я запускаю model.evaluate, часть распечатки составляет, например, 74us / sample. Что значит нас / образец?