You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python线性回归拟合报错求助:ValueError: Input contains NaN

解决LinearRegression拟合时的ValueError: Input contains NaN问题

问题原因

sklearn的线性回归模型要求输入的特征矩阵X或目标变量Y不能包含缺失值(NaN),你的报错就是因为X或Y中存在未处理的缺失值。

步骤1:定位NaN位置

先确认缺失值出现在X还是Y中,用以下代码检查:

# 若X、Y是pandas DataFrame/Series
import pandas as pd
print("X中的缺失值数量:\n", X.isnull().sum())
print("Y中的缺失值数量:\n", Y.isnull().sum())

# 若X、Y是numpy数组
import numpy as np
print("X是否存在NaN:", np.isnan(X).any())
print("Y是否存在NaN:", np.isnan(Y).any())

步骤2:处理缺失值

以下是两种常用的解决方法:

方法一:删除含缺失值的样本

直接移除包含NaN的行,注意要同步删除X和Y中对应的样本,保证数据对齐:

# 用pandas合并后统一处理
data = pd.concat([X, Y], axis=1)
data_clean = data.dropna(axis=0)
X_clean = data_clean.iloc[:, :-1]  # 假设Y是最后一列
Y_clean = data_clean.iloc[:, -1]

# 训练模型
LR = LinearRegression(normalize=True)
LR.fit(X_clean, Y_clean)
y_predict = LR.predict(X_test)

方法二:填充缺失值(更推荐,避免丢失数据)

用均值、中位数或众数填充缺失值,也可以用sklearn的SimpleImputer工具:

# 方式1:用pandas直接填充
X.fillna(X.mean(), inplace=True)  # 用特征列的均值填充
Y.fillna(Y.mean(), inplace=True)  # 若Y有缺失值,用目标变量均值填充

# 方式2:用sklearn的SimpleImputer(适合后续构建机器学习流水线)
from sklearn.impute import SimpleImputer

imputer = SimpleImputer(strategy='mean')  # 可选策略:median、most_frequent
X_clean = imputer.fit_transform(X)
# 若Y是一维数组,需先转二维再填充
Y_clean = imputer.fit_transform(Y.values.reshape(-1, 1)).flatten()

# 训练模型
LR = LinearRegression(normalize=True)
LR.fit(X_clean, Y_clean)
y_predict = LR.predict(X_test)

关键注意事项

处理测试集X_test时,必须复用训练集的缺失值处理逻辑(比如用训练集计算的均值填充),避免数据泄露:

# 测试集处理示例(用训练集的imputer)
X_test_clean = imputer.transform(X_test)

内容的提问来源于stack exchange,提问作者UDAY Gupta

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 12:25:14