import numpy as np
from sklearn.linear_model import LinearRegression
# sample data
x = np.random.default_rng(0).normal(size=(100,5)) # x is shape (100,5)
y = np.random.default_rng(0).normal(size=100)
# add some NaNs
x[[10,20], [1,3]] = np.nan
y[5] = np.nan
lr = LinearRegression().fit(x, y) # <---- ValueError
m = ~(np.isnan(x).any(axis=1) | np.isnan(y))
x_m, y_m = x[m], y[m] # remove NaNs
lr = LinearRegression().fit(x_m, y_m) # <---- OK
2条答案
按热度按时间qltillow1#
您可以使用遮罩移除NaN:
字符串
r7knjye22#
它与
linregress
无关,因为它只允许一维数组,但如果x
是二维的,并且您正在使用sklearn.linear_model.LinearRegression
/statsmodels.api.OLS
等构建线性回归模型,则有必要按行删除NaN。字符串
在上面的示例中,
any()
将2-D掩码缩减为1-D掩码,该掩码可用于删除行。一个工作示例可能如下所示。
型
使用
statsmodels
,它甚至更容易,因为它的模型(例如OLS
、Logit
、GLM
等)有一个关键字参数missing=
,可以用来隐藏NaN。型