为什么 `np.mean(x.flatten()==y)` 的结果与 `np.mean(x==y)` 的结果不同?

当我在做机器学习实验并计算准确率时,我发现了一些奇怪的事情。

np.mean(scores.flatten()==y) 的结果与 np.mean(scores==y) 的结果不同?

是因为形状差异吗?

enter image description here

enter image description here

enter image description here

enter image description here

y:[-1 1 -1 -1 1 1 1 -1 -1 -1 -1 -1 -1 -1 1 1 1 -1 1 1 1 -1 1 11 -1 -1 1 1 1 1 -1 1 1 -1 -1 1 -1 -1 -1 -1 1 1 -1 1 1 1 1-1 1 1 1 -1 -1 -1 -1 1 1 -1 1 1 -1 -1 -1 -1 -1 -1 -1 -1 -1 1 -1-1 -1 1 -1 1 1 1 1 -1 -1 1 -1 ]scores:[-1. -1. -1. -1. 1. 1. 1. -1. 1. -1. -1. -1. 1. -1. 1. 1. 1. -1. 1. 1. 1. -1. 1. 1. 1. 1. -1. 1. 1. -1. 1. -1. 1. 1. -1. -1.-1. -1. -1. -1. -1. 1. -1. -1. 1. 1. 1. 1. -1. 1. -1. 1. 1. -1 -1. -1. 1. 1. 1. 1. 1. 1. -1. ]


回答:

嗯,我认为问题在于形状,或者更准确地说,是广播(broadcasting)如何工作的。基本上,你将 scores 的第一个值与 y 的整个数组进行比较,scores 的第二个值与 y 的整个数组进行比较,以此类推。

一个简单的例子 – 200 个随机整数 [1…10],在两个形状不同的数组中,所以应该期望其中一些是相等的,但由于广播规则,平均值会有所不同

import numpy as nprng = np.random.default_rng(312345)q = np.reshape(rng.integers(0, 10, size=200), (-1, 1)) # 形状为 (200,1) 的数组t = rng.integers(0, 10, size=200) # 形状为 (200,) 的数组z = q.flatten() # q 数组中的值,形状为 (200,)print(np.mean(z == t))print(np.mean(q == t))print("---------------------------------")print(q.shape)print(z.shape)print(t.shape)print("---------------------------------")print(len(z == t))print(len((q == t).flatten()))

它会打印出

0.10.0998---------------------------------(200, 1)(200,)(200,)---------------------------------20040000

看到最后一行了吗?由于广播,你有 200*200 个项目

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中创建了一个多类分类项目。该项目可以对…

发表回复

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