libpgm 사용 경험 치
관련 라 이브 러 리
베 이 루스 네트워크 를 지원 하 는 라 이브 러 리 를 찾 으 려 면 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?
Bayesian Network Toolbox
가 있 는데 베 이 루스 네트워크 의 학습 과 추 리 를 할 수 있 습 니 다.matlab 자체 가 유 료 소프트웨어 이 고 너무 큽 니 다.Jayes
는 코드 추천 에 사용 되 는 자바 라 이브 러 리 입 니 다.하지만 현재 인터넷 학습 은 지원 되 지 않 는 다.더 알 아 보기 An Introduction to Bayesian Networks with Jayes pgmpy
는 python 라 이브 러 리 로 아직 업데이트 가 빈번 하 다.하지만 아직 네트워크 구조의 학습 은 지원 되 지 않 았 다.libpgm
구조 학습, 파라미터 학습 을 지원 하고 문서 도 비교적 간단 하 다.닥 친 문제
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
코드 는 쉽게 이해 할 수 있 고 인위적으로 노드 에 크기 순 서 를 주 며 작은 노드 가 큰 노드 를 가리 키 는 것 만 허용 한다.만약 어느 쪽 이 일치 하지 않 는 다 면, 교환 측의 출 점 과 입 점 이다.그림 에 고리 가 나타 나 지 않 을 것 을 보장 할 수 있 음 이 분명 하 다.실제 테스트 에 따 르 면 이렇게 수정 한 후에 그림 에 고리 가 존재 하 는 오류 가 발생 하지 않 는 다.이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.