这篇文章的标题可能有点令人困惑。请允许我提供一些背景信息,然后详细说明我的问题。作为参考,我问的问题是在结尾处,并用粗体字母表示。我提前提供了一些代码,概述了我目前在解决问题的方法。
基本上我尝试做的是内核回归,通常使用单个测试点x
和一组训练实例来完成。可以在维基百科here上找到对此的引用。我使用的内核是RBF内核,可以找到维基百科的参考资料here。
无论如何,我有一些用Matlab编写的代码,这样就可以快速完成x
的单个1 x p
实例。我想做的就是这样做,这样我可以很快估计出很多点,比如说m x p
。
为了避免符号混淆,我会将训练实例表示为Train
,将我想要的实例估计为Test
:和{{0 }}。还需要提到的是,我想估计每个m
点的数字向量。对于单个点,此向量的大小为1 x v
。现在我需要m x v
。因此,Train
还会有一个与之关联的知识值的向量TS
:。最后,我们需要一个大小为1 x v
的sigma向量。这表示为Sig
。
这是我到目前为止的代码:
%First, we have to get the matrices to equivalent size so we can subtract Train from Test
tm0 = kron(ones(size(Train,1),1),Test) - kron(ones(size(Test,1),1),Train);
%Secondly, we apply the Euclidean norm sq by row and then multiply each of these results by each element (j) in Sig times 1/2j^2
tm3 = exp(-kron(sum((tm0).^2,2),1/2./(Sig.^2)));
现在,此时tm3
是(m*n) x v
矩阵。 这就是我的问题所在:我现在需要将TS'
(TS转置)乘以n x v
中每个tm3
大小的细分受众群(有{{ {1}}这些段中的{1}},获取每个结果段的对角线元素(在乘法之后m
段中的一个将是m
,因此每个对角元素块将为{{1意味着得到的矩阵是v x v
)并将这些对角元素加在一起以产生1 x v
大小的矩阵。最后,我需要将此m x v
矩阵中的每个条目m x 1
除以对角线i
的{{1}}行中的每个m x 1
元素大小的矩阵,产生v
大小的结果矩阵。
我希望所有这一切都有道理。我确定可以使用某种技巧,但我还没想出来。非常感谢任何帮助。
编辑1:我被要求提供更多示例来帮助演示我想要做的事情。以下代表我正在谈论的两个矩阵,ith
和m x v
:
如您所见,m x v
(TS
转置)为tm3
,TS'
为TS
。在tm3中,有一些大小为v x n
的块 - 这个大小的tm3
块。请注意,mn x v
的大小为n x v
。这意味着我可以将m
乘以TS'
的单个块,其大小为v x n
。这将导致矩阵的大小为TS'
。我想执行此操作 - 单独将tm3
乘以n x v
大小的v x v
块,将生成TS'
n x v
个矩阵。
但是,从这里开始,我想从这些tm3
矩阵中获取对角线元素。因此,对于单个m
矩阵,使用v x v
表示:
最终,我会为每个v x v
v x v
矩阵执行此操作,为我提供如下所示的内容,其中s是a
m
矩阵:
如果我将这最后一个矩阵表示为v x v
,其大小为mth
,则将行中的元素相加以生成我正在寻找的v x v
向量是微不足道的。我将此向量称为Q
。但是,我希望将每个m x v
标量值除以矩阵m x 1
的相应行,以生成另一个C
矩阵:
这是我正在寻找的最终矩阵。希望这有助于说清楚我在寻找什么。感谢您抽出宝贵时间阅读本文!
思考:我非常确定我可以通过执行m
将Q
转换为m x v
矩阵来完成此操作,然后将其复制另一个tm3
矩阵cell
中tc1 = mat2cell(tm3,repmat(length(Train),1,m),length(Sig))
TS
次。最后,我可以执行m
之类的操作,这会给我cell
个单元格填充我正在寻找的tc2 = mat2cell(TS',length(indirectSigma),repmat(length(Train),1,m))'
矩阵。我可以从那里开始。但是,我不确定这些tc3 = cellfun(@(a,b) a*b, tc2,tc1,'UniformOutput',false)
操作的速度有多快。有谁评论?我担心它们可能会很慢,所以我更倾向于在普通矩阵上执行操作,我知道它很快。谢谢!