[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: generate polynomial features given a vector X and degree
From: |
aliko |
Subject: |
Re: generate polynomial features given a vector X and degree |
Date: |
Tue, 20 Dec 2011 13:42:34 +0400 |
User-agent: |
Mozilla/5.0 (Windows NT 6.1; WOW64; rv:8.0) Gecko/20111105 Thunderbird/8.0 |
Yes,
multinom.m (specfun package)
http://octave.sourceforge.net/specfun/function/multinom.html
Thats looks exactly like what I was looking for!
Thank you very much! Unfortunatley while waiting for approving of my
question on the list I've managed to write quick and dirty for-loop
based code that do job for 2<=degree<=3 and for X with more then 3 rows
that fits my current needs.
But anyway function suggested by you is more general and will be usefull
for future applications.
By the way for you to have a smile my dirty loop-based code as follows :)
function out = mapFeature(X, degree)
out = X;
degrees = {
[2 zeros(1, size(X,2)-1); 1 1 zeros(1, size(X,2)-2)],
[3 zeros(1, size(X,2)-1); 2 1 zeros(1, size(X,2)-2); 1 1 1
zeros(1, size(X,2)-3)]};
for i = 2:degree
for j = 1:size(degrees{i - 1},1)
% calculate permutations
perms_all = perms(degrees{i - 1}(j,:));
perms_cur = perms_all(1,:);
% eliminate duplicates
for k = 2:size(perms_all, 1)
is_uinque = true;
for m = 1:size(perms_cur, 1)
if perms_all(k,:) == perms_cur(m, :)
is_uinque = false;
break;
end
end
if is_uinque
perms_cur = [perms_cur; perms_all(k, :)];
end
end
perms_cur;
% for every permutation
for k = 1:size(perms_cur, 1)
X_col = ones(size(X,1), 1);
for m = 1:size(X,2)
X_col = X_col .* X(:, m) .^ perms_cur(k, m);
end
out = [out X_col];
end
end
end