按行归一化:
1 2 3 4 5 6 7 |
|
按列归一化。
1 2 3 4 5 |
|
然而,上述代码最能实现功能,但并不是最优的,它只是一种对该过程的最佳理解代码。在Matlab中,for循环是一件非常费时间的结构,因此我们在代码中应该尽量少用for循环。由此,我们可以用repmat命令得到另一种更加简洁更加快速的代码,只是这种代码对于初学者理解起来比较费劲。可以看做是自己水平的一种进阶吧。
1 2 3 4 |
|
参考:https://www.cnblogs.com/hxsyl/p/4591008.html
我于是就想着为什么要做这么多的归一化,首先我们要知道归一化是什么:
之前一直不清楚,为什么要做这么多的归一化,直到想到了对称矩阵(请原谅数学不好的我,在理解的路上磕磕绊绊)。
矩阵的列归一化,就是将矩阵每一列的值,除以每一列所有元素平方和的绝对值,这样做的结果就是,矩阵每一列元素的平方和为1了。
假设通过上述归一化处理的样本集合为X,x的没一列的平方和都是1,假设X是25*1000的一个矩阵好了,那么X‘为一个1000*25的矩阵,Yang等人的方法里用到了
A=X’*X。那么通过上面的那些变化,X的每列元素的平方和都是1,那么A的对角线元素都是1,且A是关于对角线对称的。那么A就是一个对角线元素全为1的对称矩阵,而实对称矩阵具有如下的性质:
举个代码例子:
A=[1,2,3,4;5,6,7,8;9,10,11,12];
A = A./repmat(sqrt(sum(A.^2,1)),size(A,1),1);
X=A';
fia=X*A