首页 > 解决方案 > Matlab:创建n次特征的多项式组合。

问题描述

是否有任何 Matlab 函数或通用代码来生成具有 n 次的三变量多项式方程的所有特征组合?对于三个 3 阶变量,特征组合为 1, x, y, z, x^2, y^2, z^2, xy,yz,zx, x^3, y^3, z^3 , x^2y, y^2z, z^2x, xyz....等等。

我已经从 Andrew Ng 的机器学习课程中获得了两个变量和 n 度的 Matlab 代码。

function out = mapFeature(X1, X2)
degree = 6;
out = ones(size(X1(:,1)));
for i = 1:degree
    for j = 0:i
        out(:, end+1) = (X1.^(i-j)).*(X2.^j);
    end
end

end

我想知道是否有任何 n 度的三个变量的代码。提前致谢。

标签: matlabmachine-learninglinear-regression

解决方案


还有一个基于简单meshgrid的解决方案:

degree = 3;
[i,j,k]= meshgrid(0:degree);
powers= sortrows([i(:) j(:) k(:)]);
out = [];
for m = 1:size(powers,1)
    d= powers(m,:);
    if sum(d)<=degree
        out(:, end+1) = (X1.^d(1)).*(X2.^d(2)).*(X3.^d(3));
    end
end

meshgrid函数生成三个矩阵,其中包含其参数值的 3D 网格。可以将此矩阵扩展为列并使用[i(:) j(:) k(:)]. 它为我们提供了一个矩阵,其行是度数的组合。sortrows对矩阵的行进行排序,使组合顺序更自然。还有一个多维网格生成函数ndgrid,可用于超过 3 个变量的情况。


推荐阅读