% 判断是否有输入参数,如果没有则运行selfdemo函数,然后退出 if nargin == 0, selfdemo; return; end

% 获取输入数据集的样本数和特征数 [nSmp,nFea] = size(X);

% 判断权重矩阵W的行数是否等于样本数nSmp,如果不等于则报错 if size(W,1) ~= nSmp error('W is error'); end

% 计算W的每个行的权重和,并将其赋值给D D = full(sum(W,2)); % 将权重矩阵W的值赋给L L = W;

% 创建一个全为1的向量allone allone = ones(nSmp,1);

% 计算D的转置和X的乘积,赋值给tmp1 tmp1 = D'*X;

% 将向量D转化为对角矩阵D D = sparse(1:nSmp,1:nSmp,D,nSmp,nSmp);

% 计算D' * X的转置和X的乘积,然后再将其转置,最后将得到的结果与tmp1的平方相除,再用其除以D的对角线元素之和,最终赋值给DPrime DPrime = sum((X'*D)'.*X)-tmp1.*tmp1/sum(diag(D));

% 计算L' * X的转置和X的乘积,然后再将其转置,最后将得到的结果与tmp1的平方相除,再用其除以D的对角线元素之和,最终赋值给LPrime LPrime = sum((X'*L)'.*X)-tmp1.*tmp1/sum(diag(D));

% 将DPrime中小于1e-12的元素设置为10000 DPrime(find(DPrime < 1e-12)) = 10000;

% 计算Y矩阵,即将LPrime中的每个元素除以DPrime中对应的元素 Y = LPrime./DPrime; % 将Y转置 Y = Y'; % 将Y转化为完整的矩阵 Y = full(Y);

%--------------------------------------------------- % 自我演示函数 function selfdemo % ====== Self demo using IRIS dataset % ====== 1. Plot IRIS data after LDA for dimension reduction to 2D

% 加载IRIS数据集 load iris.dat

% 将IRIS数据集的前4列标准化 feaNorm = mynorm(iris(:,1:4),2); fea = iris(:,1:4) ./ repmat(max(1e-10,feaNorm),1,4);

% 设置选项:度量方式为余弦相似度,邻居模式为KNN,权重模式为余弦相似度,最近邻数为3 options = []; options.Metric = 'Cosine'; options.NeighborMode = 'KNN'; options.WeightMode = 'Cosine'; options.k = 3;

% 构建权重矩阵W W = constructW(fea,options);

% 计算Laplacian Score并将结果保存在LaplacianScore中 [LaplacianScore] = feval(mfilename,iris(:,1:4),W);

% 将Laplacian Score从大到小排序,并将其对应的索引保存在index中 [junk, index] = sort(-LaplacianScore);

% 将iris数据集中属于不同类别的样本分别保存在index1、index2、index3中,并将其在第一个和第二个特征上的投影可视化 index1 = find(iris(:,5)==1); index2 = find(iris(:,5)==2); index3 = find(iris(:,5)==3); figure; plot(iris(index1, index(1)), iris(index1, index(2)), '*', ... iris(index2, index(1)), iris(index2, index(2)), 'o', ... iris(index3, index(1)), iris(index3, index(2)), 'x'); legend('Class 1', 'Class 2', 'Class 3'); title('IRIS data onto the first and second feature (Laplacian Score)'); axis equal; axis tight;

% 将iris数据集中属于不同类别的样本分别保存在index1、index2、index3中,并将其在第三个和第四个特征上的投影可视化 figure; plot(iris(index1, index(3)), iris(index1, index(4)), '*', ... iris(index2, index(3)), iris(index2, index(4)), 'o', ... iris(index3, index(3)), iris(index3, index(4)), 'x'); legend('Class 1', 'Class 2', 'Class 3'); title('IRIS data onto the third and fourth feature (Laplacian Score)'); axis equal; axis tight;

% 显示Laplacian Score disp('Laplacian Score:'); for i = 1:length(LaplacianScore) disp(num2str(LaplacianScore(i))); end


原文地址: https://www.cveoy.top/t/topic/m9UZ 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录