NN训练 - 使用一个热编码与具有人工特征

时间:2017-05-22 07:25:32

标签: machine-learning tensorflow neural-network deep-learning feature-extraction

我正在尝试使用NN进行回归 - 我的设置有2个隐藏层。

我输入的数据具有以下结构 - 特征A,B,C,D是数字(可以取-500k到500k的值),特征E是分类的,F是我想要的因变量预测。 A,B,C,D将因国家而异(因此我将国家列为单独的特征)。

我在训练时尝试过两种不同的方法来表达特征E:

  1. 一个热门编码
  2. 使用现有的A,B,C,D功能
  3. 我附上了培训数据的样子(组成值)以及我的两种方法的屏幕截图。

    [data][1]
    [Option1][2]
    [Option2][3]
    

    选项(2)非常有效(就r ^ 2和单个预测的准确性而言),而(1)工作得非常糟糕。

    我还尝试使用单热编码对A,B,C,D(-mean / std)进行标准化,但它没有多大帮助。

    值得注意 - 选项(2)即使没有规范化也能很好地工作。

    我的问题是 - 我怎么能理解为什么会这样呢?我认为一个热门编码应该可以正常工作,但似乎它没有。为什么NN更好地从方法(2)中理解分类?

    由于

    [1]: https://i.stack.imgur.com/sixHw.png
    [2]: https://i.stack.imgur.com/VMw8O.png
    [3]: https://i.stack.imgur.com/5eQxk.png
    

1 个答案:

答案 0 :(得分:0)

  

我还尝试在使用单热编码时对A,B,C,D进行标准化,但它没有多大帮助。

我建议你进一步测试。这将是最好的事情。因为如果数据在01的范围内,神经网络将更好地逼近函数,因为这非常适合激活函数。

但您必须始终将所有数据标准化。标准化数字,例如A = 346,您必须将其除以346或更高的数字,但也要高于数据集中A的所有值。

如果A,B,C,D具有相似的特征,您可以将它们标准化。如果它们具有完全不同的特性,则对于每个特征(A,B,C和D)都应如下所示。

因此对于以下数据集:

{ A: 212, B: 1241, C: 321, D: 2, country: Germany }
{ A: 72, B: 412, C: 545, D: 345, country: UK}
{ A: 43, B: 123, C: 4, D: 977, country: Netherlands}

您必须将A,B,C和D除以相同的数字才能将它们标准化。这些国家应该是一个热门编码,就像你已经做过的那样。

所以A,B,C,D的最高值是1241,所以我将所有数字除以此值:

{ A: 0.17, B: 1, C: 0.26, D: 0, DE: 1, UK: 0, NL: 0 }
{ A: 0.06, B: 0.33, C: 0.44, D: 0.28, DE: 0, UK: 1, NL: 0 }
{ A: 0.03, B: 0.10, C: 0, D: 0.79, DE: 0, UK: 0, NL: 1}

数字已四舍五入

更多信息here