TensorFlow深度神经网络提前稳定特征重要性

论文地址:Early Stabilizing Feature Importance for TensorFlow Deep Neural Networks

博客里只给出一下论文中介绍的方法这一章节,论文中前面介绍了神经网络中特征重要性评估方法的背景与发展,感兴趣的可以去阅读原论文。

3. APPROACH

本研究提出了对于深度神经网络混合的特征排序算法,优势在于可以得到快速收敛稳定的特征重要性排序。本研究开发了基于TensorFlow的特征重要性排序工具,包括以下几种算法:输入扰动特征的重要性、相关系数特征重要性,权重特征重要性分析,新的混合算法。

3.1 输入扰动特征的重要性

对数据X的每一个特征,进行打乱,然后对新的X输入网络得到预测值,计算损失函数,作为该特征的重要性分数。

function rank_perturb(x, y, network):
    impt = dim(x.shape[1])
    for i in range(numcols(x)):
        hold = copy(x[, i])
        shuffle(x[, i])
        pred = network.predict(x)
        mse = mean_squared_error(y, pred)
        impt[i] = mse
        x[:, i] = hold
    impt = impt / sum(impt)
return impt 

3.2 相关系数特征重要性

将输入数据X中每一个特征与目标变量y的相关性系数作为这个特征对应的重要性分数,并没有利用到神经网络的特性。

function rank_stat(self, x, y):
   impt = []
   for i in range( numcols(x) ):
       c = corrcoef(x[: , i], y[: , 0])
       impt[i] = c
   impt = impt / sum(impt)
   return (impt) 

3.3 权重特征重要性分析

利用网络第一层的神经元权重来估计特征重要性分数。(Garson)

function rank_weight(x, y, network):
   weights = network.get_tensor_value('dnn/layer0/Linear/Matrix:0')
   weights = weights ^ 2
   weights = sum(weights, axis=1)
   weights = sqrt(weights)
   weights = weights / sum(weights)
   return weights

3.4 新的混合算法

计算输入扰动特征重要性分数,计算其方差,然后结合其他的两种算法计算特征重要性分数。(This algorithm has the advantage of quickly converging to a stable ranking of feature importance)

function rank_hybrid(x, y, network):
   p_rank = rank_perturb(x, y, network)
   w_rank = rank_weight(network)
   s_rank = rank_stat(x, y)
   d = (np.std(p_rank / sum(p_rank)))
   impt = w_rank + (p_rank * d) + (s_rank * (1.0 - d))
   impt = impt / sum(impt)

个人看法

论文中提出的方法,感觉创新性不够大,主要是混合了其余几种已经提出的方法来进行特征重要性评估。

由于最近正在做的项目的关系,尝试了论文中的方法进行特征重要性评估,采用的模拟数据进行测试(提前已知特征重要性,生成模拟数据),效果非常差,效果不如Olden提出的重要性评估方法。也许是该方法的适用范围比较有限,也不能片面地否决其作用。

猜你喜欢

转载自blog.csdn.net/u014686462/article/details/79098489
今日推荐