西瓜书学习笔记——核化线性降维(公式推导+举例应用)

文章目录

      • 算法介绍
      • 实验分析

算法介绍

核化线性降维是一种使用核方法(Kernel Methods)来进行降维的技术。在传统的线性降维方法中,例如主成分分析(PCA)和线性判别分析(LDA),数据被映射到一个低维线性子空间中。而核化线性降维则通过使用核技巧,将数据映射到一个非线性的低维空间中。

核技巧的核心思想是通过一个非线性映射将原始数据转换到一个高维的特征空间,然后在该特征空间中应用线性降维方法。这种映射可以使用核函数来实现,例如径向基函数核(RBF核)或多项式核。

下面我们以核主成分分析(KPCA)为例子:

假定我们将高维特征空间中把数据投影到由 W \mathbf{W} W确定的超平面上,即PCA欲求解:

( ∑ i = 1 m z i z i T ) W = λ W (1) \bigg(\sum_{i=1}^mz_iz_i^T\bigg)\mathbf{W}=\lambda\mathbf{W}\tag{1} (i=1mziziT)W=λW(1)

其中 z i z_i zi是样本点 x i x_i xi在高维特征空间中的像,可知:

W = 1 λ ( ∑ i = 1 m z i z i T ) W = ∑ i = 1 m z i z i T W λ = ∑ i = 1 m z i α i (2) \begin{aligned} \mathbf{W}&=\frac{1}{\lambda}\bigg(\sum_{i=1}^mz_iz_i^T\bigg)\mathbf{W}=\sum_{i=1}^mz_i\frac{z_i^T\mathbf{W}}{\lambda}\\ &=\sum_{i=1}^mz_i\alpha_i \end{aligned} \tag{2} W=λ1(i=1mziziT)W=i=1mziλziTW=i=1mziαi(2)

其中 α i = 1 λ z i T W \alpha_i=\frac{1}{\lambda}z_i^T\mathbf{W} αi=λ1ziTW(权重)。假设 z i z_i zi是通过原始空间中的样本点 x i x_i xi通过映射 ϕ \phi ϕ产生,即 z i = ϕ ( x i ) , i = 1 , 2 , . . . , m z_i=\phi(x_i),i=1,2,...,m zi=ϕ(xi),i=1,2,...,m。若能被 ϕ \phi ϕ显式的表达出来,通过它将样本映射到高维特征空间,再从高维特征空间中使用PCA,可将式(1)变化为:

( ∑ i = 1 m ϕ ( x i ) ϕ ( x i ) T ) W = λ W (3) \bigg(\sum_{i=1}^m\phi(x_i)\phi(x_i)^T\bigg)\mathbf{W}=\lambda\mathbf{W}\tag{3} (i=1mϕ(xi)ϕ(xi)T)W=λW(3)

式(2)变化为:

W = ∑ i = 1 m ϕ ( x i ) α i (4) \mathbf{W}=\sum_{i=1}^m\phi(x_i)\alpha_i\tag{4} W=i=1mϕ(xi)αi(4)

一般情况下我们不知道 ϕ \phi ϕ的 形式,故引入核函数:

κ ( x i , x j ) = ϕ ( x i ) T ϕ ( x j ) (5) \kappa(x_i,x_j)=\phi(x_i)^T\phi(x_j)\tag{5} κ(xi,xj)=ϕ(xi)Tϕ(xj)(5)

将式(4)和式(5)带入式(3)中有:

已知 z i = ϕ ( x i ) z_i=\phi(x_i) zi=ϕ(xi),类比 X = { x 1 , x 2 , . . . , x m } \mathbf{X}=\{x_1,x_2,...,x_m\} X={x1,x2,...,xm},可以构造出 Z = { z 1 , z 2 , . . . , z m } \mathbf{Z}=\{z_1,z_2,...,z_m\} Z={z1,z2,...,zm}
( ∑ i = 1 m ϕ ( x i ) ϕ ( x i ) T ) w j = λ j w j ( ∑ i = 1 m z i z i T ) w j = λ j w j Z Z T w j = λ j w j Z Z T ∑ i = 1 m ϕ ( x i ) α i j = λ j ∑ i = 1 m ϕ ( x i ) α i j Z Z T ∑ i = 1 m z i α i j = λ j ∑ i = 1 m z i α i j Z Z T Z α j = λ j Z α j Z Z T Z α j = Z λ j α j Z T Z α j = λ j α j (6) \begin{aligned} \bigg(\sum_{i=1}^m\phi(x_i)\phi(x_i)^T\bigg)w_j&=\lambda_jw_j\\ \bigg(\sum_{i=1}^mz_iz_i^T\bigg)w_j&=\lambda_jw_j\\ \mathbf{ZZ^T}w_j&=\lambda_jw_j\\ \mathbf{ZZ^T}\sum_{i=1}^m\phi(x_i)\alpha_i^j&=\lambda_j\sum_{i=1}^m\phi(x_i)\alpha_i^j\\ \mathbf{ZZ^T}\sum_{i=1}^mz_i\alpha_i^j&=\lambda_j\sum_{i=1}^mz_i\alpha_i^j\\ \mathbf{ZZ^TZ}\alpha^j&=\lambda_j\mathbf{Z}\alpha^j\\ \mathbf{ZZ^TZ}\alpha^j&=\mathbf{Z}\lambda_j\alpha^j\\ \mathbf{Z^TZ}\alpha^j&=\lambda_j\alpha^j\\ \end{aligned} \tag{6} (i=1mϕ(xi)ϕ(xi)T)wj(i=1mziziT)wjZZTwjZZTi=1mϕ(xi)αijZZTi=1mziαijZZTZαjZZTZαjZTZαj=λjwj=λjwj=λjwj=λji=1mϕ(xi)αij=λji=1mziαij=λjZαj=Zλjαj=λjαj(6)
其中 α j = ( α 1 j ; α 2 j ; … ; α m j ) ∈ R m × 1 \boldsymbol{\alpha}^j=\left(\alpha_1^j ; \alpha_2^j ; \ldots ; \alpha_m^j\right) \in \mathbb{R}^{m \times 1} αj=(α1j;α2j;;αmj)Rm×1

Z Z T = K \mathbf{ZZ^T=K} ZZT=K,那么上式可化为:

K α j = λ j α j (7) \mathbf{K}\alpha^j=\lambda_j\alpha^j\tag{7} Kαj=λjαj(7)

其中矩阵 K \mathbf{K} K的第 i i i行第 j j j列的元素 K i j = z i T z j = ϕ ( x i ) T ϕ ( x j ) = κ ( x i , x j ) \mathbf{K}_{ij}=z_i^Tz_j=\phi(x_i)^T\phi(x_j)=\kappa(x_i,x_j) Kij=ziTzj=ϕ(xi)Tϕ(xj)=κ(xi,xj)

显然式(7)是一个特征值分解问题,取 K \mathbf{K} K最大的 d ′ d^\prime d个特征值所对应的特征向量即可。

对新样本 x = ( x 1 , x 2 , . . . , x m ) x=(x_1,x_2,...,x_m) x=(x1,x2,...,xm)(向量),其向高维特征空间的投影后的第 j ( j = 1 , 2 , . . . , d ′ ) j(j=1,2,...,d^\prime) j(j=1,2,...,d)维坐标是:

z j = w j T ϕ ( x ) = ∑ i = 1 m α i j ϕ ( x i ) T ϕ ( x ) = ∑ i = 1 m α i j κ ( x i , x ) (8) \begin{aligned} z^j&=w_j^T\phi(x)\\ &=\sum_{i=1}^m\alpha_i^j\phi(x_i)^T\phi(x)\\ &=\sum_{i=1}^m\alpha_i^j\kappa(x_i,x) \end{aligned} \tag{8} zj=wjTϕ(x)=i=1mαijϕ(xi)Tϕ(x)=i=1mαijκ(xi,x)(8)

算法过程与PCA算法类似。

实验分析

数据集如下图所示:
在这里插入图片描述
读入数据集:

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt# 读取数据集
data = pd.read_csv('data/correlated_dataset.csv')# 提取特征和目标
X = data.drop('Target', axis=1).values
y = data['Target'].values

定义核函数:

# 核函数(径向基函数)
def rbf_kernel(x, y, gamma=1.0):return np.exp(-gamma * np.linalg.norm(x - y)**2)

计算以及中心化核矩阵:

# 计算核矩阵
def compute_kernel_matrix(X, gamma=1.0):n_samples = X.shape[0]K = np.zeros((n_samples, n_samples))for i in range(n_samples):for j in range(n_samples):K[i, j] = rbf_kernel(X[i], X[j], gamma)return K# 中心化核矩阵
def center_kernel_matrix(K):n_samples = K.shape[0]one_n = np.ones((n_samples, n_samples)) / n_samplesK_centered = K - one_n.dot(K) - K.dot(one_n) + one_n.dot(K).dot(one_n)return K_centered

计算特征值与特征向量:

# 计算特征值和特征向量
def compute_eigenvectors(K_centered, n_components):eigvals, eigvecs = np.linalg.eigh(K_centered)# 选择前n_components个最大特征值对应的特征向量idx = np.argsort(eigvals)[::-1][:n_components]return eigvecs[:, idx]

执行KPCA并绘制降维可视化结果:

# 数据中心化
X_centered = X - np.mean(X, axis=0)# 计算核矩阵
K = compute_kernel_matrix(X_centered)# 中心化核矩阵
K_centered = center_kernel_matrix(K)# 选择降维后的维度
n_components = 6# 计算特征向量
eigenvectors = compute_eigenvectors(K_centered, n_components)# 降维
X_pca = K_centered.dot(eigenvectors)# 可视化降维结果
plt.scatter(X_pca[:, 0], X_pca[:, 1], c=y, cmap='viridis')
plt.title('Kernelized PCA - 2D Projection')
plt.xlabel('Principal Component 1')
plt.ylabel('Principal Component 2')
plt.show()

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/450307.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【备战蓝桥杯】——循环结构终篇

🌈个人主页: Aileen_0v0 🔥热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法 ​💫个人格言:“没有罗马,那就自己创造罗马~” #mermaid-svg-yl4Tqejg4LkjZLAM {font-family:"trebuchet ms",verdana,arial,sans-serif;font-siz…

云尘 -- 铁三域控

描述: flag1 直接fscan开扫 发现存活两台机子123和141,其中141这台机子扫出来有ms17-010漏洞 继续信息收集,用nmap扫一波全端口,看看有没有遗漏 141这台机子一开始没扫到,看着提示使用-Pn再扫一遍就行了。因为如果当…

如何回答消息确认不丢失

1、如何知道有消息丢失? 2、哪些环节可能d 3、如何确保消息不丢失 二、消息丢失的环节 三,防止消息丢失的阶段操作 消息生产阶段 消息存储阶段 消息消费阶段 如何解决消息积压的问题 从消费端解决问题:

Leetcode—203. 移除链表元素【简单】

2024每日刷题(一零九) Leetcode—203. 移除链表元素 实现代码 /*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode() : val(0), next(nullptr) {}* ListNode(int x) : val(x), next(n…

BUUCTF-Real-[struts2]s2-013

struts2的标签中 <s:a> 和 <s:url> 都有一个 includeParams 属性&#xff0c;可以设置成如下值none - URL中不包含任何参数&#xff08;默认&#xff09; get - 仅包含URL中的GET参数 all - 在URL中包含GET和POST参数 当includeParamsall的时候&#xff0c;会将本次…

力扣刷题之旅:启程篇(二)

力扣&#xff08;LeetCode&#xff09;是一个在线编程平台&#xff0c;主要用于帮助程序员提升算法和数据结构方面的能力。以下是一些力扣上的入门题目&#xff0c;以及它们的解题代码。 --点击进入刷题地址 1.最后得到的余数 题目描述&#xff1a; 给定两个非空字符串 nu…

六大免费的Redis内存分析工具

在我们需要分析Redis实例的内存使用情况时&#xff0c;市场上有着许多免费的开源工具&#xff0c;同时也有少量的付费产品。如果您想更深层次地分析内存相关问题的话&#xff0c;就可能需要用到一些更具针对性的“独门”工具了。 【51CTO.com快译】在我们需要分析Redis实例的内…

内网信息收集-Windows篇

目录 内网信息收集 机器角色分析 本机的信息收集 密码信息 如何查找内网的网段 进程、端口、补丁、共享文件夹 总结 域环境信息收集 MSF信息收集 内网信息收集 机器角色分析 1、判断当前主机是什么服务器&#xff1f; web服务器、开发测试服务器、公共服务器、文件服…

机器学习——集成学习

&#x1f4d5;参考&#xff1a;ysu老师课件西瓜书 期末复习笔记 1.集成学习的基本概念 集成学习&#xff08;ensemble learing&#xff09;通过构建并结合多个学习器来完成学习任务。 有时也被称为多分类器系统&#xff08;multi-classifier system&#xff09;、基于委员会的…

2024年【道路运输企业主要负责人】考试及道路运输企业主要负责人考试题库

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 道路运输企业主要负责人考试参考答案及道路运输企业主要负责人考试试题解析是安全生产模拟考试一点通题库老师及道路运输企业主要负责人操作证已考过的学员汇总&#xff0c;相对有效帮助道路运输企业主要负责人考试题…

网络异常案例四_IP异常

问题现象 终端设备离线&#xff0c;现场根据设备ip&#xff0c;ping不通。查看路由器。 同一个路由器显示的终端设备&#xff08;走同一个wifi模块接入&#xff09;&#xff0c;包含不同网段的ip。 现场是基于三层的无线漫游&#xff0c;多个路由器wifi配置了相同的ssid信息&a…

五、图像像素算术操作

算术操作无非就是像数值之间的加减乘除操作 一、创建图像像素算术操作——头文件 在项目的头文件中&#xff0c;右击添加&#xff0c;新建项 创建用于图像像素算术操作的头文件&#xff0c;我这边是operater.h 该头文件声明了一个Operater类(class Operater)&#xff0c;该…