我正在开发一个朴素的贝叶斯分类器,它采用了一系列用户配置文件数据,例如:
Name
City
State
School
Email Address
URLS { ... }最后一部分是一组urls,这些urls是google按名称搜索用户所收集的用户搜索结果。目标是确定搜索结果是否准确(即,它是关于人的)或不准确的。为此,在url数组中的每个链接内搜索简档数据的每个片段,并且如果简档数据(例如,城市)在页面上匹配。然后将结果表示为二进制文件的向量(即,1 0 0 0 1表示名称和电子邮件地址在url上匹配)。
我的问题围绕着创建最优训练集。如果一个人的配置文件包含不完整的信息(例如缺少电子邮件地址),那么在我的训练集中应该使用该配置文件吗?我应该只在包含完整培训信息的配置文件上进行培训吗?建立不同的训练集(每个训练集对应一个完整配置文件属性的组合)是否有意义,然后当我得到一个要测试的用户的url时,我会根据测试人员的记录中有多少用户配置文件来确定要使用哪个训练集?我该怎么做呢?
发布于 2014-01-30 09:07:48
发布于 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个特征的相关链接集。
这只有在你自己实现的情况下才会起作用,因为我不认为你可以用一个标准的包来做到这一点,但是考虑到它的实现是多么容易,我不会担心。
编辑:示例
假设你有以下特征和数据(它们是二进制的,因为你说这就是你拥有的,但我希望对分类或连续的扩展并不困难):
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} ]其中列表的每个元素都是一个实例,分类的目标变量是特殊的相关字段(请注意,其中一些实例缺少一些变量)。
然后,您希望对以下实例进行分类,缺少相关字段,因为这是您希望预测的:
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。
https://stackoverflow.com/questions/21443591
复制相似问题