首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >朴素贝叶斯训练集优化

朴素贝叶斯训练集优化
EN

Stack Overflow用户
提问于 2014-01-30 06:01:08
回答 2查看 190关注 0票数 0

我正在开发一个朴素的贝叶斯分类器,它采用了一系列用户配置文件数据,例如:

代码语言:javascript
复制
Name
City
State
School
Email Address
URLS { ... }

最后一部分是一组urls,这些urls是google按名称搜索用户所收集的用户搜索结果。目标是确定搜索结果是否准确(即,它是关于人的)或不准确的。为此,在url数组中的每个链接内搜索简档数据的每个片段,并且如果简档数据(例如,城市)在页面上匹配。然后将结果表示为二进制文件的向量(即,1 0 0 0 1表示名称和电子邮件地址在url上匹配)。

我的问题围绕着创建最优训练集。如果一个人的配置文件包含不完整的信息(例如缺少电子邮件地址),那么在我的训练集中应该使用该配置文件吗?我应该只在包含完整培训信息的配置文件上进行培训吗?建立不同的训练集(每个训练集对应一个完整配置文件属性的组合)是否有意义,然后当我得到一个要测试的用户的url时,我会根据测试人员的记录中有多少用户配置文件来确定要使用哪个训练集?我该怎么做呢?

EN

回答 2

Stack Overflow用户

发布于 2014-01-30 09:07:48

  1. 一般来说,没有“应该”这个词。无论你用哪种方法创建一个模型,唯一重要的是它的性能,不管你是如何创建它的。
  2. 然而,你不太可能用自己挑选的训练集创建一个合适的模型。简单的想法是,你应该在看起来完全像实时数据的数据上训练你的模型。实时数据是否会有缺失值、不完整的配置文件等?因此,你需要你的模型知道在这种情况下应该做什么,因此,这样的配置文件应该在训练集中。
  3. 是的,当然,你可以建立一个由几个子模型组成的模型,但是你可能会遇到训练数据不足和过度拟合的问题。你必须创建多个好的模型才能让它工作,这是很难的。我想把这个推理留给模型本身会更好,而不是试图把它放在正确的方向上,这就是机器学习的目的--省去你的麻烦……但在你的数据集上尝试它之前,真的没有办法说。同样,在您的特定情况下有效的都是正确的。
票数 0
EN

Stack Overflow用户

发布于 2014-01-30 18:57:49

因为您使用朴素贝叶斯作为您的模型(也正是因为如此),您可以从独立性假设中受益,从而使用您拥有的每一块数据,并且只考虑新样本中存在的那些数据。

您有一些特性f1...fn,其中一些可能会出现在任何给定的条目中,也可能不会出现。后验概率p(相关| f_1 ...f_n )分解为:

p(相关| f_1 ...f_n ) \propto p(相关)* p( f_1 |相关)* p( f_2 |相关) ...p(f_n |相关)

p(不相关| f_1...f_n )类似。如果某个特定的f_i不存在,只需删除两个后端的术语-假设它们是在相同的特征空间上定义的,则概率是可比较的,并且可以以标准方式进行标准化。然后,您只需估计术语p( f_i | smoothed ):这只是i_th特征为1(可能经过平滑)的相关链接的分数。要估计此参数,只需使用定义第i个特征的相关链接集。

这只有在你自己实现的情况下才会起作用,因为我不认为你可以用一个标准的包来做到这一点,但是考虑到它的实现是多么容易,我不会担心。

编辑:示例

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

代码语言:javascript
复制
D = [ {email: 1, city: 1, name: 1, RELEVANT: 1},
      {city: 1, name: 1, RELEVANT: 0},
      {city: 0, email: 0, RELEVANT: 0}
      {name: 1, city: 0, email: 1, RELEVANT: 1} ]

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

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

代码语言:javascript
复制
t = {email: 0, name: 1}

后验概率

p(RELEVANT=1 | t) = p(RELEVANT=1) * p(email=0|RELEVANT=1) * p(name=1|RELEVANT) /证据(T)

p(RELEVANT=0 | t) = p(RELEVANT=0) * p(email=0|RELEVANT=0) * p(name=1|RELEVANT=0) /证据(T)

其中证据(T)只是通过将上面的两个分子相加而获得的归一化。

要获得形式p(email=0|RELEVANT=1)的每个参数,请查看其中RELEVANT=1具有email=0的训练实例的分数:

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

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

在这种情况下,相关性的后验概率为零,因为计数(email=0,RELEVANT=1)为零。因此,我建议使用平滑估计器,即每次计数都加1,这样:

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21443591

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档