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

news2024/12/23 10:06:47

文章目录

      • 算法介绍
      • 实验分析

算法介绍

核化线性降维是一种使用核方法(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_samples
    K_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.coloradmin.cn/o/1431931.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

React实例之完善布局菜单(三)

接着上篇的内容继续。规划界面布局。界面分为三个部分,左边为菜单部分,右边上部有个 80 px 高度左右的功能区,下面是主内容区。 依据这个设计,我们进行下面的步骤: 在 SMenu项目中创建一个目录: SLayout, …

解放网工双手-SNMP如何做好运维辅助?

1. SNMP为什么被誉为“网管神器”? 2. SNMP不同版本有何区别? 3. SNMP有哪些问题及Telemetry有何优势? ---- SNMP ----- 简单网络管理协议 U2000:传输设备管理 企业,银行 esight:华为 iMaster NCE-Camp…

【webpack】技巧使用

webpack和TypeScript 安装webpack相关内容安装TS相关内容配置初始化数据初始化运行展示和目录展示报错解决(缺失文件配置) 安装前端必备神奇lodash测试一下entry配置index.html模板配置修改打包出来的index.html的titleinject注入chunks 属性多页面配置 …

从 20 多套 MySQL 到 1 套 TiDB丨骏伯网络综合运营管理平台应用实践

原文来源: https://tidb.net/blog/a38c72a4 本文作者:骏伯网络 唐帆,PingCAP 贺美存 骏伯网络简介 广州骏伯网络是一家以数据驱动的科技公司,聚焦移动互联网营销服务,坚持以客户为中心,深耕 APP、运营…

大数据学习之Redis,十大数据类型的具体应用(四)

3.8 Redis基数统计(HyperLogLog) 需求 统计某个网站的UV、统计某个文章的UV 什么是UV unique Visitor ,独立访客,一般理解为客户端IP 大规模的防止作弊,需要去重复统计独立访客 比如IP同样就认为是同一个客户 需要去…

sqli.labs靶场(29到40关)

29、第二十九关 id1 id1 尝试发现是单引号闭合, -1 union select 1,2,3-- -1 union select 1,2,database()-- -1 union select 1,2,(select group_concat(table_name) from information_schema.tables where table_schemasecurity)-- -1 union select 1,2,(select…

国内最全的Spring Boot系列之七

• 阿里巴巴前高级研发工程师 • 三家千万级互联网企业技术顾问 • MBTI/盖洛普技术专家 • 厦门某高校外聘教师 • 51CTO特约合作讲师 • 网易云课堂签约讲师 •《深入理解设计模式》作者 一转眼马上要过年了,回首2023年,感觉自己无所事事、碌碌无…

python爬虫5

1.selenium交互 无页面浏览器速度更快 #配置好的自己不用管 from selenium import webdriverfrom selenium.webdriver.chrome.options import Optionschrome_options Options()chrome_options.add_argument(‐‐headless)chrome_options.add_argument(‐‐disable‐gpu)# path…

编程效率的跃升之路

编程是一门需要大量的时间和精力投入的技能,提高编程效率则是一个需要不断学习和实践的过程。结合笔者写bug多年的经验,一些学习建议和资源和大家share下。 一、编程如何提效: 熟悉开发工具:掌握常用的开发工具,如集…

flutter抓包绕过

lutter的证书校验 起因: 最近工作上让做个app的复测,把apk发我后,开始尝试挂代理抓包,结果发现抓不到 为是证书没弄好,想着前几天不是刚导入了吗(雾)。又重新导入了下还是不行。然后各种lsp模…

OJ_找位置

题干 代码 #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<vector> #include<algorithm> #include<map> using namespace std;int main() {char str[200] { 0 };scanf("%s", str);map<char, vector<int>> times…

ROS入门之通信机制及常用API

文章目录 前言一、话题通信1.话题通信理论2.话题通信常用API&#x1f357;发布者advertisepublish &#x1f356;订阅者subscribe 3.自定义msg 二、服务通信1.服务通信理论2.服务通信常用API&#x1f386;服务端advertiseService &#x1f387;客户端serviceClientros::service…

[大厂实践] Pinterest通用计算平台实践

Pinterest平台团队开发实现了名为PinCompute的高性能通用计算平台&#xff0c;支持Pinterest的大量异构用例和服务。本文介绍了团队在开发这一平台过程中的经验和实践&#xff0c;对于其他平台团队来说&#xff0c;具有很好的参考意义。原文: PinCompute: A Kubernetes Backed …

RabbitMQ面试必备:基本概念、组件原理、消息传递模型,一网打尽。解密高可用性、负载均衡,深入了解安全性配置和性能优化

一、RabbitMQ的基本概念&#xff1a; 1.什么是消息队列&#xff1f; 消息队列是一种在分布式系统中用于在不同组件之间传递消息的通信机制。它允许应用程序和服务通过异步方式进行通信&#xff0c;提高了系统的可伸缩性和松耦合性。消息队列通常包括生产者&#xff08;Produc…

node-sass版本与NodeJS版本不匹配的问题

npm install 报错如下 npm ERR! code 1 npm ERR! path D:\Project\git_Product\YYYY\user\node_modules\node-sass npm ERR! command failed npm ERR! command C:\WINDOWS\system32\cmd.exe /d /s /c node scripts/build.js 问题原因 node-sass 与 node 版本不匹配 卸载Node…

PM圆桌派:同事不愿意告诉你的职场套路有哪些?

职场是社会的缩影&#xff0c;想要崭露头角&#xff0c;获得更多升职加薪的机会&#xff0c;就不要做着和多数人一样的事情&#xff0c;却期待着不一样的结果。 职场上有很多潜在的规则&#xff0c;要会做事&#xff0c;也要会说话&#xff0c;更要会做人。如果不懂规则&#…

day43_jdbc

今日内容 0 复习昨日 1 SQL注入问题 2 PreparedStatement 3 完成CRUD练习 4 ORM 5 DBUtil (properties) 6 事务操作 0 复习昨日 已经找人提问… 1 SQL注入 1.1 什么是SQL注入 用户输入的数据中有SQL关键词,导致在执行SQL语句时出现一些不正常的情况.这就是SQL注入! 出现SQL注入…

springcloud-gateway升级版本allowedOrigins要改allowedOriginPatterns

前言 报错: java.lang.IllegalArgumentException: When allowCredentials is true,allowedOrigins cannot contain the special value "*"since that cannot be set on the "Access-Control-Allow-Origin"response header. To allow credentials to a se…

AI大模型专题:OWASP大语言模型应用程序十大风险V1.0

今天分享的是AI大模型系列深度研究报告&#xff1a;《AI大模型专题&#xff1a;OWASP大语言模型应用程序十大风险V1.0》。 &#xff08;报告出品方&#xff1a;OWASP&#xff09; 报告共计&#xff1a;14页 LM01:2023_ 提示词注入 描述&#xff1a;提示词注入包括绕过过滤器…

【Linux】解决:为什么重复创建同一个【进程pid会变化,而ppid父进程id不变?】

前言 大家好吖&#xff0c;欢迎来到 YY 滴Linux 系列 &#xff0c;热烈欢迎&#xff01; 本章主要内容面向接触过Linux的老铁 主要内容含&#xff1a; 欢迎订阅 YY滴C专栏&#xff01;更多干货持续更新&#xff01;以下是传送门&#xff01; YY的《C》专栏YY的《C11》专栏YY的…