赞
踩
论文地址:Early Stabilizing Feature Importance for TensorFlow Deep Neural Networks
博客里只给出一下论文中介绍的方法这一章节,论文中前面介绍了神经网络中特征重要性评估方法的背景与发展,感兴趣的可以去阅读原论文。
本研究提出了对于深度神经网络混合的特征排序算法,优势在于可以得到快速收敛稳定的特征重要性排序。本研究开发了基于TensorFlow的特征重要性排序工具,包括以下几种算法:输入扰动特征的重要性、相关系数特征重要性,权重特征重要性分析,新的混合算法。
对数据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
将输入数据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)
利用网络第一层的神经元权重来估计特征重要性分数。(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
计算输入扰动特征重要性分数,计算其方差,然后结合其他的两种算法计算特征重要性分数。(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提出的重要性评估方法。也许是该方法的适用范围比较有限,也不能片面地否决其作用。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。