python - 使用互信息进行特征映射之间的特征选择(python)
问题描述
我想在来自神经网络的卷积层的 512 个特征图(每个 3X3)之间进行特征选择。我想计算每两个向量之间的 512X512 互信息矩阵,并选择 256 个具有最低互信息值的特征图(不包括全为零的行/列)。
为简单起见,假设我有以下张量(你不需要 pytorch,你可以使用 numpy):
t2 = torch.Tensor([0.25, 2.1.5. 3.2, 3.1, 2.5])
t3 = torch.Tensor([0.14, 0.9, 6.2 ,3.1 ,1.7])
v2 = t2.data.numpy()
v3 = t3.data.numpy()
我使用找到的代码来计算两个向量之间的互信息(我只是将 xrange 更改为范围): Python 的互信息实现
mi_compmi = computeMI(v2,v3)
print('Result: ', mi_compmi)
事情是,对于我在 v2 和 v3 中分配的所有向量,我总是得到相同的 px、py、pxy 值和 2.32 的相同结果,这是为什么呢?即使我计算了向量与其自身之间的 MI,我也得到了这一点,而它应该是 0。
解决方案
您应该使用sklearn
's mutual_info_score
,请参见此处。似乎工作正常,应该可以解决您的问题。
顺便提一句。您应该尝试使用库中编写的经过良好测试的功能,而不是依赖随机实现,除非您被迫这样做。
推荐阅读
- php - 如何从php中的函数获取静态变量的值?
- json - 从 JSON 对象 SQL Server 2019 中删除数组元素
- visual-studio - Access 数据库中未显示更改
- c# - HTTP 错误 404.0 - 未找到 - MVC 映射路由
- c++ - 实时 GPU 路径跟踪,使用 OIDN 去噪(Intel Open Image Denoise)
- sqlite - Sqlite 合并两个相同模式的数据库,不包括重复项
- http - 404 函数未找到 vs 404 数据未找到
- php - 任何人都知道如何在php中使用数组复选框元素进行表单输入?
- c - 为什么我没有输出?
- vue.js - Vue:src 挂载钩子中的错误:“TypeError:无法读取未定义的属性'0'”