我需要一个模拟模型来生成具有二进制响应变量的人工分类数据集。然后我想使用这个数据集检查各种分类器的性能。数据集可能具有任意数量的特征,即预测变量。
2 回答
这是一个坏主意,并且不会告诉您分类器的相对优点。
首先,我将解释如何生成数据,然后解释为什么这样做不会学到任何东西。你想要一个二元特征向量:有很多方法可以做到这一点,但让我们采取最简单的方法。独立伯努利变量的向量。这是生成任意数量实例的方法:
- 对于每个特征 i,从均匀分布中生成一个参数 theta_i,其中 0 < theta_i < 1
- 对于每个期望的实例 j,通过从均匀分布中再次采样来生成第 i 个特征 f_ji。如果您采样的数字小于 theta_i,则设置 f_ij = 1,否则将其设置为 0
这将允许您生成任意数量的实例。但是,问题是你知道数据的真实分布,所以你可以得到贝叶斯最优决策规则:这是理论上的最优分类器。在我上面给你的生成方案下,朴素贝叶斯分类器接近于最优(如果你使用实际的贝叶斯版本来整合参数,它将是最优分类器)。
这是否意味着朴素贝叶斯是最好的分类器?不,当然不是:通常,实际上我们对分类器在我们不知道数据真实分布的数据集上的性能感兴趣。事实上,判别建模的整个概念是基于这样一种思想,即当真实分布未知时,试图估计它所解决的问题比分类所需的更难。
总而言之,那么:非常仔细地考虑这是否是你想要做的。您不能模拟数据并使用它来决定哪个分类器是“最好的”,因为哪个最好取决于您用于模拟的配方。如果您想查看某些分类器表现不佳或奇怪的数据,您可以模拟此类数据以确认您的假设,但我认为这不是您想要做的。
编辑:
我意识到你实际上想要一个二元结果,而不是二元特征。你可以忽略我说的一些话。
二元响应来自逻辑回归模型:
日志(p/(1-p))= wx
其中 w 是您的权重向量,x 是您的特征向量。为了在给定观测 x 的情况下从该模型进行模拟,取点积 wx,应用逆 logit 函数:
logit^-1 = 1 / (1 + exp(-wx))
this gives you a number in the range 0-1. Then sample a response as a Bernoulli variable with parameter p, i.e. take a uniform number in [0,1] and return 1 if it's less than p, else return 0.
If you want to simulate the xs too, you can, but you're back into the realms of my discussion above. Also, note that since this is logistic regression sampling, this classifier will have an obvious advantage here, as I describe above...
您需要知道要生成数据的分布。很可能是正态分布。然后你需要将数据点标记到它的类。
正态分布: 在具有正态分布的数据集中生成随机值的示例算法?
高斯分布: C++:生成高斯分布
excel中的数据生成:http ://www.databison.com/index.php/how-to-generate-normal-distribution-sample-set-in-excel/