Hot-keys on this page
r m x p toggle line displays
j k next/prev highlighted chunk
0 (zero) top of page
1 (one) first highlighted chunk
1"""
2@file
3@brief Implements new features such as polynomial features.
4"""
5from itertools import combinations, chain
6from itertools import combinations_with_replacement as combinations_w_r
9def _transform_iall(degree, bias, XP, X, multiply, final):
10 "Computes the polynomial features"
11 if bias:
12 XP[:, 0] = 1
13 pos = 1
14 else:
15 pos = 0
17 n = X.shape[1]
18 for d in range(0, degree):
19 if d == 0:
20 XP[:, pos:pos + n] = X
21 index = list(range(pos, pos + n))
22 pos += n
23 index.append(pos)
24 else:
25 new_index = []
26 end = index[-1]
27 for i in range(0, n):
28 a = index[i]
29 new_index.append(pos)
30 new_pos = pos + end - a
31 multiply(XP[:, a:end], X[:, i:i + 1],
32 XP[:, pos:new_pos])
33 pos = new_pos
35 new_index.append(pos)
36 index = new_index
38 return final(XP)
41def _transform_ionly(degree, bias, XP, X, multiply, final):
42 "Computes the polynomial features"
43 if bias:
44 XP[:, 0] = 1
45 pos = 1
46 else:
47 pos = 0
49 n = X.shape[1]
50 for d in range(0, degree):
51 if d == 0:
52 XP[:, pos:pos + n] = X
53 index = list(range(pos, pos + n))
54 pos += n
55 index.append(pos)
56 else:
57 new_index = []
58 end = index[-1]
59 for i in range(0, n):
60 a = index[i]
61 new_index.append(pos)
62 dec = index[i + 1] - index[i]
63 new_pos = pos + end - a - dec
64 if new_pos <= pos:
65 break
66 multiply(XP[:, a + dec:end], X[:, i:i + 1],
67 XP[:, pos:new_pos])
68 pos = new_pos
70 new_index.append(pos)
71 index = new_index
73 return final(XP)
76def _combinations_poly(n_features, degree, interaction_only, include_bias):
77 "Computes all polynomial features combinations."
78 comb = (combinations if interaction_only else combinations_w_r)
79 start = int(not include_bias)
80 return chain.from_iterable(comb(range(n_features), i)
81 for i in range(start, degree + 1))