⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 kpca081223.m

📁 非线性降维方法KPCA 可以应用于高维数据的机器学习
💻 M
字号:
function ytest=kpca081223(xtest,xtrain,gongxianlv);
%该程序于2008-12-23调试通过,输入数据是列向量
rbf_var = 10;                     %高斯核的参数
xs=xtrain;   %xs 为建立特征向量的样本数目

%************采用高斯核,寻求核矩阵****************
        s = rbf_var;
        rows = size(xs,2);           %建立核矩阵的行和列
        cols = size(xs,2);   
        tmp = zeros(rows,cols);
        for i = 1:rows
            for j = 1:cols
                tmp(i,j) = norm(xs(:,i)-xs(:,j));
            end
        end        
        K = exp(-0.5*(tmp/s).^2);       %k为方阵
 %======================中心化K
        nkpca=size(xs,2); 
        J = ones(nkpca, nkpca)/ nkpca;
        K = K - J*K - K*J + J*K*J;
 %===================== 求解特征向量
        [V,D]=eig(K);    %协方差矩阵作分解
        [eigv,inxDesc]=sort(-diag(D)); 
         eigv=-eigv;
        T=V(:,inxDesc);   %特征向量以列的形式存放,且根据特征值进行调整顺序
%++++++++++++++++++++++++++++++++++++++++++++寻求大于大于gongxianlv的主元
        totaleigv=sum(eigv);
        total=0;
        for i=1:rows                                                                      %寻找主元贡献率
            total=eigv(i,1)+total;
                if total>gongxianlv*totaleigv
                   break;
                end
        end
        T =T(:,1:i);                                                                  %把特征向量由列向量变成行向量 取前i个 i由贡献率决定
 %+++++++++++++++++++++++++++++++++++++++++进行标准化
        m=i;             %前m个贡献率大于0.9
        for i=1:m
            Translate(:,i) = T(:,i)/(sqrt(eigv(i)));  %前m个标准化   m列nkpca 行
        end
 %++++++++++++++++++++++++++++++++++++++++++进行特征变换
number_test= size(xtest,2);          %寻求测试样本数目
unit_test = ones(number_test,nkpca)/ nkpca;
unit = J;
K_test = zeros(number_test, nkpca);

           for i=1:number_test
                    for j=1:nkpca
                         K_test(i,j) = norm(xtest(:,i)-xtrain(:,j));
                    end
           end
           K_test = exp(-0.5*( K_test/s).^2);  
           K_test_n = K_test - unit_test*K - K_test*unit + unit_test*K*unit;   %零均值化 
           test_features = K_test_n * Translate;  
           test_features = test_features';  
           ytest=test_features;
           %核矩阵零均值化有点不明白 没有关系 算法分析通过
 %+++++++++++++++++++++++++++++++++++++++++算法结束
 i=1;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -