Python机器学习:循环中的类标签,以反映类之间的相关性

时间:2017-10-09 14:43:10

标签: python machine-learning encoding classification multilabel-classification

我想用python中的机器学习预测一个时间序列(使用神经网络,但并不重要)。

除了使用先前值的信息($ t-1 $,$ t-2 $,...等)之外,我还想使用另一个变量:一天中的小时

愚蠢的方法

一种方法是映射:

  

$ 00:00 \ rightarrow 0 $

     

$ 01:00 \ rightarrow 1 $

.... 等等。所以我有$ 24 $ $ $ $ 0,1,2,...,23} $。但是有一个问题:$ 23 $和$ 0 $接近,但与此同时,这里没有反映出来。

第二种方法:一种热门编码?

另一种方法是使用$ 24 $条目创建向量,其中除了我们正在查看的类之外,所有元素都为零。这相当于创建虚拟变量。例如:

  

$ 00:00 \ rightarrow [1,0,0,0,....,0] $

     

$ 01:00 \ rightarrow [0,1,0,0,...,0] $

......等等。但是有一个问题:这根本没有反映出相关性!

其他方法

我在考虑使用一些循环结构,例如$ sin $,$ cos $或极坐标?

我还没有找到解决方案,但这是我的进步:

  1. 通过规范化将愚蠢方法的类标签映射到$ [0,1] $
  2. 将它们缩放到$ 0 $到$ 2 \ pi $。
  3. 的范围内
  4. 使用$ cos $或$ sin $。
  5. 这种方法不太有用,但我可以看到一些亮点......有什么想法吗?

1 个答案:

答案 0 :(得分:0)

我找到了一个解决方案。从类标签[0,1,2,3,4,5]我们构建以下

array([[ 0, 15, 24, 33, 42, 51],
       [ 1, 10, 25, 34, 43, 52],
       [ 2, 11, 20, 35, 44, 53],
       [ 3, 12, 21, 30, 45, 54],
       [ 4, 13, 22, 31, 40, 55],
       [ 5, 14, 23, 32, 41, 50]])

这是通过使用类标签作为第一列来创建的。然后第二列从10开始并转到15但是它被移位以使“间隙”在第一个和第二个标签之间,而不是最后一个和第一个。你重复一遍。

然后你分配

0 --> [ 0, 15, 24, 33, 42, 51]
1 --> [ 1, 10, 25, 34, 43, 52]

等等.. 然后取任何两个“相邻”矢量类的差异的标准是相同的。因此,我们没有任何差距。

我认为可能有点工作,但我不确定是否可以将其提供给功能