本篇文章是博主在人工智能等领域学习时,用于个人学习、研究或者欣赏使用,并基于博主对人工智能等领域的一些理解而记录的学习摘录和笔记,若有不当和侵权之处,指出后将会立即改正,还望谅解。文章分类在AI学习笔记:
AI学习笔记(13)---《基于 K-L 变换的特征选择》
基于 K-L 变换的特征选择
目录
1.前言
理解并掌握离散 K-L 变换的原理以及过程思想,并实现一个进行离散 K-L 变换的函数。
实现余量法的 DKTL。
2.相关知识
2.1离散 K-L 变换(DKLT)
2.2DKTL 的性质
无论变换矩阵是 x
的相关矩阵 Rx
或协方差矩阵 Cx
的特征矢量矩阵的转置,它们都具有如下相同或类似的重要性质或结论,其中性质(1)和性质(2)是 DKLT 最基本的重要性质。
(1)变换后个分量正交或不相关;
(2)变换后个分量的非零平方期望或方差更趋于不平均;
(3)最佳逼近性,即使用相关阵或协方差矩阵的特征矢量矩阵前
m
列作为变换矩阵相比于其他变换矩阵拥有更好的逼近性;(4)使能量向某些分量相对集中;
(5)增强随机矢量总体的确定性。
基于前述的 DKLT 的诸多性质以及有关量的含义,如 λi
具有能量意义、方差意义等,可将 DKLT 用于特征提取与选择。需要说明的是: DKLT 现在还没有普遍适用的快速算法,也不想其他一些正交变换那样变换矩阵是确定的,它的变换矩阵依赖于具体信号的二阶统计特性,为要达到较好效果,在实际中需要大量的样本以便对二阶矩精确估计。
3.余量法 DKTL算法原理
上一关中提到 n
随机矢量 x
的估计式,如果保留 m
个 yi
,而余下的 (n−m)
个分量分别由预选的 (n−m)
个常数 bi
进行替代,此时估计式为
此种估计方法即是余量法。估计的均方误差为
上式表明,这时的 ti
为 x
的协方差矩阵 Cx
的对应于特征值 λi
的特征矢量。
余量法和截断法的比较
当我们用简单的“截断”方式产生估计式时,使均方误差最小的正交变换矩阵是随机矢量 x
的相关阵 Rx
的特征矢量矩阵的转置。当估计式除了选用 m
个分量之外,还用余下的各 yi
的均值 yiˉ
代替相应的分量 yi
时,使均方误差最小的正交变换矩阵是 x
的协方差矩阵 Cx
的特征矢量矩阵的转置。
无论哪种情况,为使 ϵ2(m)
最小化,都应该取前 m 个较大特征值对应的特征矢量构造 m×n
变换矩阵。
这表明对于相同的 m
,第一种方法比第二种方法的均方差大。
4.编程实现
4.1截断法 DKTL MATLAB代码
function [rm] = step1_mission(samples, m)
x_mean = mean(samples); % 计算样本矩阵每列的均值
R_x = samples' * samples; % 计算样本矩阵的协方差矩阵
[V, D] = eig(R_x); % 计算协方差矩阵的特征值和特征向量
[~, indices1] = sort(diag(D), 'descend'); % 将特征值按降序排列,并获取排序后的索引
selected_eigenvectors = V(:, indices1(1:m)); % 选取前 m 个最大的特征值对应的特征向量
rm = samples * selected_eigenvectors; % 将样本矩阵投影到选取的特征向量上,得到降维后的数据
end
4.2 余量法 DKTL MATLAB代码
function [rm] = step2_mission(samples, m)
x_mean = mean(samples); % 计算样本矩阵每列的均值
R_x = cov(samples); % 计算样本矩阵的协方差矩阵
[V, D] = eig(R_x); % 计算协方差矩阵的特征值和特征向量
[~, indices1] = sort(diag(D), 'descend'); % 将特征值按降序排列,并获取排序后的索引
selected_eigenvectors = V(:, indices1(1:m)); % 选取前 m 个最大的特征值对应的特征向量
rm = samples * selected_eigenvectors; % 将样本矩阵投影到选取的特征向量上,得到降维后的数据
end
4.3 测试输入
MATLAB终端输入下面指令
测试step1_mission(samples, m)
samples = [-7.82 -4.58 -3.97; -6.68 3.16 2.71; 4.36 -2.91 2.09; 6.72 0.88 2.80; -8.64 3.06 3.50; -6.87 0.57 -5.45; 4.47 -2.62 5.76; 6.73 -2.01 4.18; -7.71 2.34 -6.33; -6.91 -0.49 -5.68; 6.18 2.81 5.82; 6.72 -0.93 -4.04; -6.25 -0.26 0.56; -6.94 -1.22 1.13; 8.09 0.20 2.25; 6.81 0.17 -4.15; -5.19 4.24 4.04; -6.38 -1.74 1.43; 4.08 1.30 5.33; 6.27 0.93 -2.78];
disp('task1');
rm = step1_mission(samples(1:20,:),2)
disp('task2');
rm = step1_mission(samples(1:20,:),1)
disp('task3');
rm = step1_mission(samples(1:10,:),2)
disp('task4');
rm = step1_mission(samples(11:20,:),1)
测试step2_mission(samples, m)
samples = [-7.82 -4.58 -3.97; -6.68 3.16 2.71; 4.36 -2.91 2.09; 6.72 0.88 2.80; -8.64 3.06 3.50; -6.87 0.57 -5.45; 4.47 -2.62 5.76; 6.73 -2.01 4.18; -7.71 2.34 -6.33; -6.91 -0.49 -5.68; 6.18 2.81 5.82; 6.72 -0.93 -4.04; -6.25 -0.26 0.56; -6.94 -1.22 1.13; 8.09 0.20 2.25; 6.81 0.17 -4.15; -5.19 4.24 4.04; -6.38 -1.74 1.43; 4.08 1.30 5.33; 6.27 0.93 -2.78];
disp('task1');
rm = step2_mission(samples(1:20,:),2)
disp('task2');
rm = step2_mission(samples(1:20,:),1)
disp('task3');
rm = step2_mission(samples(1:10,:),2)
disp('task4');
rm = step2_mission(samples(11:20,:),1)
文章若有不当和不正确之处,还望理解与指出。由于部分文字、图片等来源于互联网,无法核实真实出处,如涉及相关争议,请联系博主删除。如有错误、疑问和侵权,欢迎评论留言联系作者,或者私信联系作者。