如何用Python及scikit-learn替换线性回归因变量y的缺失值为均值?
我来帮你搞定这两个关于因变量y缺失值处理的问题,直接上干货:
问题1:使用scikit-learn(sklearn),如何处理线性回归中的因变量y的缺失数据?
处理因变量y的缺失值和处理特征X的逻辑是一致的,不过要注意y一般是一维数组,而SimpleImputer默认处理二维数据,所以我们需要先把y转换成二维格式,处理完再转回一维。这里是调整后的完整代码:
import numpy as np import pandas as pd from sklearn.impute import SimpleImputer # 加载数据集 dataset = pd.read_csv('Data-hw1.csv') X = dataset.iloc[:, :-1].values # 提取特征变量 y = dataset.iloc[:, -1].values # 提取因变量y # 处理y中的缺失值 # 先把一维的y转为二维数组(因为SimpleImputer要求输入是二维) y = y.reshape(-1, 1) imputer_y = SimpleImputer(missing_values=np.nan, strategy='mean') imputer_y.fit(y) y = imputer_y.transform(y).flatten() # 转回一维数组 # 如果你同时需要处理X的缺失值,保留原代码即可 imputer_x = SimpleImputer(missing_values=np.nan, strategy='mean') imputer_x.fit(X[:,1:3]) X[:,1:3] = imputer_x.transform(X[:,1:3]) print("处理后的特征X:") print(X) print("\n处理后的因变量y:") print(y)
关键步骤说明:
- 用
reshape(-1, 1)把一维的y转换成列向量(二维),满足SimpleImputer的输入要求 - 处理完成后用
flatten()转回一维数组,方便后续线性回归模型的输入
问题2:如何在Python中将因变量y中的缺失数据替换为均值?
这里有两种常用的方法,根据你的习惯选就行:
方法1:使用scikit-learn的SimpleImputer
和问题1的处理逻辑一致,核心就是用均值策略填充缺失值,单独提炼的代码如下:
import numpy as np from sklearn.impute import SimpleImputer # 假设y是包含缺失值的一维数组 y = np.array([2.5, np.nan, 3.2, 4.1, np.nan, 5.0]) # 转换为二维并填充均值 y_imputed = SimpleImputer(strategy='mean').fit_transform(y.reshape(-1, 1)).flatten() print("填充后的y:", y_imputed)
方法2:使用pandas的fillna(更简洁)
如果你的数据是用pandas的Series存储的,用fillna方法会更直观,不需要折腾数组维度:
import pandas as pd import numpy as np # 加载数据集后提取y为Series dataset = pd.read_csv('Data-hw1.csv') y = dataset.iloc[:, -1] # 用均值填充缺失值 y_imputed = y.fillna(y.mean()) print("填充后的y:") print(y_imputed)
内容的提问来源于stack exchange,提问作者kHL
相关产品推荐
相关产品推荐

