관련 규칙 - Python 기반 Apriori 알고리즘 구현
핵심 개념:
실현 절차:
주요 사상: 사무 데이터 집중 에 존재 하 는 가장 빈번 한 항목 집합 을 찾아내 고 얻 은 최대 빈번 한 항목 집합 과 미리 설 정 된 최소 신뢰 도 한도 값 을 이용 하여 강 한 관련 규칙 을 생 성 한다.
Apriori 의 성질: 빈번 한 항목 집합 이 아 닌 모든 빈 부분 집합 도 빈번 한 항목 집합 이 어야 합 니 다.
단계:
연결 단계: K 항목 집합 을 찾 습 니 다.
가지치기: 연결 단계 에 이 어 후보 항목 Ck 를 만 드 는 과정 에서 검색 공간 을 줄 이 는 목적 을 달성 합 니 다.
Ck 는 L (k - 1) 과 LK 가 연결 되 어 생 성 되 기 때문에 Apriori 의 성질 에 따라 빈번 한 항목 집합 이 아 닌 모든 빈 부분 집합 도 빈번 한 항목 집합 이 어야 하기 때문에 이 성질 에 만족 하지 않 는 항목 집합 은 CK 에 존재 하지 않 고 만족 하지 않 는 항목 집합 을 삭제 합 니 다.
2. 빈번 한 항목 집합 에서 강 한 관련 규칙 이 생 긴 다. 과정 1 은 예 정 된 최소 지지 도 한도 값 을 초과 하지 않 은 항목 집합 을 제거 했다.이 규칙 들 이 예 정 된 최소 신뢰 도 한도 값 을 충족 시 키 면 강력 한 관련 규칙 을 발굴 할 수 있다.
예시:
Apriori 알고리즘:
#-*- coding: utf-8 -*-
from __future__ import print_function #Python3.+
import pandas as pd
# , L_{k-1} C_k
def connect_string(x, ms):
x = list(map(lambda i:sorted(i.split(ms)), x))
l = len(x[0])
r = []
for i in range(len(x)):
for j in range(i,len(x)):
if x[i][:l-1] == x[j][:l-1] and x[i][l-1] != x[j][l-1]:
r.append(x[i][:l-1]+sorted([x[j][l-1],x[i][l-1]]))
return r
#
def find_rule(d, support, confidence, ms = u'--'):
result = pd.DataFrame(index=['support', 'confidence']) #
support_series = 1.0*d.sum()/len(d) # (C1)
column = list(support_series[support_series > support].index) # ( , L1)
k = 0
while len(column) > 1:
k = k+1
print(u'
%s ...' %k)
column = connect_string(column, ms)
print(u' :%s...' %len(column))
sf = lambda i: d[i].prod(axis=1, numeric_only = True) # ( 1, [ ‘0 ’,‘1 ’ , 1, ])
# , 、 。 , 。
d_2 = pd.DataFrame(list(map(sf,column)), index = [ms.join(i) for i in column]).T
support_series_2 = 1.0*d_2[[ms.join(i) for i in column]].sum()/len(d) # (C2)
column = list(support_series_2[support_series_2 > support].index) # , , L2
support_series = support_series.append(support_series_2) # , (L1+L2)
column2 = []
for i in column: # , {A,B,C} A+B-->C B+C-->A C+A-->B?
i = i.split(ms)
for j in range(len(i)):
column2.append(i[:j]+i[j+1:]+i[j:j+1])
cofidence_series = pd.Series(index=[ms.join(i) for i in column2]) # ,
for i in column2: #
cofidence_series[ms.join(i)] = support_series[ms.join(sorted(i))]/support_series[ms.join(i[:len(i)-1])]
for i in cofidence_series[cofidence_series > confidence].index: #
result[i] = 0.0
result[i]['confidence'] = cofidence_series[i]
result[i]['support'] = support_series[ms.join(sorted(i.split(ms)))]
result = result.T.sort_values(['confidence','support'], ascending = False) # , ( ‘confidence’ , ‘support’ )
print(u'
:')
print(result)
return result
파일 읽 기, 계산 실행, 출력 결과:
#-*- coding: utf-8 -*-
# Apriori
from __future__ import print_function
import pandas as pd
from apriori import * # apriori ( apriori , ‘apriori.py’)
inputfile = '../data/menu_orders.xls'
outputfile = '../tmp/apriori_rules.xls' #
data = pd.read_excel(inputfile, header = None)
print(u'
0-1 ...')
ct = lambda x : pd.Series(1, index = x[pd.notnull(x)]) # 0-1 ( 1, 。0- ,1- )
b = map(ct, data.as_matrix()) # map
data = pd.DataFrame(list(b)).fillna(0) # , 0
print(u'
。')
del b # b,
support = 0.2 #
confidence = 0.5 #
ms = '---' # , '--', , A--B。
find_rule(data, support, confidence, ms).to_excel(outputfile) #
lambda 문법:
lambda argument_list:expression
map:
b = map(ct, data.as_matrix()) # map , data.as_matrix() ct
python 에서 함수 식 프로 그래 밍 은 주로 몇 가지 함수 의 사용 으로 구성 된다.
4. filter (): 필 터 는 목록 의 조건 에 맞 는 요 소 를 선별 하 는 데 사 용 됩 니 다.우선 선택 은 bool 형 함수 로 되 돌아 가 는 값 이 필요 합 니 다.
b=filter( lambda x : x>5 and x<8 , range(10) ) 함수 lambda 를 판단 하여 이 함 수 를 range (10) 의 모든 요소 에 작용 합 니 다. "True" 라면 "선택" 요 소 를 선택 하고 마지막 으로 조건 을 만족 시 키 는 모든 요 소 를 하나의 목록 으로 구성 합 니 다.
오류 교정:
result = result.T.sort(['confidence','support'], ascending = False)
오류 발생: AttributeError: 'DataFrame' object has no attribute 'ort'
다음으로 변경:
result = result.T.sort_values(['confidence','support'], ascending = False)
참고 문헌:
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Python의 None과 NULL의 차이점 상세 정보그래서 대상 = 속성 + 방법 (사실 방법도 하나의 속성, 데이터 속성과 구별되는 호출 가능한 속성 같은 속성과 방법을 가진 대상을 클래스, 즉 Classl로 분류할 수 있다.클래스는 하나의 청사진과 같아서 하나의 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.