我有一个数据集,表示来自二进制类的实例。这里的问题是,只有肯定类的实例,而我没有否定类的实例。或者更确切地说,我想从更接近于肯定因素的否定因素中提取那些。
为了更具体一点,假设我们有一些数据,这些数据是从我们的商店购买的,并且在当前自愿性或以后自愿性的情况下要求获得会员卡的人。除了隐私问题(这只是一个例子),我们还有不同的属性,例如年龄,邮政编码等。
下面是我们的示例中的另一组客户,它们是没有申请该卡的客户。
我们想要的是找到与第一组中申请会员卡最相似的一个子集,以便我们可以向他们发送申请会员计划的要约。
这不完全是分类问题,因为我们试图从“负数”组中获取实例。
这不是完全集群,通常是无人监督的,因为我们已经知道一个集群(会员卡客户)。
我考虑过使用kNN。但是我真的不知道我在这里有什么选择。
我还想知道,如果可能的话,如何使用weka或另一个Java库以及是否应该规范所有属性来实现这一点。
答案 0 :(得分:2)
您可以使用异常检测算法。这些算法可以告诉您新客户是否属于获得会员卡的客户组(在这种情况下,这将是一个异常)。
有两个基本想法(来自我下面链接的文章):
您可以将正标记数据(有卡的客户)的特征向量转换为维数较小的向量空间(例如,使用PCA)。然后,您可以计算所得转换数据的概率分布,并确定新客户是否属于同一统计分布。您还可以计算新客户端到已转换数据的质心的距离,并使用分布的标准偏差确定是否仍然足够接近。
机器学习方法:您在具有卡数据的客户端上训练自动编码器网络。自动编码器的体系结构存在瓶颈。它将输入数据压缩为具有较低维的新特征向量,然后尝试从该压缩向量重构输入数据。如果训练正确完成,则与带有卡的客户端数据集相似的输入数据的重构误差应小于与与之相似的输入数据的重构误差(希望这些客户端不希望卡)。
这两种方法都需要先将属性标准化。
答案 1 :(得分:1)
请尝试使用一类支持向量机。
此方法尝试对边界进行建模,并将为您确定是否在类中指定一个点。可以将其视为简单的密度估计。主要好处是支持向量艺术将比训练数据小得多。
或者只是使用最近邻距离对用户进行排名。