如何通过简单的模拟模型生成用于分类分析的具有二元响应和4-5个特征的人工数据集?

我需要一个模拟模型来生成一个具有二元响应变量的人工分类数据集。然后我想使用这个数据集来检查各种分类器的性能。数据集可以有任意数量的特征,即预测变量。


回答:

这是一个糟糕的主意,并且不会告诉你关于分类器相对优劣的任何信息。

首先,我将解释如何生成数据,然后解释为什么这样做不会让你学到任何东西。你想要一个二元特征向量:有很多方法可以做到这一点,但我们采用最简单的方法。一个独立的伯努利变量向量。这里是生成任意数量实例的配方:

  1. 对于每个特征i,从均匀分布中生成一个参数theta_i,其中0 < theta_i < 1
  2. 对于每个所需实例j,通过再次从均匀分布中抽样生成第i个特征f_ji。如果你抽样的数字小于theta_i,则设置f_ij = 1,否则设置为0

这将允许你生成任意数量的实例。然而,问题在于你知道数据的真实分布,因此你可以得到贝叶斯最优决策规则:这是理论上最优的分类器。在我上面给出的生成方案下,朴素贝叶斯分类器接近最优(如果你使用了实际的贝叶斯版本,其中你整合了参数,它将是最优的分类器)。

这是否意味着朴素贝叶斯是最好的分类器?当然不是:通常情况下,我们关注的是在我们不知道数据真实分布的数据集上的分类器性能。实际上,判别模型的整个概念是基于当真实分布未知时,试图估计它是在解决一个比分类所需更难的问题的想法。

总之:请仔细考虑这是否是你想做的事情。你不能通过模拟数据来决定哪个分类器是“最好的”,因为哪个是最好的将取决于你用于模拟的配方。如果你想查看某些分类器在某些类型的数据上表现不佳或奇怪,你可以模拟这种类型的数据来确认你的假设,但我认为这不是你想要做的。

编辑:

我意识到你实际上想要的是二元结果,而不是二元特征。你可以忽略我所说的一些内容。

二元响应来自逻辑回归模型:

log( p/(1-p) ) = w.x

其中w是你的权重向量,x是你的特征向量。给定观察到的x,从这个模型中模拟,取w.x的点积,应用逆逻辑函数:

logit^-1 = 1 / (1 + exp(-w.x))

这会给你一个在0-1范围内的数字。然后以参数p的伯努利变量采样响应,即取[0,1]范围内的均匀数,如果它小于p,则返回1,否则返回0。

如果你也想模拟xs,你可以,但你又回到了我上面讨论的领域。另外,请注意,由于这是逻辑回归抽样,这里这个分类器将有一个明显的优势,正如我上面所描述的…

Related Posts

Keras Dense层输入未被展平

这是我的测试代码: from keras import…

无法将分类变量输入随机森林

我有10个分类变量和3个数值变量。我在分割后直接将它们…

如何在Keras中对每个输出应用Sigmoid函数?

这是我代码的一部分。 model = Sequenti…

如何选择类概率的最佳阈值?

我的神经网络输出是一个用于多标签分类的预测类概率表: …

在Keras中使用深度学习得到不同的结果

我按照一个教程使用Keras中的深度神经网络进行文本分…

‘MatMul’操作的输入’b’类型为float32,与参数’a’的类型float64不匹配

我写了一个简单的TensorFlow代码,但不断遇到T…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注