1

我有一些包含用户名及其各自性别的数据。例如,我的数据列表中的条目可能如下所示:{User: 'abc123', Gender: 'M'}

对于每个用户名,我还会收到一袋文本、图像和附加到每个用户名的位置,尽管用户不必至少附加一个文本、一个图像和一个位置。

对于每个数据源,我可以将它们转换为特征向量,然后将其输入分类器。然后我可以通过 10 倍交叉验证来确认分类器是否有效。

我想结合所有分类器的一些输出,以便我可以将它们输入元分类器,以提高准确性。

问题在于,由于数据不完整,我不能简单地将每个数据源生成的所有向量组合起来,并将它们输入一个分类器。一些用户可能没有图像数据,或者其他用户可能没有位置数据。

我目前的想法是使用每个分类器为每个用户获取一些类别概率集,例如从每个数据源的分类器中获取[男性:0.75,女性:0.25],将所有类别的值相乘,并使用最高的值作为程序的预测类别。

因此,如果每个数据源(文本、图像、位置)都有 1 个分类器,那么我总共有 3 个分类器。即使某些用户缺少一两个数据源,我仍然可以获得这些用户的类别概率集。

scikit-learn 是否有任何算法可以输出用户属于某种性别的概率权重,而不仅仅是对它们进行分类?

还是有其他满足我需求的算法?

感谢您浏览我的文字墙!

4

1 回答 1

1

我认为您可以在这里使用“朴素贝叶斯”分类器。在这种情况下,类(M 或 F)概率是项的乘积,每个可用特征集一个项,您只需忽略(从产品中排除)任何缺失的特征集。

这是理由。假设特征集是 X1、X2、X3。每一个都是特征向量。朴素贝叶斯假设是特征集在给定类的情况下是独立的,即 P(X1, X2, X3 | C) = P(X1 | C) P(X2 | C) P(X3 | C)。(请记住,这只是一个简化的假设——它可能是正确的,也可能不是!)当所有特征集都存在时,后验类概率就是 P(C | X1, X2, X3) = P(X1, X2, X3 | C) P(C) / Z = P(X1 | C) P(X2 | C) P(X3 | C) P(C) / Z,其中 Z 是归一化常数,它使 2 个类别的概率加起来为 1。因此,要使用此公式,您需要为每个特征集建立一个密度模型;如果这种方法对您有意义,我们可以讨论这些密度模型。

现在,如果缺少一个功能集(比如 X3)怎么办?这意味着我们需要计算 P(C | X1, X2) = P(X1, X2 | C) P(C) / Z。但请注意 P(X1, X2 | C) = 积分 P(X1, X2, X3 | C) dX3 = 朴素贝叶斯积分 P(X1 | C) P(X2 | C) P(X3 | C) dX3 = P(X1 | C) P(X2 | C) 积分 P(X3 | C) dX3假设。请注意,积分 P(X3 | C) dX3 = 1,因此 P(X1, X2 | C) = P(X1 | C) P(X2 | C),即朴素贝叶斯假设仅适用于观察到的特征集,因此您可以继续计算 P(C | X1, X2) = P(X1 | C) P(X2 | C) P(C) / Z,即当朴素贝叶斯模型中缺少某些特征集时,忽略它。

于 2015-03-22T04:39:12.260 回答