Присвойте коэффициенты категориальным переменным в множественной линейной регрессии - PullRequest
0 голосов
/ 27 октября 2019

После запуска множественной линейной регрессии с использованием Sciki-learn мне нужно получить уравнение типа Y = a + bX1 + cX2 + dX2 + eX3 + fX4 + gX5, где b, c, d, e, f и g - коэффициентыкаждой из независимых переменных.

Я выполнил множественную линейную регрессию, используя Scikit-learn с 3 категориальными переменными (Cat V) и 2 непрерывными переменными (Cont V), как показано ниже

    Cat V 1    Cat V 2    Cat V 3    Cont V 1    Cont V 2
    A          C3         X2         208         3000
    B          C6         X4         256         4000
    B          C7         X5         275         2000
    C          C2         X1         508         3200

Я закодировал категориальные данные, используя преобразователь столбцов, в результате чего появилось гораздо больше столбцов, поскольку каждая категориальная переменная имеет более 10 различных категорий. Код, который я использовал для выполнения этого ниже:

    # Encoding categorical data
    mct = make_column_transformer((OneHotEncoder(drop='first'), [0, 1, 2]), remainder = 'passthrough')
    X = mct.fit_transform(X)

    # Splitting the dataset into the Training set and Test set
    X_train, X_test, y_train, y_test = train_test_split(X, y, 
    test_size=0.2, random_state = 0)

    # Fitting Multiple Linear Regression to the Training set
    regressor = LinearRegression()
    regressor.fit(X_train, y_train)

Я нашел коэффициенты каждой переменной (после кодирования), используя функцию [.coef_] со следующим кодом

    print(regressor.coef_)

Проблема в том, что это показывает коэффициенты переменных после разделения в кодировке, как показано ниже

    [ 1.80198679e-05 -5.55304459e-05  1.90462615e-03 -6.22320276e-05
  1.17184589e-03  .... -2.33744077e-03 -1.91538011e-04
  8.61626216e-11  3.73358813e-03]

Мне нужно найти 5 коэффициентов исходных 5 переменных. как

    Cat V 1     Coefficient 1
    Cat V 2     Coefficient 2
    Cat V 3     Coefficient 3
    Cont V 1    Coefficient 4
    Cont V 2    Coefficient 5

Возможно ли это сделать?

1 Ответ

0 голосов
/ 27 октября 2019

Линейная регрессия означает, что вы ищете f в y = f (x) или y = f (x1, x2 ..) для непрерывных переменных. Механизм не работает для категорий: он думает, что переменная, соответствующая категории, может плавно варьироваться между C2 и C3, C3 и C4 и т. Д. Когда вы создали несколько столбцов, возможно, дела пошли хуже: теперь у вас есть больше переменных, которые пытаютсяприспособить форму f () - понимаете, о чем я? Подумайте об одном столбце категорий: y = f (c);теперь у вас есть y = f (c1, c2 ...), каждый из которых непрерывно меняется и, таким образом, смешивает категории в небольших количествах (ваши коэффициенты, например, 10 ^ -5, 10 ^ -6 и т. д.).

В логистической регрессии используется af () с любопытной формой (сигмоидальной) с экстремальными значениями 0 и 1 и рампой между ними;он непрерывен между Cx и Cy, но имеет внезапный скачок. Это часто связано с этим типом проблемы. Нейронные сети как многослойный персептрон - не что иное, как регрессия, украшенная такими причудливыми именами, как AI, нейронные и т. Д. Решает ли это вашу проблему? Это зависит от периода. Но десятки статей были опубликованы с использованием такой регрессии, настройки параметров и алгоритмов «обучения» и пометки всего этого горячими тематическими словами.

Если - и только если - в идее есть некоторая логикапереходя из одной категории в другую (предположим, что объект может находиться в промежуточном состоянии), вы можете кодировать свои категории как числа. Может быть, C1 = 1, C2 = 2 и т. Д. В конце непрерывные значения могут указывать на переменную, приблизительно совпадающую с категорией - или ничего из этого, просто переменная была достаточно искажена, чтобы f () наилучшим образом соответствовалвыходы у1, у2 .. вы предоставили. Видите, здесь нет однозначного ответа. Любой способ, которым вы это делаете, является приблизительным.

Вместо использования линейной регрессии вы можете попытаться подогнать другую кривую (например, parabolic, sin ..), но это приносит кучу новых проблем. MLP (персептрон) является суммой сигмоидов и обладает хорошими аппроксимативными возможностями (по сравнению с параболой, грехом ...), отсюда и интерес к нему.

Затем есть SVM (Support Vector Machine), еще один зверьв сцене;та же самая базовая идея, но вы работаете с чем-то вроде y = f (g (x)) для некоторой сумасшедшей g (), которая облегчает поиск f ().

Еще один выстрел, такие как Tree Decision Learning Learning иАргументация по делу;это может быть выполнено с помощью инструментов, таких как RapidMiner с плагином weka или самим weka.

Простая линейная регрессия - сложная проблема - не из-за математики (которая может быть представлена ​​ужасными способами), а из-за тонкостейвокруг данных и как это представляет что-то в реальном мире. И ... у вас есть нечто более сложное, чем простая линейная регрессия (извините за плохие новости). Надеюсь, вы найдете приемлемое решение.

...