Multivariate lineare Regression in Python

9

Ich suche nach einem Python-Paket, das eine multivariate lineare Regression implementiert.

(Terminologische Anmerkung: Multivariate Regression befasst sich mit dem Fall, dass es mehr als eine abhängige Variable gibt, während multiple Regression den Fall behandelt, in dem es eine abhängige Variable, aber mehr als eine unabhängige Variable gibt.)

Franck Dernoncourt
quelle
Ich bin auch daran interessiert, möchte aber nur den Merkmalsvektor nach der nichtlinearen Transformation. In der Zeile wäre also etwa für ein Modell vom Grad 2 mit 2 Variablen. [1,x1,x2,x1x2,x12,x22]]
Pinocchio

Antworten:

8

Sie können weiterhin sklearn.linear_model.LinearRegression verwenden . Machen Sie die Ausgabe einfach zu yeiner Matrix mit so vielen Spalten, wie Sie abhängige Variablen haben. Wenn Sie etwas nichtlineares möchten , können Sie verschiedene Basisfunktionen ausprobieren, Polynommerkmale verwenden oder eine andere Regressionsmethode verwenden (z. B. ein NN).

jamesmf
quelle
1
Fragen Sie speziell nach multivariater logistischer Regression? Wie in möchten Sie viele Klassifizierungen gleichzeitig durchführen? Eine multivariate lineare Regression ist sicherlich implementiert. Die logistische Regression müsste anders gestaltet werden, um die sklearn-Bibliothek nutzen zu können.
Jamesmf
Hoppla, tut mir leid, dass ich falsch verstanden habe. Ich habe die Dokumentation zu sklearn.linear_model.LogisticRegression gelesen und über lineare Regression nachgedacht. Ich werde meinen Kommentar entfernen, um zukünftige Leser nicht zu verwirren. Vielen Dank!
Franck Dernoncourt
Pinocchio
2

Just for fun können Sie die Funktion von Hand berechnen , indem Tupel bilden , so dass . Sobald Sie diese Tupel gebildet haben, gibt jeder Eintrag die Leistung an, um die die aktuelle Rohfunktion erhöht werden soll. Angenommen, würde dem Monom .seq=(d1,...,dN.)S.um(seq)=ich=1N.D.(1,2,3)x1x22x33

Der Code zum Abrufen der Tupel lautet:

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

Dann sollte es einfach sein, eine Regression durchzuführen, wenn Sie mit linearer Algebra vertraut sind.

c = pseudo_inverse(X_poly)*y

Beispiel. Wahrscheinlich ist es besser, eine regulierte lineare Regression durchzuführen, wenn Sie an einer Verallgemeinerung interessiert sind.


Danksagung an Yuval ist CS Austausch für die Hilfe.

Pinocchio
quelle