簡體   English   中英

具有分類特征的線性回歸分析

[英]Linear regression analysis with categorical feature

回歸算法可以很好地表示為數字。 很清楚如何對包含數字的數據進行回歸並預測 output。但是我需要對包含分類特征的數據進行回歸分析。 我有一個 csv 文件,其中包含兩列 install-id 和 page-name 都是 object 類型。 我需要將 install-id 作為輸入,而 page-name 應該被預測為 output。下面是我的代碼。 請幫助我。

import pandas as pd
data = pd.read_csv("/Users/kashifjilani/Downloads/csv/newjsoncontent.csv")
X = data["install-id"]
Y = data["endPoint"]
X = pd.get_dummies(data=X, drop_first=True)
from sklearn import linear_model
from sklearn.model_selection import train_test_split
X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size = .20, random_state = 40)
regr = linear_model.LinearRegression()
regr.fit(X_train, Y_train)
predicted = regr.predict(X_test)

對於演示,假設您有這個 dataframe,其中IQGender是輸入特征。 目標變量是Test Score

|   Student |   IQ | Gender   |   Test Score |
|----------:|-----:|:---------|-------------:|
|         1 |  125 | Male     |           93 |
|         2 |  120 | Female   |           86 |
|         3 |  115 | Male     |           96 |
|         4 |  110 | Female   |           81 |
|         5 |  105 | Male     |           92 |
|         6 |  100 | Female   |           75 |
|         7 |   95 | Male     |           84 |
|         8 |   90 | Female   |           77 |
|         9 |   85 | Male     |           73 |
|        10 |   80 | Female   |           74 |

在這里, IQ是數字, Gender是分類特征。 在預處理步驟中,我們將在數值特征上應用簡單輸入器,在分類特征上應用單熱編碼器。 您可以為此使用sklearn's Pipeline & ColumnTransformer功能。 然后您可以使用您選擇的 model 輕松訓練和預測。

import pandas as pd
from sklearn.compose import ColumnTransformer
from sklearn.model_selection import train_test_split
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import OneHotEncoder
from sklearn.impute import SimpleImputer
from sklearn import linear_model

# defining the data
d = {
    "Student": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
    "IQ": [125, 120, 115, 110, 105, 100, 95, 90, 85, 80,],
    "Gender": [
        "Male",
        "Female",
        "Male",
        "Female",
        "Male",
        "Female",
        "Male",
        "Female",
        "Male",
        "Female",
    ],
    "Test Score": [93, 86, 96, 81, 92, 75, 84, 77, 73, 74],
}

# converting into pandas dataframe
df = pd.DataFrame(d)

# setting the student id as index to keep track
df = df.set_index("Student")

# column transformation
categorical_columns = ["Gender"]
numerical_columns = ["IQ"]

# determine X
X = df[categorical_columns + numerical_columns]
y = df["Test Score"]

# train test split
X_train, X_test, y_train, y_test = train_test_split(
    X, y, random_state=42, test_size=0.3
)

# categorical pipeline
categorical_pipe = Pipeline([("onehot", OneHotEncoder(handle_unknown="ignore"))])

# numerical pipeline
numerical_pipe = Pipeline([("imputer", SimpleImputer(strategy="mean")),])

# aggregating both the pipeline
preprocessing = ColumnTransformer(
    [
        ("cat", categorical_pipe, categorical_columns),
        ("num", numerical_pipe, numerical_columns),
    ]
)


rf = Pipeline(
    [("preprocess", preprocessing), ("classifier", linear_model.LinearRegression())]
)

# train
rf.fit(X_train, y_train)

# predict
predict = rf.predict(X_test)

由此可見,

>> array([84.48275862, 84.55172414, 79.13793103])

我認為在這里我們必須記住回歸 model 的假設。因為我們試圖預測/識別自變量 (X) 和因變量 (y) 之間的趨勢。 - 線性可分離 - 自變量具有受限的多重共線性。 - 同方差性

正如您的示例中給出的那樣,您只有一個自變量,並且總結 X 和 y 之間的趨勢都應該是線性的。

舉個例子,假設你給了一個任務來預測旅行的總旅行時間。 你的數據集有以下變量 IV - Miles Traveled、NoOfDeliveries、GasPrice 和 City DV - Traveltime

在這里您可以看到它是數值(行駛里程、GasPrice)+ 分類變量(NoOfDeliveries、City)的混合體。 現在您必須將這些分類變量編碼為數字(以便進行回歸分析)並預測 output。

為了將分類變量編碼為二進制格式,我們在這里使用 sklearn 庫中的 2 個對象——LabelEncoder 和 OneHotEncoder。

請點擊以下鏈接了解更多關於如何處理分類變量的信息

請找到以下鏈接以了解有關虛擬變量 Trap的更多信息

請找到以下鏈接以了解有關構建簡單線性回歸的更多信息 model

暫無
暫無

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

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