%使用pca函数进行降维
X=[1,2;3,3;3,5;5,4;5,6;6,5;8,7;9,8]; %样本矩阵,每行一个样本向量
[coeff, score, latent]=pca(X); %主成分分析
coeff, %主成分分量 (每列为一个变换空间中的基向量)
score, %主成分, score(:,1) 为X的一维表示, score为X在变换空间中的二维表示
latent, %X样本协方差矩阵的特征值
clc, clear all, close all
load hald %载入数据集
X=ingredients; %将数据集中的13x4矩阵矩阵赋给X
[coeff,score]=pca(X,'Centered','off'), %调用函数pca, 不对数据中心化
%快速PCA函数
function [V,pcaX]=fastPCA(X,k)
%输入: X--样本矩阵,每行为一个样本
%输出: V--主成分向量
%pcaX--降维后的k维样本特征向量组成的矩阵,每一行一个样本,列数k为降维后的样本特征列数
[n,m]=size(X);
meanV=mean(X); %样本均值向量
Z=(X-repmat(meanV,n,1));
CovM=Z*Z'; %计算协方差矩阵的转置
[V,D]=eigs(CovM,k); %计算CovM的前k个特征值和特征向量
V=Z'*V; %得到协方差矩阵(CovM)'的特征向量
%特征向量归一化为单位特征向量
for i=1:k
V(:,i)=V(:,i)/norm(V(:,i));
end
pcaX=Z*V; %线性变换(投影)降维至k维
save('PCA.mat','V','meanV'); %保存变换矩阵V和变换原点meanV
%用fastPCA函数对鸢尾属植物数据集降至2维
clc, clear all, close all
load fisheriris
X = meas; Y = species;
[n,m]=size(X);
[V,pcaX]=fastPCA(X,2);
gscatter(pcaX(:,1),pcaX(:,2),Y,'rbm','*vo');
%LLE MATLAB程序
function [Z] = lle(X,k,l)
%X-样本矩阵,m*n 矩阵,m为样本向量的维数,n为样本的个数
%k-近邻数,l-低维空间维数,Z为降维后的数据矩阵,维度为l*n
[m,n] = size(X);
fprintf(1,'LLE运行于 %d 维空间中的 %d 个样本点上\n',m,n);
%第一步: 计算点与点之间的距离并寻找k个近邻点.
fprintf(1,'-->寻找 %d 个近邻点.\n',k);
X2 = sum(X.^2,1);
distance = repmat(X2,n,1)+repmat(X2',1,n)-2*X'*X;
%欧氏距离公式的展开||x_i-x_j||^2=x_i^2+x_j^2-2x_i'x_j
[~,index] = sort(distance); %距离排序(从小到大)
neighborhood = index(2:(1+k),:); %取第2到第k+1个最小距离
%第二步: 计算重构权重矩阵
fprintf(1,'-->求解重构权重矩阵.\n');
if(k>m) %如果近邻点个数大于样本特征向量维数, 需要正则化
fprintf(1,'-->近邻点个数大于样本特征向量维数需要正则化.\n');
tol=1e-3;
else
tol=0;
end
W = zeros(k,n); %权重矩阵初始化
for i=1:n
z = X(:,neighborhood(:,i))-repmat(X(:,i),1,k); %将第i个点平移至坐标原点
C = z'*z; %局部协方差矩阵
C = C + eye(k,k)*tol*trace(C); %k>m时加上正则化项
W(:,i) = C\ones(k,1); %解方程组Cw=1
W(:,i) = W(:,i)/sum(W(:,i)); %按行归一化权重矩阵
end
%第三步: 计算矩阵M=(I-W)'(I-W)
fprintf(1,'-->计算局部线性嵌入.\n');
%M=eye(n,n); %M是一个只有4kn个非零元的稀疏矩阵
M = sparse(1:n,1:n,ones(1,n),n,n,4*k*n);
for i=1:n %计算矩阵M
w = W(:,i);
j = neighborhood(:,i);
M(i,j) = M(i,j) - w';
M(j,i) = M(j,i) - w;
M(j,j) = M(j,j) + w*w';
end
%计算局部嵌入
options.disp = 0; options.isreal = 1; %结构变量options赋初值
[Z,~] = eigs(M,l+1,0,options); %计算矩阵M的前l+1个最小特征值对应的特征向量
Z = Z(:,2:l+1)'*sqrt(n);
fprintf(1,'程序运行结束.\n');
%用瑞士卷数据测试LLE算法
clc, close all, clear all;
k = 20 ;%(邻域点个数)
l = 2;%最大嵌入维数
%瑞士卷的生成图
rng (3)
n=1500;
t=(3*pi/2)*(1+2*rand(1,n));
s=21*rand(1,n);
X=[t.*cos(t); s; t.*sin(t)]; %3*n矩阵
figure (1)
plot3(X(1,:),X(2,:),X(3,:),'.'), %绘制瑞士卷三维曲线图
view([12 12]); %设置视角
%调用lle函数降维
Z=lle(X,k,l);
figure (2)
plot(Z(1,:),Z(2,:),'.b'), %绘制LLE降维后的二维平面图
function Z = MDS(D, d)
%多维缩放方法(MDS)的MATLAB 程序
%功能: 支持n个m维样本降维值d维.
%输入: D--n*n距离矩阵, d--低维空间维数
%输出: Z--低维空间的d*n 样本矩阵
[n, n1] = size(D);
if n~=n1
printf('D不是一个方阵');
end
D2 = D .* D; e = ones(n,1);
H = eye(n) - 1 / n * (e *e');
B =-0.5 * H * D2 * H;
%B=zeros(n,n);
% for i=1:n
% for j=1:n
% B(i,j)=-0.5*(D(i,j)^2 -1/n*D(i,:)*D(i,:)' -1/n*D(:,j)'*D(:,j) +1/n^2*sum(sum(D.^2)));
% end
% end
[U, Lam] = eig(B);
Lam = diag(Lam);
[~, pos] = sort(Lam,'descend');
index = pos(1:d);
U = U(:, index);
Z = diag(Lam(index))^(0.5) * U';
function Z = isomap(X, k, d)
%Isomap算法MATLAB程序, 该程序调用了MDS算法
%第一步: 按欧氏距离选取k个近邻点
[n, ~] = size(X); D = zeros(n);
for i =1 : n %构造距离矩阵D
xx = repmat(X(i, :), n, 1);
%复制X的第i行n次叠成一个n*n矩阵, 其每一行元素都是X的第i行元素
diff = xx - X;
dist = sum(diff.* diff, 2); %按行求和
[dd, pos] = sort(dist); %按升序排序
index = pos(1 : k + 1)'; %前k+1个设为近邻点
index2 = pos(k + 2 : n); %后n-k-1设为非近邻点
D(i,index) = sqrt(dd(index)); %距离矩阵第i行近邻点元素值
D(i, index2) = inf; %距离矩阵第i行非近邻点元素值设为无穷大
end
%第二步: 重新计算最短距离矩阵
for k=1:n
for i=1:n
for j=1:n
if D(i,j)>D(i,k)+D(k,j)
D(i,j)=D(i,k)+D(k,j);
end
end
end
end
%第三步: 调用MDS算法降维
Z = MDS(D, d);
%用瑞士卷数据测试Isomap算法
close all, clear all;
k = 20 ;%(邻域点个数)
l = 2;%最大嵌入维数
%瑞士卷的生成图
rng (3)
n=1500;
t=(3*pi/2)*(1+2*rand(1,n));
s=21*rand(1,n);
X=[t.*cos(t); s; t.*sin(t)]; %3*n矩阵
figure (1)
plot3(X(1,:),X(2,:),X(3,:),'.'), %绘制瑞士卷三维曲线图
view([12 12]); %设置视角
X = X';
Z=isomap(X,k,l);
figure (2)
plot(Z(1,:),Z(2,:),'.b'), %绘制Isomap降维后的二维平面图
【方法一】亲测有效问题:如何关闭selenium开发中的chromedriver.exe 或 geckodriver.exe 的console命令行窗采用selenium操作浏览器执行自动化操作的场景时,在使用 pyinstaller 打包成exe文件后,会有chromedriver.exe 或 geckodriver.exe 的console命令行窗口。我们打包成exe文件一般是要分发到客户电脑上,出现这个窗体不太友好,我们需要把它隐藏掉:找到python安装目录,比如:D:\Python\Py
educoder实训平台 python第二关删除字符串中的数字_python去掉数字
1. PSNR (Peak Signal-to-Noise Ratio) 峰值信噪比给定一个大小为 \(m×n\) 的干净图像 \(I\) 和噪声图像 \(K\),均方误差 \((MSE)\) 定义为:\[MSE = \frac{1}{mn}\sum_{i=0}^{m-1}\sum_{j=0}^{n-1}[I(i, j)-K(i,j)]^2\]然后 \(PSNR (dB)\) 就定义为:\[PSN..._python 图像误差指标
1、为WIN7镜像集成USB3.0,NVME,等一系列新驱动首先用吧win7镜像引导进U盘,然后下载《WindowsImageTool》软件进行改造,改造方法如图:这个软件去技嘉官网下,在《主板-软件工具》里面,文件名叫《mb_utility_windowsimagetool》,看好主板芯片,选更新时间最晚那个版本。2、在PE下安装(U盘直接引导还是看不到SSD啊,只能曲线救国)..._小米笔记本指纹驱动下载
我们在项目中经常会遇到如下格式:class:{ 0:[ { id:0, hover:true, }, { id:1, hover:false, }, ], 1:[ { id:3, hover:false, } ]}
Hive实战 --- 电子商务消费行为分析、数据清洗、数据分析......
参考:JBoss AS7.1.1的下载安装、环境变量配置以及部署JBoss AS 7.1.1.Final 启动失败:JBAS015899:Brontes starting最新的wildfly17的配置参考:Wildfly 10的安装、配置到部署1、下载安装http://jbossas.jboss.org/downloads/JBoss A..._jboss-as
如果说数学是思维的体操,那设计模式就是面向对象编程思维的体操;简易计算器类结构图:操作类,定义两个操作数,并声明抽象方法getResult(),具体实现由子类完成;public abstract class Operation { private double numberA; private double numberB; public abstr..._hellboy工厂
use std::collections::BTreeMap;struct Foo{ entry:BTreeMapi32>>,}impl Foo{ fn new()->Foo{ Foo{ entry:BTreeMap::new(), } } fn add_rust treemap
mysql workbench 工具介绍 mysql workbench是管理数据库的可视化工具。它能帮助我们省去打SQL的过程,提高开发效率。官方下载地址 install 安装极其简单,不讲 create connection create database create table execute SQL 附加信息 show databases;use ym_
题目链接:N皇后按字典序算N皇后的前三组数据和总共多少组数据,直接按照N皇后去搜就可以了#include using namespace std;int n,ind,ans[100005][15],cs;bool row[15],dia1[100005],dia2[100005];void dfs(int q){ if(q > cs){ ind++;_n皇后选题意义和背景
一、Python官方标准库:Tkinter (必须了解)Python内置图形界面库——Tkinter。Tkinter 模块(Tk 接口)是 Python 的标准 Tk GUI 工具包的接口 .Tk 和 Tkinter 可以在大多数的 Unix 平台下使用,同样可以应用在 Windows 和 Macintosh 系统里。Tk8.0 的后续版本可以实现本地窗口风格,并良好地运行在绝大多数平台中。用法..._python gui库对比