2

저는 Scikit의 Semi-supervised Naive Bayes (Bernoulli) 구현을 사용하고자합니다. this link in github에 따르면, 1 년 전 (SemisupervisedNB 클래스) 그것에 대해 몇 가지 작업과 토론이있었습니다. 반면에 another different implementation (function fit_semi?) which seems it was polished by another user afterwards 인 것 같습니다. 그러나 현재 안정적인 릴리스에서는 사용할 수 없습니다.Scikit-learn : 반 감독 Naive Bayes 구현이 가능합니까?

다른 누군가가 세미 구현 된 Naive Bayes를 빌드하기 위해 scikit-learn의 현재 릴리스에서이 두 구현 중 하나를 어떻게 사용할 수 있습니까? 감사.

PS : 나는 클래스와 NLTK에서 분류를 scikit가 배울 사용하고 SklearnClassifier

내가 레이블이없는 클래스 레이블을 변경 내 프로젝트에 SemiSupervisedNB의 코드를 시도

편집 -1 2 (나는 SKLarnClassifier NLTK에서 사용하고 내 레이블이없는 클래스는 레이블 2 가져옵니다). 그러나 ValueError 점점 : I 배열을 inf 값이 포함되어 있기 때문에 배열을 infs 또는 NaNs d (현재 및 이전 매개 변수 사이의 차이를 계산할 때) 포함 할 수 없습니다 ...이 문제를 해결하는 방법에 대한 아이디어?

+0

지점을 확인하고 그 지점에서 작업을 시도 할 수는 있지만 현재 상태가 양호한 지 확신 할 수 없습니다. 또한 현재 안정 상태에 상당히 뒤떨어져 있습니다. 분기를 현재 마스터에 리베이스/병합하려고 할 수 있습니다. 그러나 git/프로젝트에 익숙하지 않은 경우에는 몇 가지 문제가있을 수 있습니다. 또는 @larsmans에서 의견을 남기고 무엇을해야할 지 알려주십시오.) –

+0

답장을 보내 주셔서 감사합니다. 불행히도 지금은 코드를 검토 할 시간이별로 없습니다 ... @ogrisel도 기다릴게요. :) – AM2

+0

미안하지만,이 문제를 해결할 수있는 시간이 없거나 해. semi-supervised NB는 (몇 달 전에 시도한 동료가) 작동해야하지만 현재의 scikit-learn을 전혀 사용하지 않습니다. @ amueller가 제안했듯이 리베이스를 시도 할 수 있습니다. –

답변

3

몇 달 전이 주제에 대해 issue on GitHub을 열었습니다. scikit-learn의 현재 마스터 브랜치에 각각의 코드를 추가 할 수 있습니다.

사용자 @larsmans는 1 년 전 sklearn/naive_bayes.py 파일에 실험 클래스 SemisupervisedNB을 추가했습니다. 이 코드는 자신의 포크가있는 scikit-learn 저장소의 emnb 브랜치에 있으며 here에 액세스 할 수 있습니다.

필수 코드는 두 개의 파일에 있습니다 :

  1. 현재 마스터 지점에있는 파일 naive_bayes.pyemnb 지점에서 하나 이전으로 대체되어야한다.

  2. LabelBinarizer 편집은 마스터 브랜치의 sklearn/preprocessing.py 파일에서 찾을 수 있습니다. 전체 클래스는 @larsmans 'emnb 브랜치의 정의로 대체되어야합니다. 이 파일은 sklearn/preprocessing/__init__.py 파일에 있습니다.

Naive Bayes 분류 자의 코드가 1 년 동안 많이 변경되지는 않았지만 일부 버그 수정이 추가되었습니다. 따라서 파일의 최신 버전 naive_bayes.py과 클래스 LabelBinarizer을 유지하고 실험 버전에 다른 이름을 지정하는 것이 좋습니다.

방금 ​​scikit-learn 저장소의 자체 포크를 만들고 현재 stable 브랜치 상단에 실험 파일을 추가했습니다 0.13.X. 이 지점은 0.13.X-emnb이라고하며 here에 액세스 할 수 있습니다. 최근 세 번 (123)의 커밋을 보면 변경하고 새로 만든 파일을 볼 수 있습니다.

SemisupervisedNB이 최신 분류의 다른 분류기와 함께 작동하지 않기 때문에 naive_bayes.pysemisupervised_naive_bayes.py 옆에 새 모듈을 추가했습니다. 여기에 이전 버전의 분류 기준이 이름이 바뀐 버전으로 표시됩니다 (예 :가장 최근 버전의 분류 자와 충돌하지 않도록 MultinomialNB 대신 SemiMultinomialNB을 입력하십시오. 마찬가지로, 나는 LabelBinarizer 옆에 클래스 SemisupervisedLabelBinarizer을 추가했다. (이름의 선택은 약간 불행하지만 적어도 그것이 사용되어야하는 것은 분명하다.)

따라서 반자 반자 버전의 분류 기준을 사용하려면 sklearn.semisupervised_naive_bayes 모듈을 사용하십시오. 현재 버전의 경우 sklearn.naive_bayes 모듈을 사용하십시오.

그러나 이것은 매우 실험적입니다. 이 오래된 코드를 작동시키기위한 설정 일뿐입니다. 나는 벌레를 찾지 않았다.

+0

시간과 인내심을 가져 주셔서 감사합니다. 마침내 현재 지점에서 실행하고 있습니다. semisupervised_naive_bayes.py의 501 및 448 줄을 각각 "SemiBaseDiscreteNB"및 "SemiBernoulliNB"로 변경해야했습니다. – AM2

+0

@ AM2 문제는 없습니다. 천만에요. :) 나는 직접적으로 반 감독 버전을 필요로하기 때문에이 문제를 너무 자세하게 다루었습니다. 내가 도울 수있어서 기쁘다. – pemistahl

+0

@ AM2 오, 알겠습니다. 448과 501 두 줄의 수업 이름이 바뀌 었습니다. 알려 주셔서 감사합니다. – pemistahl