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}