使用不完整数据按人口统计分类用户

时间:2015-03-21 13:18:56

标签: python statistics scipy scikit-learn scikits

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

对于每个用户名,我还会收到一包附在其中的文字,图片和位置,但用户不必至少有一个文字,一个图像和一个附加位置。

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

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

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

我目前的想法是使用每个分类器为每个用户获取一些类别概率集,如[Male:0.75,Female:0.25],来自每个数据源的分类器,乘以所有类别的值,并使用最高值作为该计划的预测类别。

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

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

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

感谢您浏览我的文字墙!

1 个答案:

答案 0 :(得分: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类概率的归一化常数因此,要使用此配方,您需要每个功能集的密度模型;如果这种方法对你有意义,我们可以谈谈那些密度模型。

现在如果缺少一个功能集(让我们说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,即当一个朴素的贝叶斯模型中缺少某些特征集时,只是忽略它。