Regresi linier multivariat dengan Python

9

Saya mencari paket Python yang mengimplementasikan regresi linier multivariat.

(Catatan terminologis: multivariat penawaran regresi dengan kasus di mana ada lebih dari satu variabel dependen sementara beberapa penawaran regresi dengan kasus di mana ada satu variabel dependen tetapi lebih dari satu variabel independen.)

Franck Dernoncourt
sumber
Saya juga tertarik dengan ini tetapi hanya ingin vektor fitur setelah transformasi non-linear. Jadi pada baris akan katakan untuk model derajat 2 dengan 2 variabel. [1,x1,x2,x1x2,x12,x22]
Pinocchio

Jawaban:

8

Anda masih dapat menggunakan sklearn.linear_model.LinearRegression . Cukup buat output ymatriks dengan kolom sebanyak yang Anda punya variabel dependen. Jika Anda menginginkan sesuatu yang non-linear , Anda dapat mencoba berbagai fungsi dasar, menggunakan fitur polinomial, atau menggunakan metode berbeda untuk regresi (seperti NN).

jamesmf
sumber
1
Apakah Anda bertanya secara khusus tentang regresi logistik multivariat? Seperti Anda ingin melakukan banyak klasifikasi sekaligus? Regresi linier multivariat tentu saja diterapkan. Regresi logistik harus dibingkai secara berbeda untuk menggunakan perpustakaan sklearn.
jamesmf
Aduh, maaf saya salah membaca, saya membaca dokumentasi sklearn.linear_model.LogisticRegression berpikir tentang regresi linier. Saya akan menghapus komentar saya untuk menghindari membingungkan pembaca di masa depan. Terima kasih!
Franck Dernoncourt
Seandainya Anda menekankan bagaimana mendapatkan vektor fitur polinomial ...
Pinocchio
2

Hanya untuk bersenang-senang Anda dapat menghitung fitur dengan tangan dengan membentuk tupel seq=(d1,...,dN) seperti yang Skamum(seq)=saya=1ND. Begitu Anda membentuk tupel-tupel itu, setiap entri mengindikasikan daya yang dimiliki fitur mentah saat ini. Jadi katakan(1,2,3) akan memetakan ke monomial x1x22x33.

Kode untuk mendapatkan tupel adalah:

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

maka harus mudah untuk melakukan regresi jika Anda tahu aljabar linier.

c = pseudo_inverse(X_poly)*y

contoh. Mungkin lebih baik untuk melakukan regresi linier yang teratur meskipun jika Anda tertarik pada generalisasi.


Ucapan terima kasih kepada Yuval adalah pertukaran CS untuk bantuan.

Pinokio
sumber