主要内容

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

此示例显示如何使用主组件分析(PCA)来适合线性回归。PCA将垂直距离最小化到拟合模型。这是所谓的正交回归或全部最小二乘的线性情况,并且在预测器和响应变量之间没有自然区分时,或者当用误差测量所有变量时,适当。这与预先测量预测变量的通常回归假设相反,并且仅响应变量具有错误组件。

例如,给定两个数据向量x和y,可以拟合一条直线,使每个点(x(i), y(i))到这条直线的垂直距离最小。更一般地说,有p个观察变量,你可以在p维空间中拟合一个r维超平面(r < p)。选择r等价于选择在PCA中保留的分量的数量。它可能基于预测错误,也可能仅仅是一种实用的选择,将数据减少到可管理的维数。

在这个例子中,我们通过三个观察变量的一些数据适合飞机和一条线。对于任何数量的变量,它很容易做同样的事情,并且对于模型的任何维度,尽管在更高的尺寸上可视化适合会显然不会简单。

将飞机拟合到3-D数据

首先,我们为示例生成一些琐碎的正常数据。两个变量相当强烈相关。

RNG(5,“旋风”);X = mvnrnd([0 0 0], [1 .2 .7];2 1 0;1:8 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与前两个正交,其系数限定了平面的法线向量。

[Coeff,Score,Roots] = PCA(x);基础= Coeff(:,1:2)
基础=3×20.6774 -0.0790 0.2193 0.9707 0.7022 -0.2269
正常=多项式系数(:3)
正常=3×10.7314 -0.0982 -0.6749

这就是适合的全部。但让我们看起来更接近结果,并绘制拟合以及数据。

因为前两个组件如可能使用两个维度的数据中的多大差异,所以平面是数据的最佳二维线性近似。等效地,第三个组件解释了数据中最少的变化,并且它是回归中的错误术语。来自PCA的潜在根(或特征值)定义了每个组件的解释方差的量。

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

主分量得分的前两个坐标给出了每个点在平面坐标系中的投影。为了得到拟合点在原始坐标系下的坐标,我们将每个PC系数向量乘以相应的分数,再将数据的平均值相加。残差就是原始数据减去拟合点。

(氮、磷)= (X)大小;meanX =意味着(X, 1);Xfit = repmat (meanX n 1) +得分(:1:2)*多项式系数(:,1:2)”;残差= X - Xfit;

安装平面的等式,满足每个安装点Xfit, 是([x1 x2 x3] - meanX)*normal = 0.飞机穿过这一点meanX,它到原点的垂直距离为意思*正常.从每一点到内的垂直距离X该平面的,即残差的范数,是每个中心点与该平面的法线的点积。拟合平面使误差平方和最小化。

error = abs((X - repmat(meanX,n,1))*normal);上交所=总和(错误。^ 2)
上交所= 15.5142

为了可视化拟合,我们可以绘制平面,原始数据,以及它们在平面上的投影。

[xGrid,ygrid] = meshgrid(linspace(min(x(:1)),max(x(:,1)),5),...linspace (min (X(:, 2))马克斯(X (:, 2)), 5));* (meanX*normal - (xgrid.*normal(1) + ygrid.*normal(2)));h =网(xgrid ygrid zgrid,“EdgeColor”(0 0 0),“FaceAlpha”,0);抓住以上= (X-repmat(meanX,n,1))*normal < 0;下面= ~以上;nabove =(上图)之和;X1 = [X(上面,1)Xfit(上面,1)nan*ones(nabove,1)];X2 = [X(上面,2)Xfit(上面,2)nan*ones(nabove,1)];X3 = [X(上面,3)Xfit(上面,3)nan*ones(nabove,1)];plot3 (X1, X2, X3 ',“- - -”,x(上图,1),x(上3),x(上3),'o''颜色', [0 0]);nbelow =(下图)之和;X1 = [X(below,1) Xfit(below,1) nan*ones(nbelow,1)];X2 = [X(below,2) Xfit(below,2) nan*ones(nbelow,1)];X3 = [X(below,3) Xfit(below,3) nan*ones(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个对象。

绿色点在平面上方,红色点在平面下方。

拟合一条线到3d数据

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

dirvect = coeff(:,1)
dirvect =3×10.6774 0.2193 0.7022

主成分分数的第一个坐标将每个点的投影提供到该线上。与2-D拟合一样,PC系数向量乘以分数,给出了原始坐标系中的拟合点。

Xfit1 = repmat (meanX n 1) +得分(:1)*多项式系数(:1)';

画出直线,原始数据,以及它们在直线上的投影。

t = [min(得分(:,1)) - 。2,max(得分(:,1))+。2];endpts = [meanx + t(1)* dirvect';meanx + t(2)* dirvect'];Plot3(终止(:,1),居民(:,2),终止(:,3),'k-');x1 = [x(:,1)xfit1(:,1)NaN *那些(n,1)];x2 = [x(:,2)xfit1(:,2)nan * an(n,1)];x3 = [x(:,3)xfit1(:,3)NaN * an * xfit1(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个类型的类型。

虽然看起来这个曲线中的许多投影不是垂直于该行,但这只是因为我们在两个维度中绘制了3-D数据。在一个生活中MATLAB®图窗口,您可以以交互方式将绘图旋转到不同的视角,以验证投影是否确实垂直,并更好地了解线路如何符合数据。