为什么每次 sklearn.metrics 的支持值都在变化?

我正在训练一个监督学习的 Keras 模型,将数据分类为三类之一。训练后,我运行以下代码:

dataset = pandas.read_csv(filename, header=[0], encoding='utf-8-sig', sep=',')# split X and Y (last column)array = dataset.valuescolumns = array.shape[1] - 1np.random.shuffle(array)x_orig = array[:, 1:columns]testy = array[:, columns]columns -= 1# normalize datascaler = StandardScaler()testx= scaler.fit_transform(x_orig)#onehottesty = to_categorical(testy)# load weightssave_path = "[filepath]"model = tf.keras.models.load_model(save_path)# gets class breakdowny_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]。它们的总和相同,但每个类别的数量不同。

由于我的数据在每次运行之间没有变化,我期望支持值每次都相同。我错了么?如果没有,这是怎么回事?我试过谷歌搜索,但没有找到有用的结果。

可能有用的信息:当我运行 sklearn.metrics.classification_report 时,我遇到了相同的问题,且这些数字与 precision_recall_fscore_support 中的数字相匹配。

附注:与上述问题无关,但我也没能通过谷歌找到答案,希望在这里提出来没问题。当我运行 model.evaluate 时,打印出的部分内容例如 74us/sample。us/sample 是什么意思?


回答:

添加:

np.random.seed(42)

在你打乱数组之前

np.random.shuffle(array)

原因是如果不设置种子 np.shuffle 每次都会产生不同的结果。因此,当你将数组输入模型时,它会返回不同的结果。设置种子可以使每次打乱的方式相同,从而产生可重复的结果。

或者你可以不打乱数组,每次都使用相同的数组输入模型。这两种方法中的任何一种或两者结合都可以确保模型内的结果可重复性。

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注