基于 K-L 变换的特征选择

       本篇文章是博主在人工智能等领域学习时,用于个人学习、研究或者欣赏使用,并基于博主对人工智能等领域的一些理解而记录的学习摘录和笔记,若有不当和侵权之处,指出后将会立即改正,还望谅解。文章分类在AI学习笔记

      AI学习笔记(13)---《基于 K-L 变换的特征选择

基于 K-L 变换的特征选择

目录

1.前言

2.相关知识

2.1离散 K-L 变换(DKLT)

2.2DKTL 的性质

3.余量法 DKTL算法原理

4.编程实现

4.1截断法 DKTL MATLAB代码

4.2 余量法 DKTL MATLAB代码

4.3 测试输入


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 的估计式,如果保留 myi​,而余下的 (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)

     文章若有不当和不正确之处,还望理解与指出。由于部分文字、图片等来源于互联网,无法核实真实出处,如涉及相关争议,请联系博主删除。如有错误、疑问和侵权,欢迎评论留言联系作者,或者私信联系作者。

评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不去幼儿园

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值