Python中的元组错误怎么处理?

1 投票
3 回答
1354 浏览
提问于 2025-04-17 14:26

我正在尝试学习一些机器学习(还有Python),目前在用k-最近邻算法进行分类。我遇到了这个错误(这是怎么回事?):

dataSetSize = dataSet.shape[0]
TypeError: 'tuple' object is not callable

检查是否可以调用:

>>> callable(group)
False
>>> callable(labels)
False
>>> g = group()

它们是假的,但我该怎么才能让它们变成真的呢?

数据:

>>> group
array([[ 1. ,  1.1],
       [ 1. ,  1. ],
       [ 0. ,  0. ],
       [ 0. ,  0.1]])
>>> labels
['A', 'A', 'B', 'B']

当我对我的组变量这样做时,我得到了这个:

group.shape[0]
4

我调用这个函数的方式:

>>> kNN.classify0([0, 0], group, labels, 3)



def classify0(inX, dataSet, labels, k):
     dataSetSize = dataSet.shape[0]
     diffMat = tile(inX, (dataSetSize,1)) - dataSet
     sqDiffMat = diffMat**2
     sqDistances = sqDiffMat.sum(axis=1)
     distances = sqDistances**0.5
     sortedDistIndices = distances.argsort()
     classCount = {}
     for i in range(k):
       voteIlabel = labels[sortedDistIndices[i]]
       classCount[voteIlabel] = classCount.get(voteIlabel, 0) + 1
     sortedClassCount = sorted(classCount.iteritems(), key=operator.itemgetter(1), reverse=True)
     return sortedClassCount[0][0]

3 个回答

-1

你没有正确地传递这个变量。

kNN.classify0([2,2], group, labels, 3)

组没有被设置

2

这句话的意思是,它不能被调用。如果你尝试从一个整数去调用某个东西,你也会遇到同样的错误。你很可能可以调用 dataSet[0].shape。不过具体情况很难说,因为我不知道 dataSet[0] 里面是什么。

1

可以使用内置的 callable 函数来检查一个对象是否可以被调用:
callable(object) => 如果这个对象可以被调用,就会返回 True

撰写回答