Régression linéaire multivariée en Python

9

Je recherche un package Python qui implémente une régression linéaire multivariée.

(Note terminologique: la régression multivariée traite du cas où il y a plus d'une variable dépendante tandis que la régression multiple traite du cas où il y a une variable dépendante mais plus d'une variable indépendante.)

Franck Dernoncourt
la source
Je suis également intéressé par cela, mais je veux juste le vecteur d'entité après la transformation non linéaire. Donc, sur la ligne serait disons pour le modèle de degré 2 avec 2 variables. [1,X1,X2,X1X2,X12,X22]
Pinocchio

Réponses:

8

Vous pouvez toujours utiliser sklearn.linear_model.LinearRegression . Faites simplement de la sortie yune matrice avec autant de colonnes que vous avez de variables dépendantes. Si vous voulez quelque chose de non linéaire , vous pouvez essayer différentes fonctions de base, utiliser des fonctions polynomiales ou utiliser une méthode de régression différente (comme un NN).

jamesmf
la source
1
Vous posez une question spécifique sur la régression logistique multivariée? Comme vous voulez effectuer plusieurs classifications à la fois? Une régression linéaire multivariée est certainement mise en œuvre. La régression logistique devrait être encadrée différemment pour utiliser la bibliothèque sklearn.
jamesmf
Oups, désolé d'avoir mal lu, je lisais la documentation de sklearn.linear_model.LogisticRegression en pensant à la régression linéaire. Je vais supprimer mon commentaire pour éviter de dérouter les futurs lecteurs. Merci!
Franck Dernoncourt
souhaite que vous auriez souligné comment obtenir le vecteur d'entité polynomiale ...
Pinocchio
2

seq=(1,...,N)Sum(seq)=je=1N(1,2,3)X1X22X33

Le code pour obtenir les tuples est:

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

alors il devrait être facile de faire une régression si vous connaissez l'algèbre linéaire.

c = pseudo_inverse(X_poly)*y

exemple. Il vaut probablement mieux faire une régression linéaire régularisée si vous êtes intéressé par la généralisation.


Remerciements à Yuval est échange CS pour l'aide.

Pinocchio
la source