Багатовимірна лінійна регресія в Python


10

Я шукаю пакет Python, який реалізує багатоваріантну лінійну регресію.

(Термінологічна примітка: багатоваріантна регресія стосується випадку, коли існує більше однієї залежної змінної, тоді як множинна регресія стосується випадку, коли є одна залежна змінна, але більше однієї незалежної змінної.)


Мене теж цікавить це, але хочу просто векторний ознака після нелінійного перетворення. Тож у рядку буде сказати для моделі ступеня 2 з 2 змінними. [1,x1,x2,x1x2,x12,x22]
Буратіно

Відповіді:


9

Ви все ще можете використовувати sklearn.linear_model.LinearRegression . Просто зробіть вихід yматрицею з такою кількістю стовпців, скільки у вас залежних змінних. Якщо ви хочете чогось нелінійного , ви можете спробувати різні основні функції, використовувати функції поліномів або використовувати інший метод для регресії (наприклад, NN).


1
Ви конкретно запитуєте про багатоваріантну логістичну регресію? Як ви хочете виконати багато класифікацій одночасно? Безумовно реалізована багатоваріантна лінійна регресія. Для використання бібліотеки sklearn логістичну регресію доведеться по-різному оформляти.
jamesmf

Ну, вибачте, що я неправильно прочитав, я читав документацію sklearn.linear_model.LogisticRegression, думаючи про лінійну регресію. Я вилучу свій коментар, щоб не бентежити майбутніх читачів. Дякую!
Франк Дернонкурт

хотілося б, щоб ви підкреслили, як отримати векторний поліном ...
Піноккіо,


2

Просто для задоволення ви можете вирахувати функцію вручну шляхом формування кортежів така , що . Після того, як ви сформуєте ці кортежі, кожен запис вказує на потужність, яку слід підняти на поточну функцію. Так, скажімо, буде відображатись до одночлена .seq=(d1,...,dN)Sum(seq)=i=1ND(1,2,3)x1x22x33

Код для отримання кортежів:

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

тоді регрес повинен бути легко, якщо ви знаєте лінійну алгебру.

c = pseudo_inverse(X_poly)*y

приклад. Можливо, краще зробити регульовану лінійну регресію, хоча якщо вас цікавить узагальнення.


Подяки Ювалу - це обмін CS за допомогою.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.