我可以尝试通过拆分成桶和排序来为它们分配一个值,而不是对 NN 算法的离散变量进行二值化吗?

数据挖掘 机器学习 神经网络
2022-03-06 07:28:48

为每个离散变量的每个值创建一个布尔值会增加特征的数量。我有一个解决它的想法,但我无法在互联网上找到任何东西,所以也许有人可以向我指出资源或让我知道他们是否认为这是可能的。如果不是,也许指向另一个解决方案(我能找到的只是二值化)。

所以如果我们有训练向量Xi和类似的标签yi, 我建议我们通过一些变量来划分训练集j, 这样对于每个Xi为此ji等于某个值q,Xi将在P(q).

那么对于每个q我们计算平均值yi为了P(q)并对这些平均值进行排序,映射每个q到它在排序列表中的索引上。该值用作特征j. 我怀疑这应该比仅仅给每个值一个随机索引更好,因为任何剩余的非线性都有望被隐藏层修复。但是,如果函数有点准单调,这些非线性模式似乎会更容易理解。

我认为这可以改进,可能不仅仅是找到平均值,另一种测量方法可以更好地工作,并且对于多个离散特征也可以,我不确定是否应该单独为每个变量重复这个过程,或者通过多维分区。

主要问题当然是,这个过程是否有帮助,如果没有,是否有类似的东西可以解决这个问题?

1个回答

仅取平均值似乎更好,这样可以更好地表示组之间的距离,而不是仅按顺序对它们进行索引。对于目标,您应该小心不要将当前行包含在内,因为对于测试集和实际预测,您也不能使用该目标(出于显而易见的原因)。要获得有关您尝试摆脱的类别的更多信息,还要获取该组内目标的方差或标准差,并获取这些类别的重要数值特征的均值和方差。如果您有多个类别,您还可以一次获取以多个类别为条件的特征和目标的预期值。这是在保持足够的高基数信息和保持低维度之间的一个很好的折衷。

这是一个示例,其中 c 是分类变量,n 是数字,y 是您的目标。我们想摆脱 c (因为 c 可能有 1000 个值)。

xc_1 | xn_1 | xn_2 | y
A    | 2    | 4    | 1
A    | 1    | 2    | 1
A    | 4    | 3    | 0
B    | 3    | 5    | 0
B    | 5    | 4    | 1
B    | 6    | 6    | 0

为了让事情更简单一点,我们将忽略当前行的值,无论如何这更好。对于第一行,我们将查看所有其他 A 行,取数字特征和 y 的平均值(可能还有其他统计数据),我们将对 B 做同样的事情,然后我们得到:

xc_1 | xn_1 | xn_2 | xnc_1 | xnc_2 | yc_1 | y
A    | 2    | 4    | 2.5   | 2.5   | 0.5  | 1
A    | 1    | 2    | 3     | 3.5   | 0.5  | 1
A    | 4    | 3    | 1.5   | 3     | 1    | 0 
B    | 3    | 5    | 5.5   | 5     | 0.5  | 0 
B    | 5    | 4    | 4.5   | 5.5   | 0    | 1  
B    | 6    | 6    | 4     | 4.5   | 0.5  | 0

我们已经捕获了很多关于类别 1 的信息,我们现在可以丢弃这些信息。