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


9

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

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


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

Ответы:


8

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


1
Вы спрашиваете конкретно о многомерной логистической регрессии? Как вы хотите выполнить много классификаций одновременно? Многофакторная линейная регрессия, безусловно, реализуется. Логистическая регрессия должна быть оформлена иначе, чтобы использовать библиотеку sklearn.
— jamesmf

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

жаль, что вы не подчеркнули бы, как получить вектор полиномиального признака ...
— Буратино


2

sеQзнак равно(d1,,,,,dN)SUм(sеQ)знак равноΣязнак равно1N≤D(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 за помощь.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.