主要内容

使用主成分分析拟合正交回归

这个例子展示了如何使用主成分分析(PCA)来拟合线性回归。PCA最小化了数据到拟合模型的垂直距离。这就是所谓的正交回归或总最小二乘的线性情况,当预测器和响应变量之间没有自然区别,或所有变量都有误差时,这是合适的。这与通常的回归假设相反,即预测变量是精确测量的,只有响应变量有误差成分。

例如,给定两个数据矢量x和y,您可以适用于从每个点(x(i),y(i))到行的垂直距离最小化的线。更一般地,使用P观察变量,您可以在第维空间(R

在这个例子中,我们通过三个观测变量的一些数据拟合一个平面和一条直线。对于任意数量的变量和模型的任意维度,做同样的事情是很容易的,尽管在更高维度中可视化适合显然不是很简单。

将飞机与3-D数据相匹配

首先,我们为示例生成一些三元正态数据。其中两个变量是相当紧密相关的。

rng (5'twister');x = mvnrnd([0 0],[1 .2 .7; .2 1 0; 7 0 1],50);plot3(x(:,1),x(:,2),x(:,3),“波”);网格;maxlim = max(abs(x(:)))* 1.1;轴([ -  maxlim maxlim -maxlim maxlim -maxlim maxlim]);轴广场查看(-9,12);

图中包含一个坐标轴。轴包含一个线型对象。

接下来,我们使用PCA将平面与数据匹配。前两个主分量的系数定义了构成平面基的向量。第三个PC正交于前两个,它的系数定义了平面的法向量。

[多项式系数,分数,根]= pca (X);基础=多项式系数(:1:2)
基础=3×20.6774 -0.0790 0.2193 0.9707 0.7022 - 0.22269
普通= Coeff(:,3)
正常=3×10.7314 -0.0982 -0.6749

这就是最合适的了。但让我们更仔细地看看结果,并将其与数据绘制在一起。

因为前两个部分解释了二维数据中尽可能多的方差,所以平面是对数据最好的二维线性逼近。同样地,第三个成分解释了数据中最小的变化量,它是回归中的误差项。来自PCA的潜在根(或特征值)定义了每个分量的解释方差量。

pctexplated =根'./ sum(根)
pctExplained =1×30.6226 0.2976 0.0798

主组件的前两个坐标分数使每个点的投影在平面的坐标系中给出到平面上。为了在原始坐标系方面获取拟合点的坐标,我们将每个PC系数矢量乘以相应的分数,并在数据的平均值中加回来。残差只是原始数据减去安装点。

[n,p] = size(x);meanx =平均值(x,1);XFIT = REPMAT(MASHX,N,1)+得分(:,1:2)* COEFF(:,1:2)';Residuals = X  -  XFIT;

其中每个拟合点所满足的拟合平面方程XFIT.,是([x1 x2 x3] - meanx)*正常= 0.平面通过这个点meanX,与原点的垂直距离是meanX *正常.从每个点垂直距离X在平面上,即残差的标准,是每个居中点的点乘积,具有正常到平面。拟合平面最小化平方误差的总和。

error = abs((x  -  repmat(meanx,n,1))*正常);sse = sum(错误。^ 2)
SSE = 15.5142.

为了可视化拟合,我们可以绘制平面,原始数据及其投影到平面。

[xgrid, ygrid] = meshgrid (linspace (min (X(: 1))马克斯(X (: 1)), 5),......linspace(min(x(:,2)),max(x(:,2)),5));zgrid =(1 /正常(3))。*(meanx * normal  - (xgrid。*正常(1)+ ygrid。*正常(2)));h =网格(XGrid,Ygrid,zgrid,'Edgecolor',[0 0 0],'Facealpha', 0);持有上面=(x-repmat(meanx,n,1))*正常<0;低于=〜上面;nabove = sum(上图);x1 = [x(上图,1)xfit(上面,1)纳米*(nabove,1)];x2 = [x(上图,2)xfit(上面,2)纳米*(nabove,1)];x3 = [x(上3)xfit(上3)南* xfit(nabove,1)];Plot3(x1',x2',x3',' - 'X(上图,1)X(上图,2),X(上图,3),“o”“颜色”,[0 .7 0]);nbelow = sum(下面);X1 = [x(下,1)XFIT(下,1)纳米* x(nbelow,1)];x2 = [x(下,2)xfit(下,2)nan * x(nbelow,1)];x3 = [x(下,3)xfit(下,3)纳米*(nbelow,1)];Plot3(x1',x2',x3',' - ',x(下,1),x(下,2),x(下3),“o”“颜色”, (1 0 0));持有maxlim = max(abs(x(:)))* 1.1;轴([ -  maxlim maxlim -maxlim maxlim -maxlim maxlim]);轴广场查看(-9,12);

图中包含一个坐标轴。轴含有53个类型的表面,线。

绿点在飞机上方,红色点以下。

拟合一行到3-D数据

对数据拟合一条直线甚至更简单,而且由于PCA的嵌套属性,我们可以使用已经计算过的组件。定义直线的方向向量由第一个主分量的系数给出。第二个和第三个pc正交于第一个,它们的系数定义了垂直于直线的方向。描述这条直线最简单的方程是meanX + t * dirVect,在那里T.参数化沿直线的位置。

dirVect =多项式系数(:1)
dirVect =3×10.6774 0.2193 0.7022

主分量分数的第一个坐标给出了每个点在直线上的投影。与二维拟合一样,PC系数向量乘以分数给出了原始坐标系中的拟合点。

XFIT1 = REPMAT(MASHX,N,1)+得分(:,1)* COEFF(:,1)';

绘制行,原始数据及其投影到线路。

t = [min(分数(:1))。2,马克斯(得分(:1))+ 2];endpts = [meanX + t(1)*dirVect';meanX + t (2) * dirVect '];plot3 (endpts (: 1) endpts (:, 2), endpts (:, 3),“k -”);X1 = [X(:,1) Xfit1(:,1) nan*ones(n,1)];X2 = [X(:,2) Xfit1(:,2) nan*ones(n,1)];X3 = [X(:,3) Xfit1(:,3) nan*ones(n,1)];持有Plot3(x1',x2',x3',“b -”X (: 1) X (:, 2), X (:, 3),“波”);持有maxlim = max(abs(x(:)))* 1.1;轴([ -  maxlim maxlim -maxlim maxlim -maxlim maxlim]);轴广场查看(-9,12);网格

图中包含一个坐标轴。轴线包含52个线型对象。

虽然这幅图中的许多投影看起来都不垂直于这条线,但这只是因为我们在二维中绘制3d数据。在一个生活MATLAB®.在图形窗口中,您可以交互地将图旋转到不同的透视图,以验证投影确实是垂直的,并更好地感受线与数据的吻合程度。