数据处理与编码:多元插补、KNN估计及分类变量编码
立即解锁
发布时间: 2025-09-04 01:01:46 阅读量: 4 订阅数: 8 AIGC 

### 数据处理与编码:多元插补、KNN 估计及分类变量编码
在数据处理和机器学习建模过程中,处理缺失数据和对分类变量进行编码是非常重要的步骤。本文将详细介绍多元插补、KNN 估计缺失数据以及分类变量的独热编码方法,并给出具体的操作步骤和代码示例。
#### 1. 多元插补(Multivariate Imputation by Chained Equations, MICE)
多元插补方法与单变量插补不同,它使用多个变量来估计缺失值。MICE 方法将每个有缺失值的变量建模为其余变量的函数,并使用该估计进行插补。
##### 1.1 MICE 步骤
1. 对每个有缺失数据的变量进行简单的单变量插补,例如中位数插补。
2. 选择一个特定的变量,例如 var_1,并将其缺失值设置回缺失状态。
3. 使用其余变量作为输入特征训练一个模型来预测 var_1。
4. 用新的估计值替换 var_1 的缺失值。
5. 对其余每个变量重复步骤 2 到 4。
当所有变量都基于其余变量进行建模后,一轮插补结束。通常会进行多次插补循环,一般为 10 次。其思想是,到循环结束时,插补参数的分布应该已经收敛,这意味着我们应该已经找到了缺失数据的最佳估计值。
##### 1.2 使用 scikit-learn 实现 MICE
```python
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn.linear_model import BayesianRidge
from sklearn.experimental import enable_iterative_imputer
from sklearn.impute import IterativeImputer
# 加载数据
variables = ["A2", "A3", "A8", "A11", "A14", "A15", "target"]
data = pd.read_csv("credit_approval_uci.csv", usecols=variables)
# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(
data.drop("target", axis=1),
data["target"],
test_size=0.3,
random_state=0,
)
# 创建 MICE 插补器
imputer = IterativeImputer(
estimator=BayesianRidge(),
max_iter=10,
random_state=0,
)
# 拟合训练集
imputer.fit(X_train)
# 填充训练集和测试集的缺失值
X_train = imputer.transform(X_train)
X_test = imputer.transform(X_test)
# 验证是否还有缺失数据
print(pd.DataFrame(X_train).isnull().sum())
```
#### 2. KNN 估计缺失数据
在 K 近邻(K-Nearest Neighbors, KNN)插补中,缺失值用其 k 个最近邻的均值替换。每个观测值的邻居通过距离(如欧几里得距离)来查找,替换值可以估计为邻居值的均值或加权均值,其中较远的邻居对替换值的影响较小。
##### 2.1 使用 scikit-learn 实现 KNN 插补
```python
import matplotlib.pyplot as plt
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.impute import KNNImputer
# 加载数据
variables = ["A2", "A3", "A8", "A11", "A14", "A15", "target"]
data = pd.read_csv("credit_approval_uci.csv", usecols=variables)
# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(
data.drop("target", axis=1),
data["target"],
test_size=0.3,
random_state=0,
)
# 设置插补器
imputer = KNNImputer(n_neighbors=5, weights="distance")
# 查找最近邻
imputer
```
0
0
复制全文
相关推荐









