主要内容

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

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

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

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

拟合平面与三维数据

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

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;Axis ([-maxlim maxlim -maxlim maxlim]);轴广场视图(9、12);

图中包含一个axes对象。axis对象包含一个类型为line的对象。

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

[多项式系数,分数,根]= pca (X);基础=多项式系数(: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,其到原点的垂直距离为meanX *正常.每一点到的垂直距离X对于平面,即残差的范数,是每个中心点与平面法线的点积。拟合平面使误差平方和最小。

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

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

[xgrid, ygrid] = meshgrid (linspace (min (X(: 1))马克斯(X (: 1)), 5),...linspace (min (X(:, 2))马克斯(X (:, 2)), 5));zgrid = (1/normal(3)) .* (meanX*normal - (xgrid.*normal(1) + ygrid.*normal(2)));h =网(xgrid ygrid zgrid,“EdgeColor”(0 0 0),“FaceAlpha”, 0);持有above = (X-repmat(meanX,n,1))*normal < 0;下面= ~以上;nabove =(上图)之和;X1 = [X(above,1) Xfit(above,1) nan*ones(nabove,1)];X2 = [X(above,2) Xfit(above,2) nan*ones(nabove,1)];X3 = [X(above,3) Xfit(above,3) nan*ones(nabove,1)];plot3 (X1, X2, X3 ',“- - -”X(上图,1)X(上图,2),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;Axis ([-maxlim maxlim -maxlim maxlim]);轴广场视图(9、12);

图中包含一个axes对象。axis对象包含53个类型为surface、line的对象。

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

直线与三维数据的拟合

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

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

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

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

画出这条线,原始数据,以及它们对这条线的投影。

t = [min(分数(:1))。2,马克斯(得分(:1))+ 2];endpts = [meanX + t(1)* direct ';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;Axis ([-maxlim maxlim -maxlim maxlim]);轴广场视图(9、12);网格

图中包含一个axes对象。axis对象包含52个line类型的对象。

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

Baidu
map