您可以使用简单的比较直接将预测与预期结果进行比较,在这种情况下只需==. 这将返回布尔值 -True或False,您可以将其总结为True == 1和False = 0。
这是使用一些随机生成的虚拟数据的案例示例:
In [1]: import numpy as np
In [2]: y = np.random.choice([-1, 0, 1], 10)
In [3]: preds = np.random.choice([-1, 0, 1], 10)
In [4]: y
Out[4]: array([ 1, 1, 1, -1, 1, -1, -1, 1, 1, 0])
In [5]: preds
Out[5]: array([ 0, -1, 1, 0, 1, 1, -1, 1, -1, 0])
然后使用两个检查来检查您的预测是否正确的真实部分:
- 预测在哪里等于基本事实,即你在哪里预测方向是正确的,以及
- 预测在哪里等于您感兴趣的方向,即向下 (
-1)、无变化 ( 0) 或向上 ( 1)
这可以按如下方式完成:
In [6]: (y == preds) & (preds == 0) # & means we needs both checks to be True
Out[6]:
array([False, False, False, False, False, False, False, False, False, True])
在这两项检查之后,我们只能看到最终位置为 True,因为这是唯一的预测位置True和价值方向0。
然后,您可以编写一个循环来检查所有值并对它们执行一些操作:
In [7]: n = len(preds) # the number of test samples (= 10 in my dummy example)
In [8]: for direction in [-1, 0, 1]:
score = sum((y == preds) & (preds == 0))
accuracy = score / n
print(f"Direction {direction:>2}: {score}/{n} = {accuracy * 100:.1f}%")
这使:
Direction -1: 1/10 = 10.0%
Direction 0: 1/10 = 10.0%
Direction 1: 1/10 = 10.0%