在多元线性回归中将系数分配回类别变量

时间:2019-10-27 11:01:18

标签: python scikit-learn linear-regression one-hot-encoding

通过使用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 :(得分:0)

线性回归意味着您要在y = f(x)或y = f(x1,x2 ..)中的f中搜索连续变量。该机制不适用于类别:它认为与类别相对应的变量可以在C2和C3,C3和C4等之间平滑变化。 当您创建多个列时,情况可能会变得更糟:现在您有更多的变量试图适应f()的形状-明白我的意思吗?想一想类别的单列,y = f(c);现在您有了y = f(c1,c2 ...),每个变量都不断变化,并以此方式将类别少量混合(您的系数为10 ^ -5、10 ^ -6等)。

Logistic回归使用f()具有奇异形状(S型),其极限值为0和1,并且介于两者之间有一个斜率;它在Cx和Cy之间是连续的,但是突然跳变。它通常与此类问题相关。作为多层感知器的神经网络不过是用花哨的名字(如AI,神经等)修饰的回归而已。它能解决您的问题吗?这取决于-时期。但是通过运行这样的回归,调整参数和“学习”算法并使用热门主题词标记整个内容,发表了数十篇论文。

如果-并且仅当-从一种类别过渡到另一种类别时存在某种逻辑(假设某个对象可能处于中间状态),则可以将类别编码为数字。也许C1 = 1,C2 = 2,依此类推。最后,连续值可能表示变量近似匹配类别,或者都不是,只是简单地将变量扭曲得足以使f()最适合。输出y1,y2 ..您提供的。看,这里没有确定的答案。无论采取哪种方式,都是近似的。

您可能会尝试拟合另一条曲线(例如,抛物线,正弦曲线),而不是使用线性回归,但这带来了许多新问题。 MLP(感知器)是S形的总和,具有很好的近似能力(与抛物线,sin ...相比),因此对此很感兴趣。

然后是场景中的另一只野兽SVM(支持向量机);相同的基本思想,但您可以使用y = f(g(x))处理一些疯狂的g(),从而很容易找到f()。

另一个镜头,例如树状决策学习和基于案例的推理;可以使用带有weka插件的RapidMiner工具或weka本身来执行此操作。

简单的线性回归是一个复杂的问题-不是因为数学(可以用可怕的方式表示),而是因为数据周围的微妙之处以及它如何表示现实世界中的事物。而且..您比简单的线性回归要难得多(对这个坏消息感到抱歉)。希望您找到可接受的解决方案。