2012-11-19 2 views
-1
supportData = {('ELF'): 0.75, ('CAT'): 0.75, ('BAT', 'CAT', 'ELF'): 0.5, ('ARK', 'BAT'): 0.25, ('ARK', 'ELF'): 0.25, ('CAT', 'ELF'): 0.5, ('DOG'): 0.25, ('BAT', 'CAT'): 0.5, ('BAT', 'ELF'): 0.75, ('ARK'): 0.5, ('ARK', 'CAT'): 0.5, ('BAT'): 0.75} 

L = [('ARK'), ('CAT'), ('CAT'), ('ELF'),('ARK', 'CAT'), ('BAT', 'ELF'), ('BAT', 'CAT'), ('CAT', 'ELF'),('BAT', 'CAT', 'ELF')] 


for freqSet in L: 
    H = list(freqSet) 

    if len(H) == 1: 
     pass 
    else: 
     for conseq in H: 
      freqsetlist = list(freqSet) 
      freqsetlist.remove(conseq) 
      if len(freqsetlist) == 1: 
       conf = supportData[freqSet]/supportData[tuple(freqsetlist)[0]] 
       if conf >= 0.1: 
        print freqsetlist,'-->',conseq,'conf:',conf 
      else: 
       conf = supportData[freqSet]/supportData[tuple(freqsetlist)[:]] 
       if conf >= 0.1: 
        print freqsetlist,'-->',conseq,'conf:',conf 


KeyError: ('R','K') 

왜이 오류가 발생했는지 누군가가 지적 할 수 있습니까? len (freqsetlist)가 1보다 클 때 오류가 발생하는 것 같습니다. 3 요소가있는 튜플을 계산할 때입니다.연관 규칙의 신뢰도 계산

+0

[3 주 후 (http://stackoverflow.com/questions/13137232/confidence-calculation-in-association -rule), 아니, 우리는 여전히 그렇게 할 수 없다. –

답변

0

튜플에 요소가 하나만있는 경우에는 그 뒤에 콤마를 넣어야합니다. 따라서 튜플로 해석됩니다. 그리고 하나 (괄호) 요소로하지 : 모두 당신의 supportDataL 변수 이후

'CAT' == ('CAT') != ('CAT',) == tuple(['CAT']) 

현재 문자열과 튜플을 (당신은, 내가 생각하는 경우에만 튜플을하고 싶었) 혼합되어,이 코드 라인 인스턴스가 실행되지 않습니다.

if len(H) == 1: 
    pass 

업데이트 : 오류 메시지는 첫 번째 요소 인 ('ARK')을 가져 와서 첫 번째 요소 ('A')를 제거한 다음 결과를 튜플로 변환하여 을 생성합니다. supportData dict (당신이 언급 한 동일한 코드 줄에서)에서 그것을 찾으려고했을 때, 거기에 없었기 때문에, KeyError입니다. 내가 설명한 바와 같이

가 데이터를 수정하고,이 특정 오류를 피할됩니다

supportData = {('ELF',): 0.75, ('CAT',): 0.75, ('BAT', 'CAT', 'ELF'): 0.5, ('ARK', 'BAT'): 0.25, ('ARK', 'ELF'): 0.25, ('CAT', 'ELF'): 0.5, ('DOG',): 0.25, ('BAT', 'CAT'): 0.5, ('BAT', 'ELF'): 0.75, ('ARK',): 0.5, ('ARK', 'CAT'): 0.5, ('BAT',): 0.75} 

L = [('ARK',), ('CAT',), ('CAT',), ('ELF',),('ARK', 'CAT'), ('BAT', 'ELF'), ('BAT', 'CAT'), ('CAT', 'ELF'),('BAT', 'CAT', 'ELF')] 
+0

이 오류는 conf = supportData [freqSet]/supportData [tuple (freqsetlist) [:]]에 있습니다. 다른 모든 것은 잘 작동합니다. – user1785231

+0

이것은 제가 해답에서 설명한 문제의 결과입니다. 자세한 내용은 위의 업데이트를 확인하십시오. 명확하지 않은 경우에 대비하여 [this] (http://bugs.python.org/issue2817)도 참고하십시오. – mgibsonbr