-7

使用する変数の宣言は次のとおりです。

self.features = {}      #dictionary defined for storing the features and the values
self.featureNameList = []  #list to store the names and values of the features
self.featureCounts = collections.defaultdict(lambda: 1) #the counts of the features and labels
self.featureVectors = [] # 
self.labelCounts = collections.defaultdict(lambda: 0)            
def Classify(self):      #featureVector is a simple list like the ones that we use to train
    probabilityPerLabel = {}
    for label in self.labelCounts.keys():
        Prob = 0
        for featureValue in self.featureVectors:
            #print self.labelCounts[label]
            Prob+=self.featureCounts[[label][self.featureNameList[self.featureVectors.index(featureValue)]][featureValue]]/self.labelCounts[label]
            # Prob+= self.featureCounts(label, self.featureNameList[self.featureVectors.index(featureValue)], featureValue)/self.labelCounts[label]
        probabilityPerLabel[label] = (self.labelCounts[label]/sum(self.labelCounts.values())) * (Prob)
    print probabilityPerLabel
    return max(probabilityPerLabel, key = lambda classLabel: probabilityPerLabel[classLabel])

エラーは次の行で生成されます。

Prob+=self.featureCounts[[label][self.featureNameList[self.featureVectors.index(featureValue)]][featureValue]]/self.labelCounts[label]
4

1 に答える 1

2

あなたの問題はおそらく次のとおりです。

[label][self.featureNameList[self.featureVectors.index(featureValue)]

私には、長さ 1 のリストを作成しているように見えます。

[label]

そして、インデックスを介してそこから要素を取得しようとしています:

[self.featureNameList[self.featureVectors.index(featureValue)]

しかし、外側の大括弧内のものは文字列に評価されます。また、文字列をリストのインデックスに使用することはできません。

最終的に、これはほぼ間違いなくあなたがしようとしていたことではありませんが、エラーを説明していると思います。一般に、そのような非常に長くて紛らわしいワンライナーを避け、一時的な (しかし適切な名前の) 変数を使用して構成要素に分割することをお勧めします。これにより、コードが理解しやすくなり、作成と開発が容易になります。

于 2012-11-21T14:20:31.663 に答える