2016-11-24 20 views
0

저는 python을 사용하여 sklearn의 BayesianGaussianMixture (및 동일한 문제를 보여주는 GaussianMixture)을 실험했습니다.Sklearn의 BayesianGaussianMixture에서 매우 큰 로그 확률

배포본에서 가져온 항목이 여러 개있는 모델에 적합하게 설정 한 다음 보관 된 데이터 세트 (일부는 배포판의 일부 외부에 있음)로 모델을 테스트했습니다. 같은

뭔가 :

X_train = ... # 70x321 matrix 
X_in = ... # 20x321 matrix of held out data points from X 
X_out = ... # 20x321 matrix of data points drawn from a different distribution 
model = BayesianGaussianMixture(n_components=1) 
model.fit(X_train) 
print(model.score_samples(X_in).mean()) 
print(model.score_samples(X_out).mean()) 

출력 :

-1334380148.57 
-2953544628.45 

score_samples 방법은 주어진 데이터의 당 샘플 로그 가능성을 반환하고, "의"샘플 "훨씬 더 가능성이보다 out "샘플을 예상대로 - 절대 값이 왜 그렇게 높은지 궁금합니다.

score_samples에 대한 설명서에는 "각 샘플의 가중치 로그 확률 계산"이라고 나와 있지만 가중치의 기준이 무엇인지 명확하지 않습니다.

먼저 입력을 조정해야합니까? 입력 차원이 너무 높습니까? 추가 매개 변수 튜닝이 필요합니까? 아니면 메서드가 반환하는 것을 오해하고 있습니까?

답변

1

나는 아마 이것에 늦었지만, 누군가가 유용하다고 생각할 때를 대비하여 내 대답을 추가 할 것이라고 생각했습니다. 가중치는 혼합 가중치를 기반으로합니다.

먼저 입력을 조정해야합니까?

이것은 대개 나쁜 생각이 아니지만 귀하의 데이터에 대해 더 많이 알지 못한다고 말할 수는 없습니다.

입력 크기가 너무 높습니까?

실제로 맞는 데이터 양이 너무 많습니다. 차원의 저주를 기억하십시오. 데이터의 행 수가 적고 312 개의 기능, 1 : 4 비율이 있습니다. 그것은 실제로 실제로 작동하지 않을 것입니다.

추가 매개 변수 조정이 필요합니까? 아니면 그냥 메소드가 반환하는 것을 오해하고 있습니까?

출력이 매우 부정적인 로그 확률입니다. e를 이렇게 큰 음의 크기로 올리면 확률이 0에 가까워집니다. 당신의 결과는 실제로 그 관점에서 의미가 있습니다. 해당 구성 요소에있을 확률이 더 높은 지역에서 로그 확률을 확인할 수 있습니다. 또한 각 구성 요소에 대한 공분산을 확인하여 저하 된 솔루션이 없는지 확인하십시오.이 경우 데이터 및 차원의 양이 주어질 가능성이 큽니다. 그 전에는 더 많은 데이터를 얻거나 차원 수를 줄일 수 있는지 알아볼 수 있습니다.

나는 중요한 점을 언급하는 것을 잊어 버렸습니다. 출력은 밀도에 대한 것이므로이를 염두에 두십시오.