我试图解决一个有两个输出值的回归问题。输出值作为传入预订值的两个不同阈值,用于接受或拒绝预订。
这两个输出值在业务案例中是手动设置的,但这将在机器学习的帮助下自动完成。在业务案例中,输出值之一可以是Nan,那么所有的预订都将被接受。因此,如果一个输出值没有被填充,那么它对业务案例是有效的。
示例:
X_train = np.array([(1,1),(2,2),(3,3),(4,4)])
Y_train =np.array([(1,1),(2,2),(3,3),(4,np.nan)])
X_test = np.array([(5,5),(6,6),(7,7)])
Y_test = np.array([(5,5),(6,np.nan),(7,7)])
reg = MLPRegressor()
reg = reg.fit(X_train,Y_train)我的问题是,当我为输出Y_train/Y_test设置NaN值时,scikit-learn就会抛出一个错误。
ValueError: Input contains NaN, infinity or a value too large for dtype('float64').我不想用平均值或0来计算这些值,因为如上所述,缺少的值是业务用例的有效设置。
是否有可能用科学学习或一般机器学习来解决这样的问题?
编辑:未由业务设置的输出值不是直接存储为NaN,而是作为无穷大的as -9999999999存储。我用NaN代替了这些值,因为我认为这么高的值会扭曲结果。因此,如果我不替换任何内容,这些变量实际上会产生以下结果:
X_train = np.array([(1,1),(2,2),(3,3),(4,4)])
Y_train =np.array([(1,1),(2,2),(3,3),(4,-9999999999)])
X_test = np.array([(5,5),(6,6),(7,7)])
Y_test = np.array([(5,5),(6,-9999999999),(7,7)])与NaN相比,保留这些值更好吗?或者,这些值会显示结果并必须省略吗?
发布于 2020-08-23 14:11:38
即使您的模型能够在输出时生成NaNs,也无法判断是错误还是实际估计。我不会在训练中用NaNs。
这不仅是因为NaN不能用任何数字数据类型表示,而且还因为不可能在NaNs上执行算术:这意味着不能计算它的梯度,也不能计算与它相交的直线或斜率。简单地说,您的模型无法将它作为一个数值来学习,因为它不是一个数字。
https://stackoverflow.com/questions/63547785
复制相似问题