libpgm 사용 경험 치

여기 libpgm 는 확률 그림 모델 에 사용 되 는 python 라 이브 러 리 입 니 다. 문서 주 소 는?http://pythonhosted.org/libpgm/ 여 기 는 주로 libpgm 로 베 이 루스 네트워크 (bayesian network) 의 학습 과 추 리 를 진행 합 니 다.현재 libpgm 의 최신 버 전 은 1. 3 입 니 다.
관련 라 이브 러 리
베 이 루스 네트워크 를 지원 하 는 라 이브 러 리 를 찾 으 려 면 stackoverflow 의 이 문 제 를 참고 하 십시오: Create Bayesian Network and learn parameters with Python 3. x
제 프로젝트 에 서 는 베 이 루스 네트워크 의 구조 학습 과 파라미터 학습 이 필요 합 니 다. libpgm 를 사용 하기 전에 도 많은 라 이브 러 리 를 찾 았 습 니 다.
  • Weka 은 강력 한 데이터 분석 도구 로 자바 인 터 페 이 스 를 제공 하여 베 이 루스 네트워크 의 학습 을 할 수 있다.그러나 이것 은 하나의 속성 을 클래스 속성 으로 지정 해 야 합 니 다. 제 프로젝트 에 클래스 속성 이 여러 개 있어 서 이런 지정 을 할 수 없습니다.Weka 의 GUI 인터페이스 에서 베 이 루스 네트워크 를 직접 분류 방법 으로 하 는데 이것 은 나의 수요 와 그다지 부합 되 지 않 는 다.클래스 속성 을 지정 하지 않 아 도 된다 는 언급 도 있 었 고 더 이상 조사 연 구 를 하지 않 았 다.위 카 를 이용 해 베 이 루스 네트워크 와 관련 된 계산 을 하려 면 두 개의 링크 를 참고 할 수 있다.
    create bayesian network with random cpt values by java code How to learn a Bayesian Network (structure+parameters) with the WEKA API?
  • matlab 중 하나 Bayesian Network Toolbox 가 있 는데 베 이 루스 네트워크 의 학습 과 추 리 를 할 수 있 습 니 다.matlab 자체 가 유 료 소프트웨어 이 고 너무 큽 니 다.
  • Jayes 는 코드 추천 에 사용 되 는 자바 라 이브 러 리 입 니 다.하지만 현재 인터넷 학습 은 지원 되 지 않 는 다.더 알 아 보기 An Introduction to Bayesian Networks with Jayes
  • 참고
  • pgmpy 는 python 라 이브 러 리 로 아직 업데이트 가 빈번 하 다.하지만 아직 네트워크 구조의 학습 은 지원 되 지 않 았 다.
  • libpgm 구조 학습, 파라미터 학습 을 지원 하고 문서 도 비교적 간단 하 다.

  • 닥 친 문제
    libpgm 실제 사용 중 문제 가 발생 했 습 니 다:
  • 훈련 속도 가 느 려 서 제 데이터 가 집중 되 었 습 니 다. 모두 13000 개의 기록 이 있 고 모든 기록 은 200 여 개의 속성 이 있 으 며 모든 속성 은 2 치 입 니 다.한 번 훈련 하려 면 약 30 여 시간 이 걸린다.다른 라 이브 러 리 를 시험 해 본 적 이 없어 서 라 이브 러 리 의 문제 인지 무슨 문제 인지 잘 모 르 겠 습 니 다.이런 속 도 는 받 아들 일 수 없다.마지막 해결 방법 은 scikit learn 라 이브 러 리 로 먼저 특징 선택 을 한 번 하고 비교적 관련 된 특징 을 골 라 진일보 한 베 이 루스 네트워크 학습 을 하 는 것 이다.
  • libpgm 함 수 를 호출 하여 구조 학습 오류 호출 discrete_constraint_estimatestruct 함수 로 베 이 루스 네트워크 학습 을 진행 합 니 다. 그림 에 링 (Graph contains a cycle) 이 존재 하 는 오 류 를 되 돌려 줍 니 다.
    Traceback (most recent call last): File “fs.py”, line 77, in result = learner.discrete_constraint_estimatestruct(bn_data) File “/Users/zhuting/Projects/PyWorkspace/BayesianNet/venv/lib/python2.7/site-packages/libpgm/pgmlearner.py”, line 590, in discrete_constraint_estimatestruct pdag.toporder() File “/Users/zhuting/Projects/PyWorkspace/BayesianNet/venv/lib/python2.7/site-packages/libpgm/graphskeleton.py”, line 146, in toporder assert (not Ecopy), (“Graph contains a cycle”, Ecopy) AssertionError: (‘Graph contains a cycle’, [[164, 21], [21, 58], [21, 16], [16, 11], [58, 164], [11, 67], [16, 2], [164, 2]])
    이것 은 이해 할 수 없 는 것 이다. 데 이 터 를 제공 하여 학습 을 하 는데 뜻밖에도 학습 에 실패 하고 고리 가 있 는 그림 을 배 울 수 있다.libpgm 의 라 이브 러 리 소스 코드 를 보면 iscrete_constraint_estimatestruct 실제 적 으로 먼저 호출 discrete_constraint_estimatestruct 한 다음 에 호출 discrete_mle_estimateparams, 즉 먼저 구조 학습 을 한 다음 에 매개 변수 학습 을 하 는 것 을 발견 할 수 있 습 니 다.구조 학습 의 마지막 부분 에서 toporder 토폴로지 순 서 를 실시 하여 그림 속 의 고 리 를 발견 한다.여기 서 느끼 는 것 은 불합리 하 다. 구조 학습 과정 에서 고리 가 나타 나 지 않도록 해 야 한다. 구조 학습 이 완 성 된 후에 고리 가 있 는 것 을 발견 하면 처리 할 방법 이 없다.마지막 으로 토폴로지 정렬 전에 코드 를 추가 하여 그림 에 고리 가 없 도록 하 는 교묘 한 방법 을 생각 했다.
    newE = []
    for e in self.E:
        if e[0] > e[1]:
            e.reverse()
        newE.append(e)
    self.E = newE
    코드 는 쉽게 이해 할 수 있 고 인위적으로 노드 에 크기 순 서 를 주 며 작은 노드 가 큰 노드 를 가리 키 는 것 만 허용 한다.만약 어느 쪽 이 일치 하지 않 는 다 면, 교환 측의 출 점 과 입 점 이다.그림 에 고리 가 나타 나 지 않 을 것 을 보장 할 수 있 음 이 분명 하 다.실제 테스트 에 따 르 면 이렇게 수정 한 후에 그림 에 고리 가 존재 하 는 오류 가 발생 하지 않 는 다.
  • 좋은 웹페이지 즐겨찾기