主要内容

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

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

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

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

拟合平面到三维数据

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

rng (5“旋风”);X = mvnrnd([0 0 0], [1 .2 .7;.2 10 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);

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

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

[coeff,score,roots] = pca(X);基= coeff(:,1:2)
基础=3×20.6774 -0.0790 0.2193 0.9707 0.7022 -0.2269
Normal = coeff(:,3)
正常=3×10.7314 -0.0982 -0.6749

这就是合身的全部。但让我们仔细看看结果,并将拟合与数据一起绘制出来。

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

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

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

[n,p] = size(X);mean(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))*正常);Sse = sum(误差。^2)
Sse = 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 = mesh(xgrid,ygrid,zgrid,“EdgeColor”,[0 0 0],“FaceAlpha”, 0);持有above = (X-repmat(meanX,n,1))*normal < 0;下面= ~上面;Nabove = sum(上);X1 = [X(上,1)Xfit(上,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 .7 0]);Nbelow = sum(下面);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);

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

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

拟合3-D数据的直线

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

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

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

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

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

T = [min(score(:,1))-。2,马克斯(得分(:1))+ 2];endpts = [meanX + t(1)*直接';meanX + t(2)* direct '];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);网格

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

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

Baidu
map