感知器学习 - 最重要的特征

时间:2014-02-12 19:55:50

标签: java machine-learning artificial-intelligence perceptron

对于我在AI课程中的一项任务,我们的任务是创建Widrow Hoff delta规则的感知器学习实现。我在java中编写了这个实现:

以下github链接包含该项目: https://github.com/dmcquillan314/CS440-Homework/tree/master/CS440-HW2-1

我遇到的问题不在于感知器的创造。这很好。

在训练后的项目中,感知器然后将未分类的数据集应用于感知器,然后学习每个输入向量的分类。这也很好。

我的问题涉及学习输入的哪个特征是最重要的。

例如,如果每个输入向量中的特征集是颜色,汽车模型和汽车制造,我们想要分类哪个特征是最重要的。怎么会这样做。

我对此的原始理解使我相信计算相关系数是每个输入的特征值和产生的分类矢量。然而,事实证明这是一个错误的假设。

还有其他方法可以学习最重要的功能吗?

修改

样本权重向量:

( - 752,4771,17714,762,6,676,3060,-2004,5459,9591.299,3832,14963,20912)

示例输入向量:

(55,1,2,130,262,0,0,155,0,0,1,0,3,0)

(59,1,3,126,218,1,0,134,0,2.2,2,1,6,1)

(45,1,2,128,308,0,2,170,0,0,1,0,3,0)

(59,1,4,110,239,0,2,142,1,1.2,2,1,7,1)

最后一个要素是分类。

当我找到答案时,我会在这里发布答案。到目前为止,我认为教师给出的答案是不准确的。

3 个答案:

答案 0 :(得分:3)

通过计算学习模型对功能 f 的依赖程度来捕获功能的重要性。

感知器是一个简单的前馈神经网络,对于神经网络(它是一个实值非线性函数),依赖性对应于输出函数相对于 f 的偏导数。

特征的相对重要性与其在训练的感知器上的平均绝对重量成比例。对于神经网络而言,这并非总是如此。例如,对于多层感知器而言,这不一定适用。

有关详细信息(在此输入确切的公式将是一个符号混乱),请查看sections 2 and 3 of this paper。我相信等式(8)(第3节)就是你要找的东西。

在那里,分数是多个学习者的总和。如果你的是单层感知器,学习的函数是单个权重向量

w =( w1 w2 ,... wn

然后,我在开头提到的平均绝对重量就是绝对权重| wi | i -th功能。对于功能的重要性来说,这似乎太简单了,对吧?但是......如果你考虑一下,n维输入 x 会转换为 w x (矢量点积)。也就是说, i -th weight wi 完全控制输入沿向量空间的一个维度变化的程度。

顺便说一下,在大多数(如果不是全部)分类器中,特征权重本身就是其重要性的度量。只是对于大多数其他分类器,权重以更复杂的方式计算。

答案 1 :(得分:1)

这比我原先想象的要简单得多。答案/流程如下:

给定一组输入向量,如下所示:

[1,0,1,0],[0,1,0,1]

数据已经被约束在0和1之间,以最小化方差。但是,就我的数据而言,我有更多类似的内容:

[0,145,0,132],[0,176,0,140]

这会导致某些输入要素的方差更大,因此您无法使用权​​重向量作为要素重要性的指标。因此,为了使权重向量成为重要性的指标,我们首先通过除以特征最大值来对数据进行标准化。

对于上述设置,将是:[0,176,0,140]

这将产生一组统一的特征向量,并且还会导致权重向量成为特征重要性的指标。

答案 2 :(得分:0)

由于感知器学习(尤其是多层感知器网络)是一种黑盒算法,其权重和激活部分或多或少地受到某些或全部特征的影响,因此我们尚无工具直接提取特征重要性基于树的模型很容易做到这一点。但是,我们可以使用此处介绍的PERMUTATION IMPORTANCE方法:https://towardsdatascience.com/feature-importance-with-neural-network-346eb6205743