Python'da çok değişkenli doğrusal regresyon


10

Çok değişkenli doğrusal regresyon uygulayan bir Python paketi arıyorum.

(Terminolojik not: çok değişkenli regresyon, birden fazla bağımlı değişkenin olduğu durumla , çoklu regresyon, bir bağımlı değişkenin, ancak birden fazla bağımsız değişkenin olduğu durumla ilgilidir.)


Ben de ilgileniyorum ama doğrusal olmayan dönüşüm sonra sadece özellik vektör istiyorum. Yani satırda[1,x1,x2,x1x2,x12,x22]2 değişkenli derece 2 modeli için diyelim.
Pinokyo

Yanıtlar:


9

Yine de sklearn.linear_model.LinearRegression kullanabilirsiniz . Çıktıyı ybağımlı değişkenleriniz kadar sütun içeren bir matris yapmanız yeterlidir . Doğrusal olmayan bir şey istiyorsanız, farklı temel işlevleri deneyebilir, polinom özelliklerini kullanabilir veya regresyon için farklı bir yöntem kullanabilirsiniz (NN gibi).


1
Özellikle çok değişkenli lojistik regresyon hakkında mı soruyorsunuz? İçinde olduğu gibi aynı anda birçok sınıflandırma yapmak ister misiniz? Çok değişkenli doğrusal regresyon kesinlikle uygulanır. Sklearn kütüphanesini kullanmak için lojistik regresyonun farklı şekilde çerçevelenmesi gerekecektir.
jamesmf

Hata! Üzgünüm yanlış anladım, sklearn.linear_model.LogisticRegression belgelerini doğrusal regresyon düşünerek okuyordum. Gelecekteki okuyucuları karıştırmamak için yorumumu kaldıracağım. Teşekkürler!
Franck Dernoncourt

keşke polinom özellik vektörü almak için vurgulanmış olurdu ...
Pinocchio


2

Sadece eğlence için tuples oluşturarak özelliği elle hesaplayabilirsiniz seq=(d1,...,dN-) öyle ki Sum(seq)=Σben=1N-D. Bu tuplleri oluşturduktan sonra her bir giriş mevcut ham özelliğin yükseltilmesi gereken gücü gösterir. Yani söyle(1,2,3) monomiali eşler x1x22x33.

Tuples almak için kod:

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

lineer cebiri biliyorsanız regresyon yapmak kolay olmalıdır.

c = pseudo_inverse(X_poly)*y

misal. Genellemeye ilgi duyuyorsanız, düzenli doğrusal regresyon yapmak muhtemelen daha iyidir.


İçin Teşekkür Yuval CS alışverişidir yardım için.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.