Để giải trí, bạn có thể tính toán tính năng bằng tay bằng cách tạo các bộ dữ liệu s e q= ( d1, . .. , dN) như vậy mà Su m ( s e q) = ∑Ni = 1≤ D. Khi bạn tạo các bộ dữ liệu đó, mỗi mục nhập biểu thị sức mạnh mà tính năng thô hiện tại sẽ được nâng lên. Nói vậy( 1 , 2 , 3 ) sẽ ánh xạ tới đơn thức x1x22x33.
Mã để nhận các bộ dữ liệu là:
def generate_all_tuples_for_monomials(N,D):
if D == 0:
seq0 = N*[0]
sequences_degree_0 = [seq0]
S_0 = {0:sequences_degree_0}
return S_0
else:
# S_all = [ k->S_D ] ~ [ k->[seq0,...,seqK]]
S_all = generate_all_tuples_for_monomials(N,D-1)# S^* = (S^*_D-1) U S_D
print(S_all)
#
S_D_current = []
# for every prev set of degree tuples
#for d in range(len(S_all.items())): # d \in [0,...,D_current]
d = D-1
d_new = D - d # get new valid degree number
# for each sequences, create the new valid degree tuple
S_all_seq_for_deg_d = S_all[d]
for seq in S_all[d]:
for pos in range(N):
seq_new = seq[:]
seq_new[pos] = seq_new[pos] + d_new # seq elements dd to D
if seq_new not in S_D_current:
S_D_current.append(seq_new)
S_all[D] = S_D_current
return S_all
sau đó sẽ dễ dàng thực hiện hồi quy nếu bạn biết đại số tuyến tính.
c = pseudo_inverse(X_poly)*y
thí dụ. Có lẽ tốt hơn để thực hiện hồi quy tuyến tính thường xuyên mặc dù nếu bạn quan tâm đến khái quát.
Lời cảm ơn đến Yuval là trao đổi CS để được giúp đỡ.