我有一个回归数据集,其中大约95%的目标变量是零(其他5%在1到30之间(,我正在尝试设计一个Tensorflow模型来对这些数据进行建模。我正在考虑实现一个结合分类器和回归器的模型(检查分类器子模型的输出,如果它小于阈值,则将其传递给回归子模型(。我的直觉是,这应该使用功能性的API来构建,但我找不到有用的资源。有什么想法吗?
以下是生成我用来复制问题的数据的代码:
n = 10000
zero_percentage = 0.95
zeros = np.zeros(round(n * zero_percentage))
non_zeros = np.random.randint(1,30,size=round(n * (1- zero_percentage)))
y = np.concatenate((zeros,non_zeros))
np.random.shuffle(y)
a = 50
b = 10
x = np.array([np.random.randint(31,60) if element == 0 else (element - b) / a for element in y])
y_classification = np.array([0 if element == 0 else 1 for element in y])
注:我用概率模型(泊松回归和离散逻辑混合分布的回归(进行了实验,它们提供了良好的结果,但训练是不稳定的(损失经常发散(。
与其试图找到一些启发式方法来平衡零值和其他值之间的训练,不如尝试一些可以更好地处理不平衡训练集的输入预处理方法(通常是在运行模型之前映射到另一个空间,然后对结果进行反运算(;例如嵌入层。或者,将值归一化到一个小范围(如[-1,1](,并在对数据评估模型之前应用激活函数。