【发布时间】:2015-05-27 02:42:22
【问题描述】:
令 A 和 B 是两个大小相同的矩阵。对于矩阵 M,让 ht(M,t) 阈值 M 的所有条目 t。也就是说,所有绝对值小于 t 的条目都设置为 0。假设我想找到最优阈值 t,使得 norm(ht(A,t)-B,'fro')^2 最小化。
我能看到的唯一方法是有缺陷的:对 A 和阈值 A 的唯一值执行 for 循环并设置 C=ht(A,t)-B,计算 sum(sum(C.* C))。
当 A 很大时,这太慢了。我考虑过对 A 的元素进行排序并找到一些有效的方法来一次将一些条目设置为零,但我不确定这是否可以在没有 for 循环的情况下完成。
有办法吗?
这是一个非常简单的例子(在这种情况下,一个简单的 for 循环很容易工作):
B =
0.101508820368332 0
0 0.301996943246957
Set
A=B+.1*ones(2)
A =
0.201508820368332 0.1
0.1 0.401996943246957
简单的检查表明,如果我们将 A 的非对角线条目归零,我们会最小化 A 和 B 之间的差异。有 3 个可能的阈值,由 unique(A)=[.1,.2015,.402 ]。给定一个潜在的阈值 t,我们可以通过以下方式硬阈值 A:
function [A_thresholded] = ht(A,t)
%
A_thresholded = A .* (abs(A)>t);
【问题讨论】:
-
您能否提供示例输入数据并列出预期输出?
-
好的,请稍等。
-
不是检查每个唯一值,也许您可以使用二进制搜索来找到阈值。我不确定是否存在一种有效的方法来为一般情况找到最佳解决方案。
-
我不确定你的意思。由于 norm(ht(A,t)-B,'fro')^2 甚至不能保证有一个局部最小值,那会实现什么?
-
我的直觉是,除了尝试通过迭代搜索找到最佳点之外,没有简单的解决方案。我不确定要建议哪种算法,但我会研究非线性优化算法。发布指向您的数据的链接可能会让我们更好地了解可以尝试哪些技术。