Regresión lineal multivariante en Python

9

Estoy buscando un paquete de Python que implemente la regresión lineal multivariante.

(Nota terminológica: la regresión multivariada trata el caso donde hay más de una variable dependiente, mientras que la regresión múltiple trata el caso donde hay una variable dependiente pero más de una variable independiente).

Franck Dernoncourt
fuente
También estoy interesado en esto, pero solo quiero el vector de características después de la transformación no lineal. Entonces, en la fila sería digamos para el modelo de grado 2 con 2 variables. [1,X1,X2,X1X2,X12,X22]
Pinocho

Respuestas:

8

Todavía puede usar sklearn.linear_model.LinearRegression . Simplemente haga que la salida sea yuna matriz con tantas columnas como variables dependientes. Si desea algo no lineal , puede probar diferentes funciones básicas, usar características polinómicas o usar un método diferente para la regresión (como un NN).

jamesmf
fuente
1
¿Está preguntando específicamente sobre la regresión logística multivariada? ¿Como quieres realizar muchas clasificaciones a la vez? La regresión lineal multivariante ciertamente se implementa. La regresión logística tendría que estar enmarcada de manera diferente para usar la biblioteca sklearn.
jamesmf
Vaya, lo siento, leí mal, estaba leyendo la documentación sklearn.linear_model.LogisticRegression pensando en la regresión lineal. Eliminaré mi comentario para evitar confundir a futuros lectores. ¡Gracias!
Franck Dernoncourt
desearía haber enfatizado cómo obtener el vector de característica polinómica ...
Pinocho
2

smiq=(re1,...,renorte)Stumetro(smiq)=yo=1nortere(1,2,3)X1X22X33

El código para obtener las tuplas es:

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

entonces debería ser fácil hacer regresión si conoces álgebra lineal.

c = pseudo_inverse(X_poly)*y

ejemplo. Sin embargo, probablemente sea mejor hacer una regresión lineal regularizada si está interesado en la generalización.


Agradecimientos a Yuval es el intercambio de CS por la ayuda.

Pinocho
fuente