Machine learning 朴素贝叶斯训练集优化

Machine learning 朴素贝叶斯训练集优化,machine-learning,bayesian,Machine Learning,Bayesian,我正在研究一个朴素贝叶斯分类器,它接受一组用户配置文件数据,例如: Name City State School Email Address URLS { ... } 最后一位是一组URL,这些URL是google按姓名搜索用户时收集的用户搜索结果。目的是确定搜索结果是准确的(即关于此人的)还是不准确的。为了做到这一点,在url数组中的每个链接中搜索每个配置文件数据段,如果该配置文件数据(例如城市)在页面上匹配,则为每个属性分配一个二进制值。然后将结果表示为二进制文件向量(即,1 0 1表示u

我正在研究一个朴素贝叶斯分类器,它接受一组用户配置文件数据,例如:

Name
City
State
School
Email Address
URLS { ... }
最后一位是一组URL,这些URL是google按姓名搜索用户时收集的用户搜索结果。目的是确定搜索结果是准确的(即关于此人的)还是不准确的。为了做到这一点,在url数组中的每个链接中搜索每个配置文件数据段,如果该配置文件数据(例如城市)在页面上匹配,则为每个属性分配一个二进制值。然后将结果表示为二进制文件向量(即,1 0 1表示url上的名称和电子邮件地址匹配)

我的问题围绕着创建最佳训练集。如果一个人的个人资料中有不完整的信息(例如缺少电子邮件地址),那么在我的培训集中,这应该是一个好的个人资料吗?我应该只在有完整培训信息的个人资料上进行培训吗?制作不同的培训集(每个完整的配置文件属性组合一个)是否有意义,然后当给我一个用户的url进行测试时,我会根据测试人员记录的用户配置文件数量来确定使用哪个培训集?我该怎么办

  • 一般来说,没有“应该”。无论您以何种方式创建模型,唯一重要的是它的性能,无论您如何创建它

  • 然而,您不太可能使用手工挑选的训练集创建合适的模型。简单的想法是,您应该在看起来与实时数据完全相同的数据上训练您的模型。实时数据是否会丢失值、配置文件不完整等?因此,您需要您的模型知道在这种情况下应该做什么,因此,这些概要文件应该在培训集中

  • 是的,当然,您可以创建一个由多个子模型组成的模型,但是您可能会遇到训练数据不足和过度拟合的问题。您必须创建多个好的模型才能使其工作,这更难。我想最好是把这个推理留给模型本身,而不是试图用手把它固定在正确的方向上,这就是机器学习的目的——省去你的麻烦。。。但在您的数据集上尝试之前,确实没有办法说。再说一次,在你的特殊情况下,任何有效的方法都是正确的


  • 因为你使用朴素贝叶斯作为你的模型(也仅仅是因为这个原因),你可以从独立性假设中获益,使用你能得到的每一个数据,而只考虑新样本中存在的数据。 您有功能f1…fn,其中一些功能可能存在于任何给定条目中,也可能不存在于任何给定条目中。后验概率p(相关| f|1…f|n)分解为:

    p(相关的| f|u 1…f|n)\p(相关的)*p(f|u 1 |相关的)*p(f|u 2 |相关的)。。。p(f|n |相关)

    p(无关的| f|1…f|n)是相似的。如果某个特定的f_i不存在,只需删除两个后验项中的项——假设它们是在相同的特征空间中定义的,则概率是可比的,并且可以用标准方式进行归一化。然后,您只需要估计项p(f|i | relevant):这只是i|th特征为1(可能平滑)的相关链接的分数。要估计此参数,只需使用定义了第i个特征的相关链接集

    这只有在您自己实现的情况下才能起作用,因为我认为您不能用标准包实现这一点,但考虑到实现起来有多容易,我不会担心

    编辑:一个例子

    假设您拥有以下功能和数据(它们是二进制的,因为您说这就是您拥有的,但是扩展到分类或连续并不困难,我希望):

    其中列表的每个元素都是一个实例,分类的目标变量是特殊的相关字段(请注意,其中一些实例缺少一些变量)

    然后,您需要对以下实例进行分类,缺少相关字段,因为这正是您希望预测的:

    t = {email: 0, name: 1}
    
    后验概率

    p(相关=1 | t)=[p(相关=1)*p(电子邮件=0 |相关=1)*p(姓名=1 |相关)]/证据(t)

    p(相关=0 | t)=[p(相关=0)*p(电子邮件=0 |相关=0)*p(姓名=1 |相关=0)]/证据(t)

    其中,证据(t)只是通过将上述两个分子求和得到的一个正态分布

    要获得表格p的每个参数(email=0 | RELEVANT=1),请查看RELEVANT=1且email=0的培训实例的分数:

    p(电子邮件=0 |相关=1)=计数(电子邮件=0,相关=1)/[计数(电子邮件=0,相关=1)+计数(电子邮件=1,相关=1)]

    请注意,这个术语只是忽略了未定义电子邮件的实例

    在本例中,相关性的后验概率变为零,因为计数(email=0,RELEVANT=1)为零。因此,我建议使用平滑估值器,在每个计数中加一,这样:


    p(email=0 | RELEVANT=1)=[count(email=0,RELEVANT=1)+1]/[count(email=0,RELEVANT=1)+count(email=1,RELEVANT=1)+2]。

    问题是,一天结束时,训练集看起来像0 1,原因有两个。这可能是因为实际上文件中有关于每个0属性的信息,但在搜索页面上找不到这些信息。或者可能是数据丢失,因此默认为0值。由于这两种情况之间没有区别,我们能得出什么结论?@JohnBaum无论你如何构建模型,对于无法区分的条目,该模型都会产生相同的结果。这是预期的行为。如果您想改进它,请向训练集中添加更多参数。如果我只处理具有完整数据的配置文件,这是否消除了训练集中不可区分条目的可能性?如果训练集的值为0,则只能表示在searc上找不到数据
    t = {email: 0, name: 1}