Hướng dẫn polynomial regression with categorical variables python - hồi quy đa thức với các biến phân loại python

Giả sử tôi có một bộ p=n_features, ở đây được đặt thành 3 biến độc lập, mỗi biến có n=n_samples, không có bất kỳ giá trị bị thiếu nào, xác định ma trận thiết kế của tôi $ x $ như sau:$X$ as follows:

$ X = \ Begin {Bmatrix} x_ {11} & \ Dots & X_ {1p} \\ \ Vdots & Đối với bộ dữ liệu của tôi với các tính năng

idx blue green red
0   1    0     0
1   0    1     0
2   0    1     0
3   0    0     1
0:
For my dataset with
idx blue green red
0   1    0     0
1   0    1     0
2   0    1     0
3   0    0     1
0 features:

$ X = \ left [\ vec {x_1}, \ \ vec {x_2}, \ \ vec {x_3} \ right] $

Các biến của các loại sau:

  • $ y $, biến phụ thuộc: Biến số liên tục, the dependent variable: continuous numeric variable
  • $ x_1 $ và $ x_2 $: Các biến số liên tục, với các phạm vi giá trị khác nhau yêu cầu tiêu chuẩn hóa/tỷ lệ do chính quy hóa L1/L2 and $x_2$: continuous numeric variables, with different value ranges requiring standardization/scaling due to l1/l2 regularization
  • $ x_3 $: Biến số phân loại với 3 cấp $ \ trái [0,1,2 \ right] $, yêu cầu mã hóa giả/một mã hóa nóng thành $ k-1 = 2 $ các biến giả nhị phân: categorical numeric variable with the 3 levels $\left[0,1,2\right]$, requiring dummy coding/one hot encoding into $k-1=2$ binary dummy variables

Tôi muốn đưa bộ dữ liệu này vào hồi quy đa thức ở mức độ thứ hai với các điều khoản tương tác (cũng được áp dụng chính quy), có nghĩa là mô hình tuyến tính của tôi phù hợp với dạng sau:polynomial regression of second degree with interaction terms (also regularization is applied), meaning my linear model to fit is of the following form:

$ y = C + C_1X_1 + C_2X_2 + C_3X_3 + C_4X_1X_2 + C_5X_1X_3 + C_6X_2X_3 + C_7X_1^2 + C_8X_2^2

Với chặn $ C $, các hệ số $ C_1 \ DOTS C_9 $ và lỗi $ \ vec {\ epsilon} $. Một phép biến đổi đa thức của ma trận thiết kế mang lại ma trận thiết kế đã biến đổi $ x^*$: $ x^*= \ left [\ vec {x_1^*}, \ \ vec {x_2^*}, \ \ \ vec {x_3^** }, \ \ vec {x_4^*}, \ \ vec {x_5^*}, \ \ vec {x_6^*}, \ \ vec {x_7^*}, \ \ vec {x_9^*} \ Right] $ với $ \ vec {x_1^*} = \ vec {x_1}, \ tứ giác .$c$, the coefficients $c_1\dots c_9$ and the error $\vec{\epsilon}$.
A polynomial transformation of the design matrix yields the transformed design matrix $X^*$:
$X^*=\left[\vec{x_1^*},\ \vec{x_2^*},\ \vec{x_3^*},\ \vec{x_4^*},\ \vec{x_5^*},\ \vec{x_6^*},\ \vec{x_7^*},\ \vec{x_8^*},\ \vec{x_9^*}\right]$
with $\vec{x_1^*}=\vec{x_1},\quad \dots,\quad \vec{x_4^*}=\vec{x_1}\vec{x_2},\quad \vec{x_5^*}=\vec{x_1}\vec{x_3},\quad \dots \vec{x_9^*}=\vec{x_3^2}$


Mô tả vấn đề

Bây giờ chúng tôi có các thuật ngữ tương tác giữa các biến liên tục và phân loại, cụ thể là $ C_5X_1X_3 $ và $ C_6X_2X_3 $. Mã hóa của biến phân loại vẫn chưa được thực hiện! (Các thuật ngữ đa thức hơn nếu được thực hiện trước khi chuyển đổi.) Tiêu chuẩn hóa cont. độc lập. Các biến vẫn cần phải được thực hiện! Có một mô hình chỉ bao gồm các biến liên tục, tôi sẽ chuẩn hóa sau poly. Chuyển đổi trong hầu hết các trường hợp. Trong trường hợp này, với các loại hỗn hợp độc lập. Các biến, tôi sẽ chuẩn hóa các biến liên tục và mã giả các biến phân loại trước khi chuyển đổi đa thức.interaction terms between continuous and categorical variables, namely $c_5x_1x_3$ and $c_6x_2x_3$.
Dummy coding of the categoric variable has not yet been performed! (More polynomial terms if done before transformation.)
Standardization of the cont. indep. variables still needs to be done!
Having a model only consisting of continuous variables, I'd standardize after poly. transformation in most cases. In this case, with mixed types of indep. variables, I'd standardize the continuous variables and dummy code the categorical variables before polynomial transformation.

Câu hỏi

  1. Tôi có nên chuẩn hóa và mã giả sau khi chuyển đổi đa thức không?
  2. Nếu có, làm thế nào để đối phó với các điều khoản tương tác của các biến phân loại và liên tục?
  3. Nếu có, các nhược điểm nghiêm trọng như thế nào được giới thiệu với mã hóa tiêu chuẩn hóa/giả trước poly. Chuyển.?
  4. Nói chung: Cách tránh các dấu hiệu xen kẽ (tạo ra các giá trị âm "ngẫu nhiên") bằng cách trừ trung bình và nhân cho các thuật ngữ tương tác (F.I. $ x_1x_2 $ trong đó cả $ x_1 $ và $ x_2 $ là dương trước khi tiêu chuẩn hóa, nhưng sau đó $ x_1 $ là phủ định)? Chỉ cần chia tỷ lệ theo độ lệch chuẩn $ \ sigma $ (và có thể là quy mô tối thiểu sau đó)?$x_1x_2$ where both $x_1$ and $x_2$ were positive before standardization, but afterwards $x_1$ is negative)? Just scale by the standard deviation $\sigma$ (and possibly min-max-scale afterwards)?

Có, bạn sẽ phải chuyển đổi mọi thứ thành số. Điều đó đòi hỏi suy nghĩ về những gì các thuộc tính này đại diện.

Thường có ba khả năng:

  1. Mã hóa một lần cho dữ liệu phân loại
  2. Số tùy ý cho dữ liệu thứ tự
  3. Sử dụng một cái gì đó giống như nhóm có nghĩa là cho dữ liệu phân loại (e. G. Giá trung bình cho các quận thành phố).

Bạn phải cẩn thận để không truyền thông tin bạn không có trong trường hợp ứng dụng.

Một mã hóa nóng

Nếu bạn có dữ liệu phân loại, bạn có thể tạo các biến giả với các giá trị 0/1 cho mỗi giá trị có thể.

Ví dụ.

idx color
0   blue
1   green
2   green
3   red

đến

idx blue green red
0   1    0     0
1   0    1     0
2   0    1     0
3   0    0     1

Điều này có thể dễ dàng được thực hiện với gấu trúc:

import pandas as pd

data = pd.DataFrame({'color': ['blue', 'green', 'green', 'red']})
print(pd.get_dummies(data))

sẽ cho kết quả:

   color_blue  color_green  color_red
0           1            0          0
1           0            1          0
2           0            1          0
3           0            0          1

Số cho dữ liệu thứ tự

Tạo một ánh xạ của các danh mục có thể sắp xếp của bạn, e. g. cũ <đã được cải tạo

Điều này cũng có thể với gấu trúc:

data = pd.DataFrame({'q': ['old', 'new', 'new', 'ren']})
data['q'] = data['q'].astype('category')
data['q'] = data['q'].cat.reorder_categories(['old', 'ren', 'new'], ordered=True)
data['q'] = data['q'].cat.codes
print(data['q'])

Result:

0    0
1    2
2    2
3    1
Name: q, dtype: int8

Sử dụng dữ liệu phân loại cho các hoạt động nhóm

Bạn có thể sử dụng giá trị trung bình cho từng loại trong quá khứ (các sự kiện đã biết).

Giả sử bạn có một khung dữ liệu với giá trung bình được biết đến cuối cùng cho các thành phố:

prices = pd.DataFrame({
    'city': ['A', 'A', 'A', 'B', 'B', 'C'],
    'price': [1, 1, 1, 2, 2, 3],
})
mean_price = prices.groupby('city').mean()
data = pd.DataFrame({'city': ['A', 'B', 'C', 'A', 'B', 'A']})

print(data.merge(mean_price, on='city', how='left'))

Result:

  city  price
0    A      1
1    B      2
2    C      3
3    A      1
4    B      2
5    A      1

Những mô hình hồi quy nào sử dụng các biến phân loại?

Hồi quy logistic mô tả mối quan hệ giữa một tập hợp các biến độc lập và biến phụ thuộc phân loại. describes the relationship between a set of independent variables and a categorical dependent variable.

Bạn có thể sử dụng các biến phân loại trong Python hồi quy logistic không?

Hồi quy logistic là một thuật toán phân loại máy học được sử dụng để dự đoán xác suất của biến phụ thuộc phân loại.used to predict the probability of a categorical dependent variable.

Bạn có thể chạy hồi quy tuyến tính với các biến phân loại không?

Có thể bao gồm các biến phân loại trong các mô hình hồi quy tuyến tính, mặc dù nó không đơn giản như bao gồm các biến liên tục.Tuy nhiên, có thể đưa ra những suy luận về sự khác biệt giữa các nhóm, cả về giá trị trung bình của kết quả và ảnh hưởng của các biến khác đối với kết quả., although it is not as straightforward as including continuous variables. However, it is possible to make inferences about differences between groups, both in mean values of the outcome and the effect of other variables on the outcome.

Chúng ta có thể sử dụng hồi quy đa thức để phân loại không?

Bạn có thể sử dụng phù hợp đa thức để thực hiện phân loại.Tuy nhiên, đối với phương pháp đề xuất của bạn, có một số vấn đề liên quan đến hồi quy đa thức mà logistic tránh.Thứ nhất, những gì bạn đang đề xuất về việc mã hóa các giá trị biến phụ thuộc từ ví dụ:y = (0,1, trên, 0) đến y = ( - 1,1,,, 1) không phải là mới.. However, for your proposed approach there are some issues regarding polynomial regression that logistic avoids. Firstly, what you are proposing regarding recoding of the dependent variable values from e.g. y=(0,1,…,0) to y=(−1,1,…,−1) is not new.