KPCA降维的matlab代码,贡献率,累积贡献率,可设置降维数目,可设置核函数,可设置核参数

2023-10-12 15:10

本文主要是介绍KPCA降维的matlab代码,贡献率,累积贡献率,可设置降维数目,可设置核函数,可设置核参数,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

不用担心代码质量问题,直接复制吧,家人们!

先上简单易懂的主函数

clear
close all
clc
load data.mat  
X1=data;  %data是一个N*M的矩阵,N是样本个数,M是维度!不要整乱了哦!
[X1,~]=mapminmax(X1'); %做个归一化处理,归一化处理的时候要对数据转置的哦
choice  = 1;          % 1代表高斯核,2代表多项式核,3代表线性核,4代表指数核,5代表拉普拉斯核
sigma = 8;             % 核参数
target_dimension = 15   ;              % KPCA降维后保留的维度
[X1_KPCA,contrb] = myKPCA(X1, sigma, choice, target_dimension);

data是一个N*M的矩阵,N是样本个数,M是维度!不要整乱了哦!

运行完之后,X1_KPCA就是你想要的降维后的序列,而contrb就是你想要的贡献率咯!

一共两个子函数,首先把这个函数“啪叽”粘贴到你的马特兰博。

function [X_KPCA,contrb]  = myKPCA(X, sigma, choice, target_dimension, varargin)
%MYPCM - The Kernel Principal Component Analysis(KPCA) function.
%   To calculate the result after KPCA, one kind of 
%   dimension-reduction technical of characteristics.
%   Here are some useful reference material:
%   https://www.jianshu.com/p/708ca9fa3023
%   https://blog.csdn.net/qq_38517310/article/details/79387476
%
%   [eigenvalue, X_KPCA] = myKPCA(x, sigma, cls, target_dim)
% 
%   Input - 
%   X: a N*M matrix containing M datas with N dimensions;
%   sigma: a parameter of kernel function;
%   choice: what kind of kernel to be chosen;
%   target_dimension: number of dimensions to be reduced to, normally, target_dimension<N;
%   DIM: specifies a dimension DIM to arrange X.
%       DIM = 1: X(N*M)
%       DIM = 2: X(M*N)
%       DIM = otherwisw: error
%   Output - 
%   X_KPCA: a target_dimension*M matrix containing M datas with target_dimension dimensions, result of KPCA of data X;
% 
%   Copyright (c) 2018 CHEN Tianyang
%   more info contact: tychen@whu.edu.cn%%
% parameter number check
narginchk(4,5);
narg = numel(varargin);
DIM = [];
switch nargcase 0case 1DIM = varargin{:};otherwiseerror('Error! Input parameter error.');
end
if isempty(DIM)DIM = 1;
end
if DIM == 2X = X';
elseif DIM~=1 && DIM~=2error('Error! Parameter DIM should be either 1 or 2.');
end
% parameter correction test
if ~ismatrix(X)error('Error! Input parameter "X" should be a matrix');
end
[N,M] = size(X);        % N*M = 样本维数*样本数,即每一列代表一个数据/样本
if target_dimension > Nwarning('warning! Parameter "target_dim" is not recommended to be larger than parameter "N".');
elseif target_dimension == Nwarning('Warning! There is no dimension-reduction effect.');
end%% core algorithm
% 计算核矩阵 K (实对称矩阵)  【核矩阵 K 的size等于样本数目】
K = zeros(M,M);
for i=1:Mfor j=1:MK(i,j)=mykernel(X(:,i),X(:,j),choice,sigma);       % 落实到计算是任意2个【样本】的点积end
end% 计算中心化后的核矩阵KI((实对称矩阵))
% 中心化:使得矩阵【各行各列】的均值为0(本身为实对称矩阵)
% I*k/M: 矩阵 K 的各列均值延拓 M 行, 即矩阵 I*k/M 每行相同;
% k*I/M: 矩阵 K 的各行均值延拓 M 列, 即矩阵 k*I/M 每列相同;
% I*k*I/(M*M): 矩阵 K 所有数据均值构成的一个M*M矩阵;
I = ones(M,M);
kI = K-I*K/M-K*I/M+I*K*I/(M*M);% 计算特征值与特征向量
[V,D] = eig(kI);
D = diag(D);% 按序由大到小排列,其中v整列参与排序
[proper_value_sort, index] = sort(D, 'descend');
V = V(:, index);% 取 KI 最大的 target_dim 个特征值及其对应的特征向量 【!!!特征向量按行排列!!!】 
% 注意这里的 特征值 和 特征向量 都是 KI 或 K 的, 不是高维空间中的特征向量
X_KPCA = (V(:, 1:target_dimension))';    % X_KPCA 本身就是原数据 X 经过 KPCA 之后得到的     contrb = zeros(N,2);
contrb(:,1) = proper_value_sort(1:N)/sum(proper_value_sort);   % 计算贡献率
for i=1:Ncontrb(i,2) = sum(contrb(1:i,1));  %贡献率之和
endend

下面上核函数。这就是计算和矩阵时候用到的核函数 ,也是很多博主为了盈利故意不给大家展示的核函数。在这里我“啪叽”就复制上去啦,然后你啪叽  “不用点赞” 就可以粘贴走了!

function k = mykernel(x,y,choice,var)%
%   k = mykernel(x,y,choice,var)
%  Input - 
%   x: input vector;
%   y: input vector;
%   choice: what kind of kernel to be chosen;
%   var: kernel's parameter.
%   Output - 
%   x: result of a kerner function with 2 input vectors.%% 
% cls: choose kernel function
if ~isvector(x)||~isvector(y)error('Input error 1.');
end
if length(x)~=length(y)error('Input error 2.');
end
x = x(:);
y = y(:);
if choice == 1k = exp( - norm(x-y)^2/(2*var^2) );     % 高斯核
elseif choice == 2k = (x'*y+1)^var;                       % 多项式核
elseif choice == 3          k = x'*y;                               % 线形核
elseif choice == 4k = exp( - norm(x-y)/(2*var^2) );       % 指数核
elseif choice == 5k = exp( - norm(x-y)/var );             % 拉普拉斯核
elseerror('Error! Parameter "choice" should be interger from 1 to 5.');
end

最后我“啪叽”把贡献率的庐山真面目给大家粘贴一下啦

我这里是一个15维度的数据,第一列是每个特征维度的贡献率,第二列是累积贡献率。

这篇关于KPCA降维的matlab代码,贡献率,累积贡献率,可设置降维数目,可设置核函数,可设置核参数的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/196657

相关文章

hdu1496(用hash思想统计数目)

作为一个刚学hash的孩子,感觉这道题目很不错,灵活的运用的数组的下标。 解题步骤:如果用常规方法解,那么时间复杂度为O(n^4),肯定会超时,然后参考了网上的解题方法,将等式分成两个部分,a*x1^2+b*x2^2和c*x3^2+d*x4^2, 各自作为数组的下标,如果两部分相加为0,则满足等式; 代码如下: #include<iostream>#include<algorithm

Andrej Karpathy最新采访:认知核心模型10亿参数就够了,AI会打破教育不公的僵局

夕小瑶科技说 原创  作者 | 海野 AI圈子的红人,AI大神Andrej Karpathy,曾是OpenAI联合创始人之一,特斯拉AI总监。上一次的动态是官宣创办一家名为 Eureka Labs 的人工智能+教育公司 ,宣布将长期致力于AI原生教育。 近日,Andrej Karpathy接受了No Priors(投资博客)的采访,与硅谷知名投资人 Sara Guo 和 Elad G

hdu1171(母函数或多重背包)

题意:把物品分成两份,使得价值最接近 可以用背包,或者是母函数来解,母函数(1 + x^v+x^2v+.....+x^num*v)(1 + x^v+x^2v+.....+x^num*v)(1 + x^v+x^2v+.....+x^num*v) 其中指数为价值,每一项的数目为(该物品数+1)个 代码如下: #include<iostream>#include<algorithm>

C++11第三弹:lambda表达式 | 新的类功能 | 模板的可变参数

🌈个人主页: 南桥几晴秋 🌈C++专栏: 南桥谈C++ 🌈C语言专栏: C语言学习系列 🌈Linux学习专栏: 南桥谈Linux 🌈数据结构学习专栏: 数据结构杂谈 🌈数据库学习专栏: 南桥谈MySQL 🌈Qt学习专栏: 南桥谈Qt 🌈菜鸡代码练习: 练习随想记录 🌈git学习: 南桥谈Git 🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈�

如何在页面调用utility bar并传递参数至lwc组件

1.在app的utility item中添加lwc组件: 2.调用utility bar api的方式有两种: 方法一,通过lwc调用: import {LightningElement,api ,wire } from 'lwc';import { publish, MessageContext } from 'lightning/messageService';import Ca

活用c4d官方开发文档查询代码

当你问AI助手比如豆包,如何用python禁止掉xpresso标签时候,它会提示到 这时候要用到两个东西。https://developers.maxon.net/论坛搜索和开发文档 比如这里我就在官方找到正确的id描述 然后我就把参数标签换过来

Android实现任意版本设置默认的锁屏壁纸和桌面壁纸(两张壁纸可不一致)

客户有些需求需要设置默认壁纸和锁屏壁纸  在默认情况下 这两个壁纸是相同的  如果需要默认的锁屏壁纸和桌面壁纸不一样 需要额外修改 Android13实现 替换默认桌面壁纸: 将图片文件替换frameworks/base/core/res/res/drawable-nodpi/default_wallpaper.*  (注意不能是bmp格式) 替换默认锁屏壁纸: 将图片资源放入vendo

poj 1258 Agri-Net(最小生成树模板代码)

感觉用这题来当模板更适合。 题意就是给你邻接矩阵求最小生成树啦。~ prim代码:效率很高。172k...0ms。 #include<stdio.h>#include<algorithm>using namespace std;const int MaxN = 101;const int INF = 0x3f3f3f3f;int g[MaxN][MaxN];int n

4B参数秒杀GPT-3.5:MiniCPM 3.0惊艳登场!

​ 面壁智能 在 AI 的世界里,总有那么几个时刻让人惊叹不已。面壁智能推出的 MiniCPM 3.0,这个仅有4B参数的"小钢炮",正在以惊人的实力挑战着 GPT-3.5 这个曾经的AI巨人。 MiniCPM 3.0 MiniCPM 3.0 MiniCPM 3.0 目前的主要功能有: 长上下文功能:原生支持 32k 上下文长度,性能完美。我们引入了

计算机毕业设计 大学志愿填报系统 Java+SpringBoot+Vue 前后端分离 文档报告 代码讲解 安装调试

🍊作者:计算机编程-吉哥 🍊简介:专业从事JavaWeb程序开发,微信小程序开发,定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事,生活就是快乐的。 🍊心愿:点赞 👍 收藏 ⭐评论 📝 🍅 文末获取源码联系 👇🏻 精彩专栏推荐订阅 👇🏻 不然下次找不到哟~Java毕业设计项目~热门选题推荐《1000套》 目录 1.技术选型 2.开发工具 3.功能