Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab:创建次数为n的特征多项式组合。_Matlab_Machine Learning_Linear Regression - Fatal编程技术网

Matlab:创建次数为n的特征多项式组合。

Matlab:创建次数为n的特征多项式组合。,matlab,machine-learning,linear-regression,Matlab,Machine Learning,Linear Regression,是否有任何Matlab函数或通用代码来生成阶数为n的三变量多项式方程的所有特征组合? 对于三阶变量,特征组合将为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:degr

是否有任何Matlab函数或通用代码来生成阶数为n的三变量多项式方程的所有特征组合? 对于三阶变量,特征组合将为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度的三个变量的代码。提前谢谢

您可以从中选择功能强大的
nmultichoosek

称之为

combs=nmultichoosek([1 x1 x2 x3],4);
并删除第一列中没有1的所有值

combs=combs(combs(:,1)==1,:);
最后计算柱的乘积

 result=prod(comb,2);
这对任何数量的
n
变量都有效,但如果
n
越大,效果就越差。如果您更改变量,请记住将
4
更改为
n+1

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

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
度=3;
[i,j,k]=网格(0:度);
powers=sortrows([i(:)j(:)k(:)]);
out=[];
m=1时:尺寸(幂,1)
d=功率(m,:);

if sum(d)聪明的解决方案。很好,向你致敬:)谢谢你的帮助:)最后一个答案很容易理解,对我很有用。如果我有时间,我也会找你的。再次感谢:)@iAnas你接受的比我的好,不用担心;)
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