html
精通多元线性回归:分类变量编码的全面指南
目录
理解回归模型中的分类数据
多元线性回归是一种统计技术,用于建模因变量与多个自变量之间的关系。虽然数值数据可以直接用于这些模型,但分类数据——表示特征或标签——需要经过转换才能有效利用。
为何编码至关重要
诸如“性别”或“地区”之类的分类变量是非数值的,需要转换为数值格式。适当的编码确保机器学习算法正确解释这些变量,而不会引入偏见或误导性的模式。
标签编码 vs. 独热编码
在处理分类变量时,主要采用两种编码技术:
- 标签编码:将每个类别转换为唯一的整数。适用于二元类别或顺序数据,其中顺序很重要。
- 独热编码:为每个类别创建二进制列,有效地消除了任何顺序关系,并允许模型独立处理每个类别。
选择合适的编码方法对于模型性能和可解释性至关重要。
使用 Python 和 Jupyter Notebook 的实操演示
让我们通过一个使用 Python 的scikit-learn库和Jupyter Notebook的实操示例,演示在多元线性回归模型中进行标签编码和独热编码的方法。
导入库
首先,导入数据处理、可视化和机器学习所需的库。
12345
import numpy as npimport pandas as pdimport matplotlib.pyplot as pltimport seaborn as snssns.set()
加载和探索数据集
我们将使用 Kaggle 的保险数据集,该数据集包含个人的年龄、性别、BMI、子女数量、是否吸烟、地区以及保险费用等信息。
123456789
# Load the datasetdata = pd.read_csv('S07_datasets_13720_18513_insurance.csv') # Separate features and target variableX = data.iloc[:,:-1]Y = data.iloc[:,-1] # Display the first few rowsdata.head()
输出:
age
sex
bmi
children
smoker
region
charges
19
female
27.900
0
yes
southwest
16884.92400
18
male
33.770
1
no
southeast
1725.55230
28
male
33.000
3
no
southeast
4449.46200
33
male
22.705
0
no
northwest
21984.47061
32
male
28.880
0
no
northwest
3866.85520
对分类特征进行标签编码
标签编码非常适用于二元分类变量。在此数据集中,“性别”和“吸烟者”是二元的,因此适合进行标签编码。
123456789
from sklearn import preprocessingle = preprocessing.LabelEncoder() # Encode 'sex' and 'smoker' columnsX['sex'] = le.fit_transform(X['sex'])X['smoker'] = le.fit_transform(X['smoker']) # Display the transformed featuresX
输出:
age
sex
bmi
children
smoker
region
19
0
27.900
0
1
southwest
18
1
33.770
1
0
southeast
28
1
33.000
3
0
southeast
33
1
22.705
0
0
northwest
32
1
28.880
0
0
northwest
...
...
...
...
...
...
61
0
29.070
0
1
northwest
对分类特征进行独热编码
对于具有两个以上类别的分类变量,独热编码是首选,以避免引入顺序关系。
123456789
from sklearn.preprocessing import OneHotEncoderfrom sklearn.compose import ColumnTransformer # Apply One-Hot Encoding to the 'region' column (index 5)columnTransformer = ColumnTransformer([('encoder', OneHotEncoder(), [5])], remainder='passthrough')X = columnTransformer.fit_transform(X) # Display the transformed featuresprint(X)
输出:
1234567
[[ 0. 0. 0. ... 27.9 0. 1. ] [ 0. 0. 1. ... 33.77 1. 0. ] [ 0. 0. 1. ... 33. 3. 0. ] ... [ 0. 0. 1. ... 36.85 0. 0. ] [ 0. 0. 0. ... 25.8 0. 0. ] [ 0. 1. 0. ... 29.07 0. 1. ]]
多元线性回归中的虚拟变量陷阱
在使用独热编码时,必须注意虚拟变量陷阱——这是由于冗余虚拟变量导致多重共线性出现的情况。这可能导致方差估计膨胀和模型系数不可靠。
理解陷阱
如果为具有三个类别的分类特征创建了三个虚拟变量(例如,西南、西北、中部),则在回归模型中包含所有三个变量会引入完全的多重共线性。这是因为其中一个变量可以从其他变量中精确预测,从而导致回归所需的矩阵逆运算失败。
解决方案
为避免虚拟变量陷阱,删除其中一个虚拟变量。这确保模型保持可识别性,并避免多重共线性。
123456
# Modify OneHotEncoder to drop one categorycolumnTransformer = ColumnTransformer( [("encoder", OneHotEncoder(drop='first'), [5])], remainder='passthrough')X = columnTransformer.fit_transform(X)
回归模型的预处理步骤
有效的预处理对于构建健壮的回归模型至关重要。以下是关键步骤的概述:
- 导入数据:使用 pandas 加载数据集。
- 处理缺失数据:通过插补或删除来处理任何缺失值。
- 训练-测试分割:将数据分为训练集和测试集,以评估模型性能。
- 特征选择:尽管像 scikit-learn 这样的库内部处理了这一点,但了解特征重要性可能会有帮助。
- 编码分类变量:如前所述,适当地使用标签编码或独热编码。
- 处理不平衡数据:在回归中通常不适用,除非需要特定的分布。
- 特征缩放:虽然在分类中通常是必需的,但在回归模型中可能是可选的。
注意:在回归模型中,特征缩放通常是可选的,因为缩放有时会模糊系数的可解释性。
评估模型
在预处理之后,就该构建和评估回归模型了。
构建线性模型
12345
from sklearn.linear_model import LinearRegression # Initialize and train the modelmodel = LinearRegression()model.fit(X_train, y_train)
进行预测
12
# Predict on the test sety_pred = model.predict(X_test)
比较实际值与预测值
123456
# Create a comparison DataFramecomparison = pd.DataFrame({ 'Actual': y_test, 'Predicted': y_pred})comparison.head()
输出:
Actual
Predicted
1646.4297
4383.6809
11353.2276
12885.0389
8798.5930
12589.2165
10381.4787
13286.2292
2103.0800
544.7283
使用 R² 分数进行评估
R² 分数衡量因变量中可由自变量预测的方差比例。
12345
from sklearn.metrics import r2_score # Calculate R² scorer2 = r2_score(y_test, y_pred)print(f"R² Score: {r2}")
输出:
1
R² Score: 0.7623311844057112
约 0.76 的 R² 分数表明,模型可以解释 76% 的保险费用变异性,这在许多应用中是一个相当可观的表现。
结论
掌握多元线性回归不仅仅是将模型拟合到数据上。使用标签编码和独热编码等技术正确地对分类变量进行编码,同时注意虚拟变量陷阱等陷阱,对于构建准确且可靠的模型至关重要。通过遵循预处理步骤并利用 Python 强大的库,您可以有效地应对回归分析的复杂性,并从数据中提取有意义的见解。
常见问题解答 (FAQs)
1. 标签编码和独热编码有什么区别?
标签编码将每个类别分配一个唯一的整数,保留了顺序关系,适用于二元或有序的分类变量。独热编码为每个类别创建二进制列,消除了任何顺序关系,防止算法假设任何固有顺序。
2. 为什么回归模型中的特征缩放是可选的?
与分类模型中某些算法的性能可能会因特征缩放而显著影响不同,回归模型通常更能优雅地处理不同尺度的特征。然而,在某些情况下,尤其是涉及正则化时,缩放仍然可能有益。
3. 如何避免虚拟变量陷阱?
为避免虚拟变量陷阱,在独热编码后从每组分类变量中删除一个虚拟变量。这可以消除多重共线性,确保模型更加稳定。
4. 回归模型中的 R² 分数意味着什么?
R² 分数衡量因变量中可由自变量预测的方差比例。较高的 R² 表明模型对数据的拟合更好。
5. 除了标签编码和独热编码,我还能使用其他编码技术吗?
是的,还有其他编码技术,如目标编码、频率编码和二进制编码,根据上下文和数据的性质,这些技术各有其优点。
踏上多元线性回归之旅,将为您提供强大的工具来分析和预测连续结果。通过掌握数据编码技术并理解回归模型的基本机制,您为深入且有影响力的数据驱动决策铺平了道路。