Regressão linear multivariada em Python

9

Estou procurando um pacote Python que implemente regressão linear multivariada.

(Nota terminológica: a regressão multivariada trata do caso em que há mais de uma variável dependente, enquanto a regressão múltipla trata do caso em que há uma variável dependente, mas mais de uma variável independente.)

Franck Dernoncourt
fonte
Também estou interessado nisso, mas quero apenas o vetor de recurso após a transformação não linear. Portanto, na linha seria digamos para o modelo de grau 2 com 2 variáveis. [1 1,x1 1,x2,x1 1x2,x1 12,x22]
Pinóquio

Respostas:

8

Você ainda pode usar sklearn.linear_model.LinearRegression . Simplesmente faça da saída yuma matriz com tantas colunas quanto as variáveis ​​dependentes. Se você quiser algo não linear , poderá tentar diferentes funções básicas, usar recursos polinomiais ou usar um método diferente para regressão (como um NN).

jamesmf
fonte
11
Você está perguntando especificamente sobre a regressão logística multivariada? Como você deseja realizar muitas classificações de uma só vez? A regressão linear multivariada é certamente implementada. A regressão logística teria que ser estruturada de maneira diferente para usar a biblioteca sklearn.
jamesmf
Opa, desculpe, eu li errado, eu estava lendo a documentação sklearn.linear_model.LogisticRegression pensando em regressão linear. Vou remover meu comentário para evitar confundir futuros leitores. Obrigado!
Franck Dernoncourt
desejo você teria enfatizado como obter o vetor de característica polinomial ...
Pinocchio
2

seq=(d1 1,...,dN)Svocêm(seq)=Eu=1 1ND(1 1,2,3)x1 1x22x33

O código para obter as tuplas é:

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

então deve ser fácil fazer regressão se você souber álgebra linear.

c = pseudo_inverse(X_poly)*y

exemplo. Provavelmente é melhor fazer regressão linear regularizada, se você estiver interessado em generalização.


Agradecimentos a Yuval é troca de CS pela ajuda.

Pinóquio
fonte