Многомерная линейная регрессия в Python

9

Я ищу пакет Python, который реализует многомерную линейную регрессию.

(Терминологическое примечание: многомерная регрессия имеет дело со случаем, когда существует более одной зависимой переменной, в то время как множественная регрессия имеет дело со случаем, когда существует одна зависимая переменная, но более чем одна независимая переменная.)

Франк Дернонкур
источник
Я также заинтересован в этом, но хочу только вектор признаков после нелинейного преобразования. Таким образом, в строке будет скажем, для модели степени 2 с 2 переменными. [1,Икс1,Икс2,Икс1Икс2,Икс12,Икс22]
Буратино

Ответы:

8

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

jamesmf
источник
1
Вы спрашиваете конкретно о многомерной логистической регрессии? Как вы хотите выполнить много классификаций одновременно? Многофакторная линейная регрессия, безусловно, реализуется. Логистическая регрессия должна быть оформлена иначе, чтобы использовать библиотеку sklearn.
jamesmf
Ой, извините, что неправильно прочитал, я читал документацию sklearn.linear_model.LogisticRegression, думая о линейной регрессии. Я удалю свой комментарий, чтобы не запутывать будущих читателей. Спасибо!
Франк Дернонкур
жаль, что вы не подчеркнули бы, как получить вектор полиномиального признака ...
Буратино
2

sеQзнак равно(d1,,,,,dN)SUм(sеQ)знак равноΣязнак равно1ND(1,2,3)Икс1Икс22Икс33

Код для получения кортежей:

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 за помощь.

Пиноккио
источник