K-L 变换
在机器学习学习中若存在维度过高的向量,则不利于分析向量的样本的方差与均值
原理分析
K-L变换的本质是寻找一个算子,通过,其中为降维后的结果。
存在一个样本集,其中为维向量,为了使降低维度
设存在一个线性变换,使得$ y_i=U x_iy_ik$维向量,
为了使各个特征最大的限度分开,我们应该从中个特征中选择个最大限度可分不重叠的特征。其中各个线性可分的特征应该是不相关的,即他们的相关系数为0。可推出它的协方差为0。
相关系数:
协方差矩阵:
**目标:**将一组 维向量降为 维,其目标是选择 个单位正交基,使得原始数据变换到这组基上后,各变量两两间协方差为 0,而变量方差则尽可能大。
因为的特征要尽可能的无关,则
由此的相关系数矩阵为一个对角矩阵
其中为实对称矩阵,它一定存在个特征向量,且相互可以正交。
令,则一定满足,与分别为特征向量与特征值,取前大的特征值对于的特征向量,并进行归一化,记为
即通过K-L变换,实际上是找到了一个新的坐标系,在这个坐标系中,数据的协方差矩阵是对角的,而且对角线上的元素是原始数据协方差矩阵的特征值,这些特征值对应的特征向量则构成了新坐标系的基向量。
步骤
- 计算 的协方差矩阵,并记为
- 计算的特征值与特征向量
- 取前大的特征值对于的特征向量,并进行归一化,记为
- 利用进行降维度处理
示例
有样本集,,请用K-L变换将特征降至2维和1维,并画出在该空间中的位置
1、计算样本均值
的均值
的均值
总体样本的均值
2、去中心化
令
计算特征值与特征向量
选取
其余同理可得。
import numpy as np
# 样本数据
w1 = np.array([[0, 0, 0], [1, 0, 0], [1, 0, 1], [1, 1, 0]])
w2 = np.array([[0, 0, 1], [0, 1, 0], [0, 1, 1], [1, 1, 1]])
u = (w1.mean(axis=0) + w2.mean(axis=0)) / 2
x1 = w1 - u
x2 = w2 - u
x = np.zeros((3, 3))
for i in x1:
i = i.reshape(3, -1)
x = x + i @ i.T
for i in x2:
i = i.reshape(3, -1)
x = x + i @ i.T
x = x / 8
lambda_value, vector = np.linalg.eigh(x)
U2d = vector[:2]
U1d = vector[0]
x2d_1 = (U2d @ x1.T).T
x2d_2 = (U2d @ x2.T).T
x1d_1 = (U1d @ x1.T).T
x1d_2 = (U1d @ x2.T).T