Regressione lineare multivariata in Python


9

Sto cercando un pacchetto Python che implementa la regressione lineare multivariata.

(Nota terminologica: la regressione multivariata si occupa del caso in cui ci sono più di una variabile dipendente mentre la regressione multipla si occupa del caso in cui esiste una variabile dipendente ma più di una variabile indipendente.)


Sono anche interessato a questo, ma voglio solo il vettore di funzione dopo la trasformazione non lineare. Quindi sulla riga sarebbe per il modello di grado 2 con 2 variabili. [1,X1,X2,X1X2,X12,X22]
Pinocchio,

Risposte:


8

Puoi ancora usare sklearn.linear_model.LinearRegression . Basta trasformare l'output in yuna matrice con tante colonne quante sono le variabili dipendenti. Se desideri qualcosa di non lineare , puoi provare diverse funzioni di base, utilizzare funzionalità polinomiali o utilizzare un metodo diverso per la regressione (come un NN).


1
Stai chiedendo in particolare la regressione logistica multivariata? Come vuoi eseguire molte classificazioni contemporaneamente? La regressione lineare multivariata è certamente implementata. La regressione logistica dovrebbe essere strutturata in modo diverso per utilizzare la libreria sklearn.
Jamesmf,

Spiacenti, ho letto male, stavo leggendo la documentazione sklearn.linear_model.LogisticRegression pensando alla regressione lineare. Rimuoverò il mio commento per evitare di confondere i futuri lettori. Grazie!
Franck Dernoncourt,

vorrei che avessi enfatizzato come ottenere il vettore polinomiale ...
Pinocchio,


2

Seq=(d1,...,dN)Sum(Seq)=Σio=1ND(1,2,3)X1X22X33

Il codice per ottenere le tuple è:

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

allora dovrebbe essere facile fare regressione se conosci l'algebra lineare.

c = pseudo_inverse(X_poly)*y

esempio. Probabilmente è meglio fare una regressione lineare regolarizzata se sei interessato alla generalizzazione.


Ringraziamenti a Yuval è lo scambio CS per l'aiuto.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.