python天真贝叶斯分类器错误

时间:2013-04-25 19:53:19

标签: python classification

我正在尝试构建一个朴素的贝叶斯分类器,它从文本文件读取数据并输出到文本文件,我的代码是一个错误,但是返回是在函数之外但是我看不出错误

# compute the relative frequencies of the
# 2nd explanatory variable taking on the
# values 'A', 'B' and 'C'
# and return a dictionary with these values
def getCatProbs(self, data):
  a_count = 0
  b_count = 0
  c_count = 0
  probs = {}
for row in data:
  if row[1] == ">50K":
     a_count = a_count + 1
  if row[1] == "<=50K":
     b_count = b_count + 1
  else:
     c_count = c_count + 1

     probs[">50K"] = float(a_count)/len(data)
     probs["<=50K"] = float(b_count)/len(data)
     probs['C'] = float(c_count)/len(data)

  return probs

3 个答案:

答案 0 :(得分:2)

在python中,缩进很重要。例如,函数getCatProbs的代码定义在行probs = {}之后完成,这显然将return留在了函数体之外。

以下是适当缩进的代码:

# compute the relative frequencies of the
# 2nd explanatory variable taking on the
# values 'A', 'B' and 'C'
# and return a dictionary with these values
def getCatProbs(self, data):
    a_count = 0
    b_count = 0
    c_count = 0
    probs = {}
    for row in data:
        if row[1] == ">50K":
            a_count = a_count + 1
        if row[1] == "<=50K":
            b_count = b_count + 1
        else:
            c_count = c_count + 1

    probs[">50K"] = float(a_count)/len(data)
    probs["<=50K"] = float(b_count)/len(data)
    probs['C'] = float(c_count)/len(data)

    return probs

答案 1 :(得分:1)

你的回归确实超出了你的职能范围。整个for循环不在您的函数中。我认为你的意思是将for循环缩进一个级别,以便它在函数内部。

答案 2 :(得分:0)

格式在Python中很有意义。

在我看来,你的缩进并不一致。 for循环和后续行似乎已关闭。

我建议使用一个好的IDE。 JetBrains是市场上最好的产品。试试PyCharm。这会使犯这样的错误变得更加困难。