簡體   English   中英

將系數分配回多元線性回歸中的分類變量

[英]Assign coefficients back to categorical variables in Multiple Linear Regression

通過使用 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_] function 和以下代碼找到了每個變量的系數(編碼后)

    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

是否有可能做到這一點?

線性回歸意味着您在 y=f(x) 或 y=f(x1,x2..) 中搜索 f 以獲得連續變量。 該機制不適用於類別:它認為對應於類別的變量可以在 C2 和 C3、C3 和 C4 等之間平滑變化。當您創建多個列時,情況可能會變得更糟:現在您有更多變量試圖適應 f() 的形狀 - 明白我的意思嗎? 考慮一列類別,y=f(c); 現在您有了 y=f(c1,c2...),每個都在不斷變化,並且通過這種方式,將類別少量混合在一起(您的系數,如 10^-5、10^-6 等)。

邏輯回歸使用 af() 具有奇怪的形狀(sigmoid),極值 0 和 1 以及介於兩者之間的斜坡; 它在 Cx 和 Cy 之間是連續的,但有一個突然的跳躍。 它通常與此類問題有關。 作為多層感知器的神經網絡只不過是用 AI、神經等花哨名稱裝飾的回歸。它解決了你的問題嗎? 這取決於 - 期間。 但是通過運行這樣的回歸、調整參數和“學習”算法並用熱門話題標記整個事情,發表了數十篇論文。

如果 - 並且僅當 - 從一個類別轉換到另一個類別的想法中有一些邏輯(假設 object 可能處於中間狀態),您可以將您的類別編碼為數字。 也許 C1=1、C2=2 等等。最后,連續值可能表明一個變量與某個類別近似匹配 - 或者都不是,只是變量被扭曲到足以使 f() 最適合輸出 y1,y2.. 你提供的。 看,這里沒有確定的答案。 任何你做的方式,都是近似的。

您可能會嘗試擬合另一條曲線(例如拋物線、sin..),而不是使用線性回歸,但這會帶來一堆新問題。 MLP(感知器)是 sigmoid 的總和,具有很好的逼近能力(與拋物線、sin 相比),因此對它很感興趣。

然后是 SVM(支持向量機),場景中的另一只野獸; 相同的基本思想,但是您使用 y=f(g(x)) 來處理一些瘋狂的 g(),這使得找到 f() 變得容易。

另一個鏡頭,諸如樹決策學習和基於案例的推理; 這可以使用帶有 weka 插件的 RapidMiner 或 weka 本身的工具來執行。

簡單的線性回歸是一個復雜的問題 - 不是因為數學(可能以可怕的方式呈現),而是因為數據的微妙之處以及它如何代表現實世界中的某些事物。 而且..您有比簡單的線性回歸更困難的事情(抱歉,壞消息)。 希望你能找到一個可以接受的解決方案。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM