K-L 变换
在机器学习学习中若存在维度过高的向量,则不利于分析向量的样本的方差与均值
原理分析
K-L变换的本质是寻找一个算子,通过
,其中
为
降维后的结果。
存在一个样本集,其中
为
维向量,为了使
降低维度
设存在一个线性变换,使得$ y_i=U x_i
y_i
k$维向量,
为了使各个特征最大的限度分开,我们应该从中
个特征中选择
个最大限度可分不重叠的特征。其中各个线性可分的特征应该是不相关的,即他们的相关系数为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