我正在尝试计算python中数据集中某个分割的信息增益,作为ID3算法实现的一部分。
原始数据集/空间是2D数组。我想我会创建一个新的3D数组,它将包含原始空间的分区,这样我就可以在完成分区时计算每个数组的熵。但我是python的新手,我无法弄清楚如何创建一个空的动态数组(列表?),我可以附加其他2D数组。
这就是我现在所拥有的,我已经尝试了多种声明分区[]的变体,并附加到它,包括使用numpy数组,但我无法弄清楚正确的语法或者它是否正确甚至可能:
def InformationGain(space, splitIndex, numPossibleValues=2):
info = 0
partitions = []
for i in range (0, numPossibleValues-1):
partitions.append([])
#split into partitions
for i in range (0,len(space)):
partitions[space[i][splitIndex]].append(space[i])
#get entropy for each partition
for i in range (0, numPossibleValues-1):
info += Entropy(partitions[i])*len(partitions[i])/len(space)
return (Entropy(space) - info)
a =[[1,0,0,1],
[1,0,0,1],
[0,0,0,1],
[0,0,0,1],
[0,0,0,1],
[0,0,0,1],
[0,0,0,1],
[0,0,0,1],]
print(InformationGain(a,1))
在那个版本中,我得到一个" IndexError:列表索引超出范围"在append()的行上。但它没有说明哪个列表索引超出范围。请帮助我走上正轨。