0

我正在尝试通过在 MATLAB 中编写自己的代码来实现朴素贝叶斯算法。我很困惑为连续属性之一选择什么分布。它的值如下:

         MovieAge :
         1
         2
         3
         4
         ..
         10
         1
         11
         2
         12
         1
         3
         13
         2
         1
         4
         14
         3
         2
         5
         15
         4
         3
         6
         16
         5
         4
         ....
         32
         9
         3
         15

请让我知道这些数据使用哪个分布?在我的测试集中,此属性将包含(有时)未包含在训练数据中的值。如何处理这个问题?谢谢 15

4

2 回答 2

1

就像@Ben 的回答一样,从直方图开始听起来不错。

我接受您的输入,直方图如下所示:

在此处输入图像描述

将数据保存到名为 的文本文件histdata中,每个值一行:

用于生成绘图的 Python 代码:

import matplotlib.pyplot as plt
data = []
for line in file('./histdata'):
    data.append(int(line))

plt.hist(data, bins=10)
plt.xlabel('Movie Age')
plt.ylabel('Counts')
plt.show()
于 2012-12-02T00:40:27.360 回答
0

假设这个变量取整数值,而不是连续的(基于示例),最简单的方法是直方图类型的方法:某个值的概率是它在训练数据中出现的次数的分数。考虑为高于某个数字的所有值(根据您的示例可能为 20 左右)的最终 bin。如果您遇到零计数问题,请在所有计数中添加一个(如果您倾向于这种方式,可以将其视为 Dirichlet 先验)。

至于参数形式,如果您更喜欢,泊松分布是一种可能。一个 qq 图,甚至是拟合优度测试,将表明这在您的情况下有多合适,但我怀疑您使用基于直方图的方法会更好。

于 2012-11-30T15:58:31.317 回答